Unix 权限

快速答案: 每个文件都有三组权限,分别对应所有者、组用户和其他用户;每组包含读(r=4)、写(w=2)、执行(x=1)。将每组权限相加即可得到八进制数字:rwx=7、r-x=5、rw-=6、r--=4。因此 755 表示 rwxr-xr-x。

读取权限符号

ls -l 会显示类似 drwxr-xr-- 的十个字符。第一个字符是文件类型(d 表示目录,- 表示普通文件,l 表示符号链接),后面是三组权限:所有者、组用户和其他用户。对于文件,x 表示“作为程序运行”;对于目录,r 表示“列出名称”,w 表示“创建或删除条目”,x 表示“进入目录(cd)”。只有 r 没有 x 的目录可以列出名称,但无法访问其中的文件。

chmod 权限计算器可以双向转换八进制表示法和符号表示法,并帮你生成 chmod 命令。

实际常用的权限模式

755rwxr-xr-x所有人都可以进入的可执行文件或目录,只有所有者可以修改。脚本和公开目录的常用默认值。
644rw-r--r--所有人都可以读取,只有所有者可以编辑。Web 内容和源文件的常用默认值。
700rwx------私有目录或程序,仅所有者可访问。~/.ssh 的标准权限。
600rw-------私有文件,仅所有者可访问。SSH 私钥和许多凭据文件要求使用此权限。
640rw-r-----所有者可编辑,组用户可读取。常见于由服务组共享的配置文件。
750rwxr-x---所有者拥有全部权限,组用户可以进入或执行,其他用户没有权限。
444r--r--r--所有人只读,包括所有者(除非使用 chmod 或 rm -f 覆盖)。
777rwxrwxrwx任何人都可以做任何事。几乎总是错误的选择,通常说明文件所有权配置有问题。

特殊位与 umask

前置的第四个八进制数字表示特殊位:setuid(4) 让可执行文件以文件所有者身份运行;setgid(2) 让程序使用文件所属组的身份,并让目录中新建文件继承该组;目录上的 sticky(1)(如 /tmp 的 1777)表示只有文件所有者可以删除文件。

umask 决定新文件要移除哪些权限:常见的 umask 022 会让新文件得到 666-022=644,让新目录得到 777-022=755;更严格的 umask 077 会默认让所有内容保持私有。

参考资料