可使用acl实现linux文件系统更精细的权限控制:一、确认并启用文件系统acl挂载选项;二、用setfacl添加用户级acl;三、添加组级acl;四、设置目录默认acl以影响新文件;五、用getfacl/setfacl查看、备份与清除acl。

如果您需要为Linux文件或目录设置更精细的访问控制权限,而标准的用户、组和其他权限无法满足需求,则可以使用访问控制列表(ACL)进行扩展授权。以下是设置文件ACL权限的具体步骤:
一、确认文件系统支持ACL并启用挂载选项
ACL功能依赖于底层文件系统支持,并需确保挂载时启用了acl选项。多数现代ext4/xfs文件系统默认支持ACL,但需验证实际挂载参数是否包含acl。
1、运行命令 mount | grep "$(df . | tail -1 | awk '{print $1}')" 查看当前根分区或目标分区的挂载选项。
2、若输出中未出现 acl,则需重新挂载:执行 sudo mount -o remount,acl /mount/point(将/mount/point替换为实际路径)。
3、为使设置永久生效,编辑 /etc/fstab,在对应分区行的第四列(options字段)添加 acl,例如: UUID=xxx / ext4 defaults,acl 0 1。
二、使用setfacl命令添加用户级ACL条目
通过setfacl可为指定用户赋予对文件或目录的独立读、写、执行权限,该权限优先于传统组权限,且不改变原有属主和属组设置。
1、为用户alice对文件report.txt授予读写权限:运行 setfacl -m u:alice:rw report.txt。
2、为用户bob对目录docs/递归设置读执行权限(含子目录与文件):执行 setfacl -Rm u:bob:r-x docs/。
3、若需同时设置多个用户权限,使用逗号分隔: setfacl -m u:alice:rx,u:charlie:w docs/。
三、使用setfacl命令添加组级ACL条目
组级ACL允许将特定权限授予非文件属组的其他用户组,适用于跨部门协作或临时项目组场景,避免修改文件主属组引发权限混乱。
1、为组devteam对脚本deploy.sh添加执行权限:运行 setfacl -m g:devteam:x deploy.sh。
2、为组qa对整个testsuite/目录及其内容赋予读写权限:执行 setfacl -Rm g:qa:rwX testsuite/(注意大写X仅对已有执行位的项生效,对目录自动添加x)。
3、若组名含空格或特殊字符,需用引号包裹: setfacl -m "g:app testers":r test.log。
四、设置默认ACL以影响新创建的文件和子目录
默认ACL仅对目录有效,它定义了该目录下未来新建文件和子目录自动继承的ACL规则,不影响现有条目,是实现目录级权限策略自动延续的关键机制。
1、为目录project/设置默认ACL,使新文件默认对user2可读:运行 setfacl -m d:u:user2:r project/。
2、设置默认组权限并启用递归:执行 setfacl -Rm d:g:editors:rwX project/。
3、查看默认ACL是否生效:使用 getfacl project/,输出中含 default: 前缀的行即为默认规则。
五、查看、备份与清除ACL条目
ACL状态需定期核查以防止冗余或冲突规则;批量操作前建议导出当前ACL配置作为基准快照,清除操作则用于还原至基础权限模型。
1、查看文件report.txt的完整ACL信息(含默认规则):运行 getfacl report.txt。
2、将目录src/的所有ACL导出至备份文件:执行 getfacl -R src/ > acl_backup.acl。
3、清除report.txt所有扩展ACL条目(保留基本权限):运行 setfacl -b report.txt。
4、仅移除默认ACL而不影响当前ACL:执行 setfacl -k project/。










