Chmod 权限计算器
勾选属主、属组和其他用户的读、写、执行权限,即可得到八进制 chmod 数字、rwx 符号字符串以及可直接粘贴到终端的命令。
勾选复选框得到数字,或输入数字查看它实际允许什么。 权限面向三类对象——文件属主、属组和其他所有人——每类各自独立拥有读、写、执行三种权限。你可以切换表格,也可以直接输入八进制值,两者会保持同步。
| 对象 | 读 (4) | 写 (2) | 执行 (1) |
|---|---|---|---|
| 属主 (u) | |||
| 属组 (g) | |||
| 其他人 (o) |
勾选属主、属组和其他用户的读、写、执行权限,即可得到八进制 chmod 数字、rwx 符号字符串以及可直接粘贴到终端的命令。
勾选复选框得到数字,或输入数字查看它实际允许什么。 权限面向三类对象——文件属主、属组和其他所有人——每类各自独立拥有读、写、执行三种权限。你可以切换表格,也可以直接输入八进制值,两者会保持同步。
| 对象 | 读 (4) | 写 (2) | 执行 (1) |
|---|---|---|---|
| 属主 (u) | |||
| 属组 (g) | |||
| 其他人 (o) |
每个 Unix 文件都带有九个权限位,按三位一组分成三组。第一组属于文件属主,第二组属于文件所属的组,第三组属于系统上的其他所有人。每组中的三位分别表示读、写、执行,权值依次为 4、2、1。把需要的位相加即可得到 0 到 7 之间的一个数字,这就是权限历来用三位八进制数书写的原因。
755 这样的数字正是由此而来。属主位是 7,即 4 + 2 + 1,因此属主可读、可写、可执行;属组位和其他人位都是 5,即 4 + 1,可读可执行但不能修改。同一个值用符号写法表示就是 rwxr-xr-x,也正是 ls -l 在文件类型字符之后打印的内容。
这三个动词在目录上的含义略有不同:读允许列出目录内的名称,写允许创建和删除条目,执行允许进入目录并访问一个已知路径。只有读而没有执行权限的目录几乎没有用——你能看到名字,却打不开背后的任何东西。
少数几种组合就能覆盖大部分实际工作。644(rw-r--r--)是文档或源文件的常规模式:属主编辑,其他人只读。755(rwxr-xr-x)是目录和可执行脚本的常规模式,因为二者都必须有执行位才能使用。600(rw-------)让文件仅对属主可见,这正是 OpenSSH 对私钥的强制要求;目录对应的是 700。
赋予他人写权限的模式值得再三斟酌。777 意味着机器上任何账号都能覆盖或删除该文件,它几乎从来不是正确答案——它只是在不理解问题的前提下让权限报错最快消失的办法。当 Web 服务器无法写入上传目录时,真正的修复方式通常是用 chown 更改属主或属组,而不是把文件对全世界开放。
权限还与 umask 相互作用。新文件按默认模式减去 umask 值创建,常见的 umask 是 022,这就是新建文件通常是 644 而不是 666 的原因。
在这三位之前还可以有第四位,它携带三个特殊位:setuid(4)、setgid(2)和粘滞位(1)。它们改变程序以谁的身份运行,以及目录如何对待其中新建的文件。
可执行文件上的 setuid 会让它以文件属主而非启动者的权限运行。passwd 正是靠它在普通用户执行时更新系统文件,这也是 setuid 程序需要被严格审计的原因——其中一个缺陷就是通往属主权限的直通车。setgid 对属组起同样作用。在目录上,setgid 的含义更为友好:目录内新建的文件会继承该目录的属组,从而让共享项目目录始终保持一致。
粘滞位最常见于 /tmp,通常写作 1777。它允许任何人在目录中创建文件,同时把删除权限限制为文件自身的属主,使用户无法删除彼此的临时文件。在长格式列表中这些位会替换执行位字符:s 取代 x 表示设置了 setuid 或 setgid,大写 S 表示设置了该位但没有执行权限,t 则标记粘滞位。