返回

chmod 权限计算

开发工具

正在载入

正在加载工具

工具代码会在打开时按需载入,请稍候。

本工具的全部运算都发生在你的浏览器中,输入内容不会发送到任何服务器。

关于这个工具

将 Unix 权限位在八进制与 rw-r--r-- 这样的九字符表示之间互转,也可用复选框组合权限。结果统一显示四位八进制,完整保留 setuid、setgid、sticky 及大写 S、T 的含义。选择文件或目录只改变解释,不改变权限位。计算全部在本地进行,不读取或修改任何实际文件。

常见用途

  • 解读复制来的权限值,分别查看所有者、所属组和其他用户的权限位。
  • 在检查配置前,区分执行或搜索权限与独立的 setuid、setgid、sticky 特殊位。
  • 不运行命令,就能理解相同权限位用于普通文件和目录时的不同含义。

使用方法

  1. 1.选择八进制或符号输入。输入恰好三位或四位 ASCII 八进制数字,例如 644、2750,或恰好九个权限字符,例如 rwxr-s---。只输入权限值,不含空格、文件名或文件类型前缀。
  2. 2.转换后查看四位八进制、九字符权限和各个复选框。可通过复选框尝试另一组权限。切换文件或目录,阅读对应的访问权限及特殊位说明。
  3. 3.复制结果或 GNU 示意命令前先阅读提示。以 0644 为例,文件命令为 chmod =0644 -- example-file,目录命令为 chmod =0644 -- example-directory。= 运算符用于请求精确权限位。固定名称仅作占位,本页不会执行命令。

可执行的权限位示例

三位数值规范化

{
  "format": "octal",
  "value": "644"
}
{
  "octal": "0644",
  "symbolic": "rw-r--r--"
}

读为 4、写为 2,因此所有者的 6 表示 rw-;后两个 4 仅表示读。省略的特殊位补为 0,输出为 0644。这里的 JSON 描述输入字段:在页面选择 format 对应的格式,只将 value 的内容填入输入框。

区分所有者、所属组与其他用户

{
  "format": "octal",
  "value": "0750"
}
{
  "octal": "0750",
  "symbolic": "rwxr-x---"
}

所有者为 rwx,所属组为 r-x,其他用户无普通权限。选择目录时,说明中的 x 变为搜索或穿越,编码结果不变。

setuid 与所有者执行位同时开启

{
  "format": "octal",
  "value": "4755"
}
{
  "octal": "4755",
  "symbolic": "rwsr-xr-x"
}

最高位 4 表示 setuid。所有者的 7 包含执行位,因此其第三个字符为小写 s。此例只演示编码,不建议开启 setuid。

开启 setgid,但关闭组执行位

{
  "format": "octal",
  "value": "2640"
}
{
  "octal": "2640",
  "symbolic": "rw-r-S---"
}

特殊位 2 开启 setgid;所属组的 4 只有读权限,没有执行权限,因此该组第三个字符为大写 S。所有者仍为 rw-。

sticky 开启,但其他用户不可执行

{
  "format": "octal",
  "value": "1700"
}
{
  "octal": "1700",
  "symbolic": "rwx-----T"
}

sticky 已开启,而其他用户执行位关闭,最后一位因此为大写 T。所有者拥有执行权限并不会让 T 变为 t。

只有三个特殊位,没有普通权限

{
  "format": "octal",
  "value": "7000"
}
{
  "octal": "7000",
  "symbolic": "--S--S--T"
}

最高位 7 是 4 + 2 + 1。所有普通权限关闭时,三个特殊位置分别显示 S、S、T。此权限位组合有效,但没有授予普通权限。

反向解析全部小写特殊字符

{
  "format": "symbolic",
  "value": "--s--s--t"
}
{
  "octal": "7111",
  "symbolic": "--s--s--t"
}

每个小写特殊字符还包含对应的执行位。三个特殊标志组成最高位 7,三个执行位组成 111,合起来得到 7111。

反向解析带 setgid 的目录式表示

{
  "format": "symbolic",
  "value": "rwxr-s---"
}
{
  "octal": "2750",
  "symbolic": "rwxr-s---"
}

所有者为 rwx,所属组为 r-x 并开启 setgid,其他用户无权限,因此转换为 2750。目录的组继承是额外的语义说明,不是另一个编码位。

