一个 ACL 由一系列 ACL 记录(ACE)组成,其中每条记录都针对单个用户或用户组定义了对文件的访问权限。
ACL 权限检查算法
- 若进程具有特权,则拥有所有访问权限
- 若某一进程的有效用户 ID 匹配文件的属主,则授予该进程标记类型为 ACL_USER_OBJ 的 ACE 所指定的权限
- 若进程的有效用户 ID 与某一 ACL_USER 类型记录的标记限定符相匹配,则授予该进程此纪录所指定权限与 ACL_MASK 型记录值相与的结果
- 若进程的【有效、辅助】组 ID 匹配,匹配 ACL_GROUP_OBJ/ACL_GROUP
- 以 ACL_OTHER 型 ACE 所记录的权限授予进程
ACL 的长短文本格式
- 长文本格式:每行都包含一条 ACE
- 短文本格式:包含一系列以",“分隔的 ACE
u::rw-,g::r-x,o::---
ACL_mask 型 ACE 和 ACL 组分类
一定包含 ACL_MASK 类型的 ACE,作为能授予权限的上限。
getfacl, setfacl 命令
|
|
默认 ACL 和文件创建
访问目录时,默认型 ACL 并不参与判定所授予的权限,主要决定了在目录下所创建文件或子目录的 ACL 和权限。
实现方面限制
每条 ACL 记录需占用 8 字节,因此以文件所含 ACE 的最大条数会略少于块大小的 1/8。【4096 字节块最多允许 500 条左右的 ACE】