通过配置 ACL 可实现 linux 文件权限的精细化管理,突破传统用户 - 组 - 其他模型限制。启用 ACL 需确保文件系统挂载时包含 acl 选项,可通过 mount 命令查看并修改 /etc/fstab 实现。使用 setfacl - m 为特定用户或组设置权限,如 u:alice:rwX 赋予 alice 读写执行权,g:developers:rx 为组添加读和执行权限。对目录设置默认 ACL(setfacl -d)可使新文件自动 继承 权限。getfacl 用于查看当前 ACL 配置,显示包括所有者、组及其他相关权限条目。删除单个条目用 setfacl -x,清除全部扩展 ACL 则使用 - b 选项。mask 权限决定实际生效的最大权限,修改 mask 会限制其下所有条目的访问能力;chmod 操作会自动更新 mask 值,可能影响原有 ACL 效果。合理应用 ACL 可在不更改文件归属的前提下灵活授权,适用于多用户协作环境,但应定期审计以防权限滥用。

在 Linux 中,传统的权限模型(用户、组、其他)有时无法满足复杂的访问需求。通过配置 ACL(access Control List,访问控制列表),可以实现更精细的文件和目录权限管理。ACL 允许为单个文件或目录设置多个用户和组的独立权限,突破标准权限的限制。
启用文件系统的 ACL 支持
大多数现代 Linux 发行版默认支持 ACL,但需确保文件系统挂载时启用了 ACL 功能。
检查根分区或目标分区是否已启用 ACL:
mount | grep $(df /path/to/target | tail -1 | awk ‘{print $1}’)
输出中应包含 acl 选项。例如:
/dev/sda1 on /home type ext4 (rw,relatime,acl)
若未启用,可在 /etc/fstab 中为对应分区添加 acl 挂载选项:
UUID=xxxx-xxxx /home ext4 defaults,acl 0 2
然后重新挂载:
sudo mount -o remount /home
使用 setfacl 设置 ACL 权限
setfacl 命令用于设置 ACL 规则。常用选项包括:
为用户 alice 赋予对 /data/project 的读写执行权限:
sudo setfacl -m u:alice:rwX /data/project
为组 developers 添加执行和读取权限:
sudo setfacl -m g:developers:rx /data/project
设置默认 ACL,使新创建的文件自动继承权限:
sudo setfacl -d -m u:alice:rwX /data/project
查看和删除 ACL 权限
使用 getfacl 命令查看文件或目录的 ACL 设置:
getfacl /data/project
输出示例:
# file: data/project # owner: root # group: root user::rwx user:alice:rwX group::r-x group:developers:r-x mask::rwx other::r-x
删除某个用户的 ACL:
sudo setfacl -x u:alice /data/project
清除所有扩展 ACL 条目:
sudo setfacl -b /data/project
理解 ACL 中的 mask 权限
ACL 中的 mask 决定了用户和组条目的最大有效权限。实际生效权限是条目权限与 mask 的交集。
修改 mask 值会影响所有受其约束的条目:
sudo setfacl -m mask::r– /data/project
此时即使设置了u:alice:rwX,实际生效权限也会被限制为只读。
当使用 chmod 更改文件权限时,会自动更新 mask 值,因此 ACL 权限可能随之变化。
基本上就这些。合理使用 ACL 可以在不改变文件所有者或主组的前提下,灵活授权多个用户和组,适合团队协作或多角色访问场景。注意定期审计 ACL 设置,避免权限过度累积。