所有权限位关闭

{
  "format": "symbolic",
  "value": "---------"
}
{
  "octal": "0000",
  "symbolic": "---------"
}

九个连字符表示普通权限和特殊位全部为零,规范结果为 0000。这不能证明特权进程或其他访问控制机制无法访问实际文件。

常见权限解读误区

  • 直接粘贴 drwxr-x--- 或 -rw-r--r--,没有去掉文件类型前缀。
  • 将 S 或 T 当作错误,或认为开启特殊位就一定同时开启执行位。
  • 输入 u+x、0o644、数字 8/9 或额外空白,误以为本工具支持这些格式。
  • 认为目录可读就可以穿越,或认为文件的写权限决定其名称能否被删除。
  • 期待 GNU 的 chmod 0644 清除目录原有 setuid/setgid,或认为 GNU 的 =mode 语法可在所有系统通用。
  • 把权限位转换当作安全审计,或为消除访问报错而直接授予广泛权限。

限制与说明

  • 八进制输入必须是 3–4 位 0 至 7 的数字,结果统一为 0000 至 7777 的四位表示。符号输入必须恰好九字符,按三组 rwx 的位置排列;s/S 只可位于所有者或所属组的执行位置,t/T 只可位于其他用户的执行位置。不接受空白、0o 前缀、一位/两位/五位数值、完整 ls 输出、文件类型前缀、ACL 后缀,以及 u+x、a=rw、=0644 等权限操作表达式。
  • 本工具只计算 12 个权限位的表示,不判断实际能否访问文件。不会检查所有权、组成员身份、ACL、capabilities、安全策略、挂载选项、父目录或符号链接;不应用 umask,也不预测新建文件的权限。操作系统与文件系统可能限制、忽略或清除特殊位。
  • 对文件而言,r/w/x 分别表示读内容、改内容和执行;对目录则表示列出名称、修改目录项和搜索或穿越目录。创建或删除目录项通常同时需要写和搜索权限。文件自身的写权限不决定能否删除其目录项。目录的 0644 不含任何搜索权限,只用于说明,不是推荐配置。
  • GNU chmod 使用 0644 这样的普通数值模式时,可能保留目录原有的 setuid/setgid。目录示意命令因此使用 =0644 请求精确权限位。此类运算符数值模式是 GNU 扩展;POSIX 允许实现忽略目录的 setuid/setgid 修改请求。使用命令前应核对目标系统,并自行验证实际结果。
  • 转换只使用已加载页面中的输入,不调用文件系统、网络或 shell,也不持久保存权限输入。复制会将所选结果写入剪贴板,随后不再受页面控制。示例只解释权限位,不是授权建议;给所有人广泛权限并不是解决权限报错的通用办法。

常见问题

为什么 s 和 t 有时显示为大写?

每组权限的第三个字符可同时表示两个独立的位。在所有者或所属组位置,小写 s 表示 setuid 或 setgid 与执行位同时开启;大写 S 表示特殊位开启但执行位关闭。在其他用户位置,t 表示 sticky 与执行位同时开启,T 表示只有 sticky。大写有明确含义,不代表输入无效。

文件和目录中的 x 含义相同吗?

普通文件的 x 是执行权限位,但不保证文件本身是可运行的程序。目录的 x 表示搜索或穿越,用于解析其下的目录项;列出名称和修改目录项是另外的权限。切换到目录只改变说明和命令示例,不会自动增加执行位。

setuid、setgid 和 sticky 实际起什么作用?

在系统支持的可执行文件上,setuid/setgid 可影响进程的有效用户或组 ID,仍受系统限制。目录 setgid 通常使新目录项继承该目录的所属组,并让新子目录继承 setgid;目录 setuid 的行为不具可移植性。目录 sticky 在普通检查之外,将非特权用户删除或重命名目录项的操作限制为该项的所有者或目录所有者。sticky 不阻止修改文件内容,对普通文件的作用取决于系统。

能直接粘贴 chmod 命令或一整行 ls -l 吗?

不能。本页的符号表示仅指九个权限显示字符,不是 chmod 的操作语法。复制 ls 权限时应去掉最前面的文件类型字符、ACL 标记和其余列。本工具无法检测实际文件当前的权限,也无法保证展示的命令执行成功。

相关工具