开发者工具 · Chmod 计算器
Unix 权限模型:从 1970 年代的 chmod 到 POSIX 模式位
· 背景
chmod UNIX 访问控制
所有者/group/others 模型已经存在了几十年,几乎没有发生任何变化。这篇文章追溯了它的来源、POSIX 标准化的内容以及为什么它仍然适合大多数工作。
2020 年代部署中的 1970 年代设计 — 每个容器和 CI 运行程序仍然使用 rwx,了解原因会有所帮助
当前部署仍然存在 0644 等模式和 rw-r--r-- 等符号字符串,但此存储库不是历史存档。它的证据是实现的表示:十二位、确定性转换以及八进制和符号输入的验证。关于每个 Unix 派生系统的日期、发明人、专利和声明需要此处未提供的来源。
因此,计算器提供了紧凑权限模型的现在时视图。一个整数驱动所有者、组和其他控件以及 setuid、setgid 和 Sticky。可以以八进制、符号和矩阵形式检查输出。协议证明了一致的转换,而不是模型的起源、普遍性或执行。
当前部署中出现长期存在的符号,但此存储库不是历史源
九个普通位形成三个相等的类。所有者、组和其他人各自接收权重为 4、2 和 1 的读、写和执行位置。计算器在任何地方都保持该顺序:在尾随的三个八进制数字、九个字符的符号行、复选框矩阵以及为文件或目录生成的简单英语描述中。
640 模式演示了没有谱系声明的结构。所有者6表示读写,组4表示读取,其他0表示无普通权限,产生rw-r-----。正如文章 501 所解释的,这些是可计算的标志;识别实际所有者、组或流程仍然在转换之外。
实现的模型有三个类别的九个普通位
Setuid 被实现为 4000 掩码。在常规文件上,当 setuid 和所有者执行都存在时,呈现器将 s 放置在所有者执行位置。如果 setuid 存在但没有所有者执行,则会将 S 放在那里,从而保留特殊位与其下面的普通执行位之间的重要区别。
文件描述将小写字母解释为以文件所有者的身份执行,并将大写字母组合标记为没有任何可运行的内容。这些语句描述了该实现的输出。该存储库不提供专利记录或主要历史记录,因此本节不提供该机制的归属或引入日期。
setuid 行为已实现;专利历史未出处
目录解释对普通位使用相同的数值但不同的动词。读取列出条目,写入涵盖创建、重命名和删除条目,执行涵盖进入目录并到达指定内容。该实现还将目录上的 setgid 描述为导致新创建的文件继承该目录的组。
Sticky 由 1000 表示,并占据另一个执行位置,如 t 或 T。对于目录,该工具描述了共享条目的限制删除。这些是由计算器呈现的实现语义;没有建立分支历史或跨系统沿袭,也没有查询实时文件系统来确认本地行为。
目录特殊位行为的描述没有沿袭声明
源直接命名每个掩码:所有者的 0400、0200 和 0100; 0040、0020 和 0010 用于组;其他为 0004、0002 和 0001。 setuid、setgid 和 Sticky 添加 4000、2000 和 1000。转换是位测试和按位组合,而不是诉诸外部标准。
输入规则同样具体。八进制接受从 0 到 7 的一到四位数字,并具有可选的 0 或 0o 样式前导形式。符号输入接受九个位置或十个带有可识别文件类型字符的位置。该存储库并未确定每个实现或标准都接受完全相同的表面语法。
命名位掩码和转换语义已验证;通用标准声称不是
紧凑模型有故意的限制。它提供一种所有者类、一种组类和一种其他类,但没有命名用户条目、命名组条目、ACL 掩码或默认 ACL。它也没有能力集。这些机制无法从明显普通的 rwx 字符串或成功的八进制转换中推断出来。
命令生成不会扩展模型。它发出八进制参数或显式 u=、g= 和 o= 子句,并在需要时添加 u+s、g+s 或 +t。结果仍然显示文本。在将该模式视为完整的访问控制帐户之前,负责任的审查会分别收集任何 ACL、功能、所有权和执行证据。
ACL 和功能位于实现模式模型之外
此源集不包含受支持的与 Windows、VMS、计划 9 或其他操作系统权限历史记录的比较。省略这些叙述比将记忆中的对比呈现为事实更准确。计算器仅演示其实现的模式表示,其测试可以建立转换行为而不是不相关系统的演化。
同样的注意事项也适用于广泛的兼容性语言。可以在九个权限位置之前解析可识别的前导文件类型字符,但这并不能证明通用 ls 格式。使用输出作为该工具可接受的符号的精确读数,然后查阅权威平台文档以了解超出这些源支持边界的行为。
其他操作系统权限历史记录在没有来源的情况下被省略
这里经得起审查的是所实现模型的紧凑性。十二个命名位涵盖三个普通权限类别和三个特殊标志,而八进制和符号视图以不同的形式公开相同的整数。无效的数字或放错位置的符号字母会被拒绝,而不是默默地修复,从而使转换过程中出现错误。
对于没有历史课的实际外卖来说,这已经足够了。解码模式,检查每个类,并注意 s、S、t 或 T 是否替换执行位置。然后在证据停止的地方停止:计算器解释表示和生成的文本,而所有权、策略、文件系统行为和历史出处需要其他来源。