Linux权限模型:三组三位
Linux的文件权限模型由三组权限组成:所有者(Owner/User)、所属组(Group)、其他人(Others)。每组权限包含三位:读(Read,r=4)、写(Write,w=2)、执行(Execute,x=1)。通过ls -l命令可以看到权限字符串,如-rwxr-xr--,第一个字符表示文件类型(-普通文件、d目录、l链接),后面9个字符分为三组,分别对应所有者、所属组和其他人的权限。
理解权限模型的关键是"最小权限原则"——只授予完成任务所需的最低权限。过度开放的权限(如chmod 777)是安全漏洞的常见来源。
数字表示法(八进制)
数字表示法将每组权限的三个位转换为八进制数字:r=4,w=2,x=1,无权限=0。三组权限组合为一个三位八进制数。常见权限值:
- 755(rwxr-xr-x):所有者可读写执行,组和其他人可读和执行。这是最常用的目录权限和可执行文件权限
- 644(rw-r--r--):所有者可读写,组和其他人只读。这是最常用的普通文件权限
- 700(rwx------):仅所有者有完全权限。用于私有脚本和配置文件
- 600(rw-------):仅所有者可读写。用于密钥文件和敏感配置(如SSH私钥必须为此权限)
- 777(rwxrwxrwx):所有人完全权限。几乎永远不应该使用,是安全审计的红线
数字表示法的优点是简洁,一行命令即可设置所有权限。缺点是不支持增量修改——每次都是完整设置,容易覆盖已有权限。
符号表示法
符号表示法用字母表示权限的修改方式,支持增量修改。格式为:对象(ugoa)操作(+-=)权限(rwxXst)。
对象:u(所有者)、g(所属组)、o(其他人)、a(所有人,默认值)。操作:+(添加权限)、-(移除权限)、=(设置精确权限)。特殊权限:X(仅对目录或已有执行权限的文件添加执行权限)、s(SetUID/SetGID)、t(Sticky Bit)。
符号表示法示例:chmod u+x script.sh为所有者添加执行权限;chmod g-w file.txt移除组的写权限;chmod o=rx dir/将其他人的权限设为读和执行;chmod a+r file.txt为所有人添加读权限。
特殊权限位:SUID、SGID、Sticky Bit
除了基本的rwx权限,Linux还有三个特殊权限位:
- SUID(Set User ID,4xxx):执行文件时以文件所有者身份运行。最典型的例子是/usr/bin/passwd——普通用户执行它时可以修改/etc/shadow(root所有),因为passwd命令设置了SUID。SUID只对可执行文件有效
- SGID(Set Group ID,2xxx):对文件,执行时以文件所属组身份运行;对目录,新创建的文件继承目录的所属组。SGID在共享目录场景中非常有用
- Sticky Bit(1xxx):对目录设置后,只有文件所有者(和root)可以删除其中的文件。/tmp目录通常设置了Sticky Bit,防止用户删除其他人的临时文件
目录权限的特殊性
目录的权限含义与文件不同:读权限(r)表示可以列出目录内容(ls);写权限(w)表示可以在目录中创建和删除文件;执行权限(x)表示可以进入目录(cd)和访问目录中的文件。一个常见错误是给目录设置644——没有执行权限的目录无法进入,读权限也无从发挥作用。目录通常需要至少设置755(rwxr-xr-x)才能正常使用。
工具推荐
使用我们的在线Chmod计算器,可视化勾选权限自动生成数字和符号表示法,支持SUID/SGID/Sticky Bit特殊权限,帮助你准确设置Linux文件权限。