利用访问控制列表(Access Control List,ACL)可以实现对文件系统对象更细粒度的访问控制。目前主流的文件系统均支持ACL,比如EXT、XFS、NTFS等。咱们将通过两次微课来学习Linux中如何对文件系统的ACL的进行管理,主要包括以下知识点:

  • 启用ACL
  • 管理ACL
  • 配置默认ACL
  • ACL与屏蔽位

本次微课将学习前两个知识点。

启用ACLRHEL/CentOS 7、8中,对XFS/EXT2、3、4文件系统默认启用ACL。早期RHEL/CentOS或其它发生版本,还需要通过mount选项来启用。如下所示,在mount命令中使用ACL选项:


# mount -o acl /dev/sdb1 /data

管理ACL

  • setfacl命令
setfacl [-bkndRLPvh] [{-m|-x} acl_spec] [{-M|-X} acl_file] file ...
setfacl --restore=file
  -b,--remove-all:删除所有扩展的ACL规则,基本的ACL规则(Owner/Group/Other)将被保留。
  -k,--remove-default:删除缺省的ACL规则。如果没有缺省规则,将不提示。
  -n,--no-mask:不要重新计算有效权限。setfacl默认会重新计算ACL mask,除非mask被明确的制定。
  --mask:重新计算有效权限,即使ACL mask被明确指定。
  -d,--default:设定默认的ACL规则。
  --restore=file:从文件恢复备份的ACL规则(这些文件可由getfacl -R产生)。通过这种机制可以恢复整个目录树的ACL规则。此参数不能和除--test以外的任何参数一同执行。
  --test:测试模式,不会改变任何文件的ACL规则,操作后的ACL规格将被列出。
  -R,--recursive:递归地对所有文件及目录进行操作。
  -L,--logical:跟踪符号链接,默认情况下只跟踪符号链接文件,跳过符号链接目录。
  -P,--physical:跳过所有符号链接,包括符号链接文件。
  --version:输出setfacl的版本号并退出。
  --help:输出帮助信息。
  --:标识命令行参数结束,其后的所有参数都将被认为是文件名。
  -:如果文件名是-,则setfacl将从标准输入读取文件名。
  -m, --modify:根据参数的定义添加ACL
  -x, --remove:根据参数的定义删除ACL
  -M, --modify-file:根据文件的定义添加CL
  -X (--remove-file):根据文件的定义删除ACL
  • getfacl命令
getfacl  [-aceEsRLPtpndvh]  file...
  -a,  --access           仅显示文件访问控制列表
  -d, --default           仅显示默认的访问控制列表
  -c, --omit-header     不显示注释表头
  -e, --all-effective     显示所有的有效权限
  -E, --no-effective      显示无效权限
  -s, --skip-base         跳过只有基条目(base entries)的文件
  -R, --recursive         递归显示子目录
  -L, --logical           逻辑遍历(跟随符号链接)
  -P, --physical          物理遍历(不跟随符号链接)
  -t, --tabular           使用制表符分隔的输出格式
  -n, --numeric           显示数字的用户/组标识
  -p, --absolute-names    不去除路径前的 '/' 符号
  -v, --version           显示版本并退出
  -h, --help              显示本帮助信息