跳到主要内容
浏览器
导航
文件浏览器

文件权限位与 ACL

权限位用九个基本位与三个特殊位表达主体与操作的组合,ACL 则把表达能力扩展到按用户与按组命名的主体。本文说明八进制表示、umask 的作用时机、目录上的执行位含义与权限判定的顺序。

发布于 4 分钟阅读 1407 字

在文件浏览器中展示权限信息、判断某个条目是否可读或可进入,需要理解权限的表示方式与判定过程。类 Unix 系统用一组位标志表达主体与操作的组合,POSIX ACL 在此之上扩展了主体维度,Windows 则采用以安全描述符为核心的模型。

权限位的三段三标志

Unix 权限用一个位域表示三类主体上的三种操作:属主、属组、其他人,每类三位分别对应读、写、执行。八进制表示便于紧凑书写:

八进制二进制含义
4100读
2010写
1001执行
7111读、写、执行

三类主体按顺序拼接,例如 0644 表示属主可读写,属组与其他人只读。展示时通常映射为 rw-r--r-- 形式的九字符字符串,缺失的操作位显示为短横线。

chmod 0644 file.txt      # 属主读写,其余只读
chmod u+x script.sh      # 为属主追加执行位
chmod u=rw,g=r,o= dir    # 符号表示法逐组赋值

umask 的作用时机

创建文件或目录时,进程提供的模式参数并不会原样生效。内核把请求模式与进程的 umask 按位与非:实际权限等于请求模式中未被掩码置位的部分。umask 属于进程属性,不改变已存在文件的权限,只影响新建对象。

umask          # 查看当前掩码,常见值形如 022
umask 027      # 属组保留读与执行,其他人无权限

需要注意的是,某些创建接口在传入模式后还会被运行时或标准进一步收窄,例如要求普通文件的执行位不随请求直接生效,因此实际结果可能与字面计算略有差别。

特殊位

除九个基本位之外,还有三个特殊位:

  • setuid:可执行文件以此为属主身份运行,与调用者身份无关
  • setgid:可执行文件以此为属组身份运行;对目录而言,其中新建条目的属组继承目录属组
  • sticky:对目录而言,只有条目属主、目录属主或特权进程可以删除或重命名其中的条目

特殊位也有一组八进制表示,通常写在前一位,例如 4755 中的 4 即 setuid。目录上设置 setgid 常用于让多个用户共享同一属组,配合组权限位实现协作写入。

目录上的执行位

目录的读位与执行位含义不同:读位允许列举目录内的条目名,执行位允许通过该目录访问其下条目,也就是参与路径解析。两者的组合产生不同的可见性:

目录权限可以列举名称可以访问条目内容
r-x是是
r--是否
--x否,需要已知确切名称是
---否否

写位控制能否在目录内创建、删除或重命名条目。是否允许删除某个条目取决于目录的写位与 sticky 位,与文件自身的权限位无关。

POSIX ACL

权限位只能表达单一属主与单一属组,ACL 在此基础上增加按用户与按组命名的条目。一个 ACL 由若干条目组成,条目包含类型、限定对象与权限集合。具名条目之上还有一个掩码条目,它限定具名用户、具名组与属组条目实际生效权限的上界;当掩码收窄时,展示的权限与实际生效权限可能不一致。

setfacl -m u:alice:rw- file.txt    # 增加一条具名用户条目
getfacl file.txt                    # 查看条目与掩码

ACL 分为访问 ACL 与默认 ACL。访问 ACL 作用于对象自身;默认 ACL 只能设置在目录上,为其中新建的子对象提供初始条目。两者在判定中的角色不同:访问 ACL 直接参与判定,默认 ACL 只用于初始化新对象。

Windows 的 ACL 模型

Windows 使用以安全描述符为核心的对象权限模型。安全描述符包含所有者、组、自由访问控制列表与系统访问控制列表。自由访问控制列表由访问控制项构成,每项记录一个受托者(用户或组)以及一组允许或拒绝的权限。

判定顺序与 POSIX 不同。多数实现按访问控制项的排列顺序逐项匹配,遇到明确拒绝即终止。目录上的项可以标记为可继承,子对象创建时把继承来的项复制到自身的访问控制列表,形成继承链;继承的项在子对象上通常以只读方式呈现。

权限检查的判定顺序

一次访问是否放行,取决于多类信息的组合,常见的顺序是:

  1. 进程的有效用户标识是否等于对象属主
  2. 否则有效用户标识是否属于对象属组,或进程的补充组是否包含该组
  3. 否则按其他人权限判定

存在 ACL 时,判定会先匹配具名条目,再回落到权限位对应的条目,并受掩码截断。特权进程通常绕过部分检查,但某些操作仍要求额外的允许条件,例如执行 setuid 文件时的属主身份切换。

小结

权限位用九个基本位与三个特殊位表达主体与操作的组合,umask 在创建时收窄请求模式,ACL 在主体维度上扩展表达能力。判定的实质是在请求方身份与对象条目之间做匹配,再把匹配结果与掩码、继承等规则叠加。

文件浏览器 · 相关文章