Linux ACL 权限实战:从基础配置到高级继承策略(含默认权限详解)

发布时间:2026/7/5 11:57:43
Linux ACL 权限实战:从基础配置到高级继承策略(含默认权限详解) 1. Linux ACL权限基础概念**ACLAccess Control List**是Linux系统中一种更精细的权限控制机制它突破了传统UGOUser/Group/Other权限模型的限制。想象一下你是一个图书馆管理员UGO权限就像只能给学生组或教师组发借书卡而ACL则允许你单独给某个学生特殊权限比如允许他进入珍本区。传统UGO权限的局限性在共享目录场景下尤为明显。比如一个项目目录需要给开发组读写权限但其中某个配置文件只能让组长修改。用传统方法要么单独建组要么开放整个目录权限都存在安全隐患。这时候ACL就能精准控制# 给开发组读写权限 setfacl -m g:devteam:rw project_dir # 单独给组长配置文件写权限 setfacl -m u:teamleader:rw project_dir/config.cfgACL权限的组成要素包括主体用户(user)或组(group)客体文件或目录权限读(r)/写(w)/执行(x)类型访问ACL针对现有文件和默认ACL决定新建文件的继承权限2. ACL环境准备与基础操作2.1 检查与启用ACL支持大多数现代Linux发行版默认启用ACL但保险起见可以检查# 查看文件系统是否支持ACL tune2fs -l /dev/sda1 | grep Default mount options # 临时启用ACL重启失效 mount -o remount,acl / # 永久启用需要修改/etc/fstab在挂载选项添加acl我在CentOS 7上实测时遇到个坑XFS文件系统默认就支持ACL而EXT4需要手动启用。如果getfacl报Operation not supported记得先检查文件系统类型。2.2 基础命令实战查看ACL权限getfacl /var/www/html # 输出示例 # file: var/www/html # owner: root # group: www-data # user::rwx # group::r-x # other::r-x设置ACL权限# 给用户bob添加读写权限 setfacl -m u:bob:rw /var/www/html # 给dev组添加执行权限 setfacl -m g:dev:rx /var/www/html删除ACL权限# 删除bob用户的ACL条目 setfacl -x u:bob /var/www/html # 清除所有ACL权限 setfacl -b /var/www/html3. 高级ACL特性详解3.1 Mask权限机制Mask是ACL里最容易让人困惑的概念。它像一道权限过滤器决定用户/组能获得的最大有效权限。比如setfacl -m u:alice:rwx testfile setfacl -m m::r testfile # 此时alice实际只有r权限修改mask值有两种方式# 直接设置mask setfacl -m m::rw testfile # 通过chmod影响mask仅影响组权限位 chmod g-w testfile3.2 默认ACL与权限继承默认ACL是目录特有的属性它决定了新建子项的初始权限。配置方法# 设置默认ACL注意d:前缀 setfacl -m d:u:jenkins:rwx /data/build这样在/data/build下新建的文件会自动继承mkdir /data/build/workspace getfacl /data/build/workspace # 输出中会有default相关条目实际项目中Web服务器的上传目录特别适合用默认ACLchmod 770 /var/www/uploads setfacl -d -m u:nginx:rwx /var/www/uploads setfacl -d -m g:webdev:rwx /var/www/uploads3.3 递归设置与备份递归设置ACL慎用# -R递归整个目录树 setfacl -R -m u:backup:rx /dataACL权限备份与恢复# 备份整个目录的ACL getfacl -R /data data_acls.backup # 恢复时 setfacl --restore data_acls.backup4. 实战案例Web目录权限管理假设我们有个Web项目目录结构/var/www/myapp/ ├── public/ # 静态资源 ├── uploads/ # 用户上传 ├── config/ # 配置文件 └── logs/ # 日志文件4.1 基础权限设置# 设置属主为www-data chown -R www-data:www-data /var/www/myapp # 公共目录755 find /var/www/myapp/public -type d -exec chmod 755 {} \; find /var/www/myapp/public -type f -exec chmod 644 {} \; # 上传目录特殊权限 setfacl -Rm d:u:www-data:rwx /var/www/myapp/uploads setfacl -Rm d:g:webdev:rwx /var/www/myapp/uploads4.2 精细化控制# 配置文件只允许管理员修改 setfacl -m u:admin:rw /var/www/myapp/config setfacl -m m::r /var/www/myapp/config # 日志目录允许开发组读取但不可修改 setfacl -m g:dev:r /var/www/myapp/logs setfacl -m m::r /var/www/myapp/logs5. 常见问题排查问题1设置了ACL但不起作用检查文件系统是否支持ACL确认没有mask限制查看SELinux上下文是否冲突问题2ACL权限意外丢失检查文件是否被重写某些编辑器会新建文件确认备份恢复时使用了正确参数问题3权限继承异常确保父目录设置了默认ACL检查umask值是否冲突最后分享个真实踩坑案例某次用rsync同步数据时忘了加-A参数导致所有ACL权限丢失。现在我的备份脚本里一定会加上rsync -avz --acls --xattrs /source /destination