Access Control Lists

一个 ACL 由一系列 ACL 记录(ACE)组成,其中每条记录都针对单个用户或用户组定义了对文件的访问权限。

ACL 权限检查算法

  1. 若进程具有特权,则拥有所有访问权限
  2. 若某一进程的有效用户 ID 匹配文件的属主,则授予该进程标记类型为 ACL_USER_OBJ 的 ACE 所指定的权限
  3. 若进程的有效用户 ID 与某一 ACL_USER 类型记录的标记限定符相匹配,则授予该进程此纪录所指定权限与 ACL_MASK 型记录值相与的结果
  4. 若进程的【有效、辅助】组 ID 匹配,匹配 ACL_GROUP_OBJ/ACL_GROUP
  5. 以 ACL_OTHER 型 ACE 所记录的权限授予进程

ACL 的长短文本格式

  • 长文本格式:每行都包含一条 ACE
  • 短文本格式:包含一系列以",“分隔的 ACE

u::rw-,g::r-x,o::---

ACL_mask 型 ACE 和 ACL 组分类

一定包含 ACL_MASK 类型的 ACE,作为能授予权限的上限。

getfacl, setfacl 命令

1
2
3
4
5
6
umask 022
touch file
getfacl file

setfacl -m u:paulh:rx,g:teach:x file
getfacl --omit-header file

默认 ACL 和文件创建

访问目录时,默认型 ACL 并不参与判定所授予的权限,主要决定了在目录下所创建文件或子目录的 ACL 和权限。

实现方面限制

每条 ACL 记录需占用 8 字节,因此以文件所含 ACE 的最大条数会略少于块大小的 1/8。【4096 字节块最多允许 500 条左右的 ACE】

Licensed under CC BY-NC-SA 4.0
Get Things Done
Built with Hugo
Theme Stack designed by Jimmy