当传统Linux 权限无法满足复杂需求时,ACL(访问控制列表)就像给你的文件系统装上了"精密权限调节器"!本文将带你深入ACL的奇妙世界,从基础概念到实战应用,从权限继承到最佳实践,全方位掌握这个强大的权限管理工具。无论你是需要多用户协作的精细权限控制,还是面对特殊权限需求,ACL都能成为你的得力助手。

一、ACL基础概念
1.1、为什么需要 ACL
传统 Unix 权限(user/group/others)的局限性:
l只能设置一个所有者和一个所属组
l无法为多个用户或组设置不同权限
l权限控制粒度不够细
ACL 解决了这些问题,允许:
l为多个用户设置权限
l为多个组设置权限
l设置默认权限(对目录中新创建的文件)
1.2、ACL 相关命令
lgetfacl-查看 ACL 权限
lsetfacl-设置 ACL 权限
二、安装 ACL 工具(setfacl/getfacl)
# CentOS/RHEL/Almalinux/Rockylinux
yum install -y acl
# Debian/Ubuntu
apt install -y acl
三、启用ACL支持(仅针对ext4/ext3文件系统,XFS文件系统默认启用,不需要此操作)
2.1、检查文件系统是否支持 ACL
mount | grep acl
如果输出中没有 acl,需要重新挂载文件系统:
mount -o remount,acl /
2.2、永久启用 ACL
编辑 /etc/fstab,在挂载选项中添加 acl:
/dev/vg_data/lv_data /os_data xfs defaults,acl 0 0

然后重新挂载:
mount -o remount /os_data
四、ACL权限管理
3.1 查看 ACL 权限

3.2 设置 ACL 权限
基本语法:setfacl [选项] 规则 文件
常用选项:
l-m:修改 ACL 权限
l-x:删除 ACL 条目
l-b:删除所有 ACL 条目
l-R:递归操作
l-d:设置默认 ACL(仅对目录有效)
为用户设置权限:
setfacl -m u:用户名:权限 文件名
setfacl -m u:eda:rwx /project//eda用户读写权限
setfacl -m u:ana_uer1:--- /project//禁止ana_uer1用户访问

为组设置权限:setfacl -m g:组名:权限 文件名
setfacl -m g:admin:rwx /project/admin组读写权限
setfacl -m g:dig:--- /project//禁止dig组访问

设置有效权限掩码:setfacl -m m::权限 文件名
setfacl -m m::r-x /project

3.3 删除 ACL 权限
删除特定条目:
lsetfacl -x u:用户名 文件名
lsetfacl -x g:组名 文件名

删除所有 ACL 权限:
lsetfacl -b 文件名

五、默认ACL(继承权限)
5.1 设置默认 ACL
lsetfacl -d -m u:用户名:权限 目录名
lsetfacl -d -m g:组名:权限 目录名
setfacl -d -m u:eda:rwx /project
setfacl -d -m g:dig:--- /project

5.2 查看默认 ACL
lgetfacl -d 目录名

六、递归设置ACL
6.1 递归设置现有文件
setfacl -R -m u:用户名:权限 目录名
setfacl -R -m u:eda:rwx /project
setfacl -R -m g:dig:--- /project

6.2 递归设置默认 ACL
setfacl -d -R -m u:用户名:权限 目录名
setfacl -d -R -m u:eda:rwx /project
setfacl -d -R -m g:dig:--- /project

七、ACL权限示例
7.1 典型应用场景:共享目录管理
# 创建共享目录
mkdir /project/prjAA
chmod 770 /project/prjAA
# 设置组所有权
chown :admin /project/prjAA
# 设置ACL允许特定用户访问
setfacl -m u:eda:rwx /project/prjAA
# 设置默认ACL(新创建的文件继承)
setfacl -d -m g:admin:rwx /project/prjAA

八、ACL与传统权限的关系
8.1、权限计算顺序
1.如果用户是文件所有者,应用 owner 权限
2.否则,检查用户是否有 ACL 条目,应用匹配的 ACL 权限
3.否则,检查用户是否在文件的所属组中:
l如果有 ACL 组条目,应用 ACL 组权限
l否则应用传统 group 权限
4.最后应用 other 权限
8.2 、mask 的作用
1.mask 定义了用户和组的最大有效权限
2.无论用户或组被授予什么权限,最终权限是与 mask 的 AND 操作结果
3.设置 mask:setfacl -m m::rwx file
九、ACL备份与恢复
9.1、备份 ACL
getfacl -R /path/to/dir > acl_backup.txt
9.2、恢复 ACL
setfacl --restore=acl_backup.txt
十、最佳实践
1.合理规划权限:避免过度授权
2.使用组而非用户:尽量通过组来管理权限
3.结合默认ACL:对目录设置合理的默认ACL
4.定期审计:检查重要目录的ACL设置
5.文档记录:记录重要的ACL设置及其原因
6.测试验证:设置后验证权限是否按预期工作