开发者工具 · Chmod 计算器
第四个 chmod 数字:setuid、setgid 和粘性位如何工作
· 工作原理
chmod UNIX 开发人员工作流程
诸如 4755 和 2775 之类的模式带有一个前导数字,可以更改程序运行的身份或新文件的所有者。这篇文章解释了这三个特殊位以及它们如何在 ls -l 中显示。
drwxrwsr-x 中的 s — 共享项目目录的行为不同,并且 ls 输出的字母不在基本备忘单中
rwxrwsr-x 中的 s 在一个位置记录了两个事实:setgid 已启用,并且组执行也已启用。该实现将 setgid 存储为八进制 2000,然后用 s 替换组执行字符。选择目录类型标记后,模式 2775 显示为 drwxrwsr-x,而四位数摘要保留前导特殊位数字。
该输出是转换,而不是文件系统观察。目标选择器更改页面解释位的方式,但它从不打开目录或检查所有权。对于目录,实现的解释是新创建的文件继承该目录的组。无论特定存储系统应用该行为,还是其他策略影响访问,都需要超出此计算器的证据。
第四位数字及其字母 — 4、2 和 1 作为熟悉模式的前缀,在执行位置显示为 s 和 t,当下面的执行位关闭时为大写
前导八进制数字组合了三个独立的掩码:setuid 为 4000,setgid 为 2000,粘性为 1000。它们的字母占据现有的执行位置,而不是将字符添加到九位置显示中。 setuid 使用所有者位置,setgid 使用组位置,粘性其他位置。该矩阵将所有三个部分与普通的读取、写入和执行分开公开。
大小写揭示了底层的执行位。模式 4755 呈现 rwsr-xr-x,因为所有者执行伴随 setuid; 4644 呈现 rwSr--r-- 因为它没有。解析器将两种形式读回相应的特殊位和执行位。相同的下与上规则生成 s 或 S(用于 setgid)和 t 或 T(用于粘性),在往返过程中保留所有组合。
setuid — /usr/bin/passwd 如何以文件所有者的权限运行以及为什么 Linux 在解释脚本上忽略 setuid
对于常规文件,实现的 setuid 解释取决于所有者执行。当这两个位都存在时,页面表示运行文件使用文件所有者的身份而不是调用者的身份。当 setuid 存在而没有所有者执行时,显示内容将使用大写 S 并说明没有任何可运行的内容。这是该部分经过更正、有源代码支持的范围。
计算器不会识别特定的可执行文件、启动可执行文件或检查平台如何处理脚本。它的证据是提供的模式和目标选择。模式 4755 可以分解为 setuid 加 rwxr-xr-x,赋值预览在普通子句后面追加 u+s。仅验证渲染和解释;计划的适用性和实际执行仍然是外部问题。
常规文件的setuid渲染和解释
Setgid 的表示独立于普通组权限。模式 2775 将 2000 掩码与所有者和组 7 以及其他 5 相结合。显示 rwxrwsr-x 保持组读、写和执行,同时用 s 替换可见的 x。目录解释将特殊位与新创建文件的目录组的继承相关联。
删除组执行同时保留 setgid 会将组位置字母更改为大写 S。该可见警告直接来自渲染器,无论目标措辞如何。该页面可以比较这些已完成的值并显示哪个复选框发生了更改,但它无法检查共享目录、其当前组或创建条目的身份。观点之间的一致是算术证据,而不是操作批准。
目录上的粘滞位 - /tmp 中的限制删除以及为什么 1777 与 777 不同
Sticky 占据其他执行位置并贡献八进制 1000。对于目录模式 1777,所有普通权限保持启用状态,最终符号字符变为 t。实现的目录解释添加了删除和重命名限制,而 777 解释则警告可写目录没有粘性。因此,转换器在不改变底层 rwx 三元组的情况下使一位差异可见。
如果粘性存在而没有其他执行,则最终字符为大写 T。解析器和渲染器在两个方向上都保留了这种区别。该页面不会检查真实的共享目录、条目所有者或尝试的删除。它的可靠结论更窄:提供的整数包含粘性,其执行同伴通过大小写可见,并且选择面向目录的解释文本。
工作示例:为共享目录构建 2775 — 派生数字和等效符号 chmod g+s,a+rwx,o-w
将 2775 构建为四个可见组件:用于 setgid 的特殊数字 2,用于 rwx 的所有者数字 7,用于 rwx 的组数字 7,以及用于 r-x 的其他数字 5。输入完整的值会生成 rwxrwsr-x。矩阵单独选择 setgid,而摘要则命名所有者、组和其他权限以及该特殊位。
生成的赋值列表为 u=rwx,g=rwx,o=rx,g+s。这与九字符显示不同,但表示相同的十二位值。选择目录会更改对已实现的组继承措辞的解释;选择文件会更改措辞,但不会更改 2775。计算器从不验证目标组或创建文件,因此该示例仍然是一个模型而不是部署方案。
工作示例:为共享目录模型构建和读取 2775
挂载行为、功能和其他平台语义未建模。该页面没有安装输入、功能集、内核查询或文件系统探测。它可以表示 setuid、setgid 和 Sticky,并且可以在常规文件和目录之间改变其解释。它无法确定外部规则是否在实际目标上中和、扩展或以不同方式解释这些位。
即使是源代码的角落措辞也不应该超出接口范围。有效的特殊位模式证明解析器、渲染器、矩阵、摘要和生成的分配是一致的。它并不证明发生了执行、继承或删除行为。将不受支持的策略声明排除在诊断之外,并将复制的命令视为惰性文本,直到单独检查的环境提供缺少的上下文。
挂载策略、功能和未实现的角落语义仍然是外部的
实现的要点是具有位置意义的往返。 setuid 映射到所有者执行位置,setgid 映射到组执行,粘性到其他执行。小写表示相关执行位已打开;大写表示关闭。前导八进制数字和专用复选框保留相同的信息,因此不需要单独从散文中推断出特殊位。
通过比较所有表示来测试特殊模式。对于 2775,预计会出现前导 2、组位置 s、选中的 setgid 框以及生成的 g+s 加法。不匹配会暴露转换问题。协议只建立一种一致的模式。所有权、安装策略、功能、应用程序规则以及运行 chmod 的后果仍然超出了浏览器计算器的证据范围。