在传统的 Linux 文件权限模型中,我们可以使用 rwx 权限和所有者、所属组、其他用户的方式来控制文件和目录的访问,这种模型在某些复杂场景下可能显得力不从心,当需要为多个用户或用户组设置不同权限时,传统模型就会显得不够灵活,这时,ACL(Access Control List,访问控制列表)就能提供更细粒度的权限管理。
ACL 是文件系统扩展权限的一部分,它允许为文件或目录设置额外的权限规则,超越传统的 rwx 权限限制,通过 ACL,我们可以:
为单个用户设置权限。
为用户组设置权限。
为多个用户或组分别设置不同权限。
ACL 分为两种类型:
1、访问 ACL(Access ACL):用于文件或目录,定义具体用户或组的权限。
2、默认 ACL(Default ACL):仅对目录有效,定义新创建文件或子目录的继承权限。
大多数现代 Linux 文件系统(如 ext4、xfs)默认支持 ACL,要确认或启用 ACL,可以按照以下步骤操作:
1、确认文件系统支持 ACL:使用命令mount | grep acl
检查挂载选项是否包含 acl。
2、挂载文件系统启用 ACL:如果没有启用 ACL,可以通过重新挂载开启。mount -o remount,acl /dev/sdX /your/mountpoint
,也可以在/etc/fstab
中添加 acl 参数,然后重新挂载。
Linux 提供了多种工具来管理和查看 ACL,常用的命令包括 setfacl 和 getfacl。
1、设置 ACL:使用setfacl
命令,为用户 john 设置对文件 myfile 的写权限:setfacl -m u:john:rw myfile
。
2、查看 ACL:使用getfacl
命令,查看文件 myfile 的 ACL:getfacl myfile
。
3、删除 ACL:删除特定 ACL 条目使用setfacl -x
命令,删除用户 john 的 ACL 权限:setfacl -x u:john myfile
,删除所有 ACL 使用setfacl -b
命令。
以下是一些常见的 ACL 应用场景:
1、为特定用户增加权限:某项目文件 project.txt,其所有者为用户 admin,默认只允许同组成员访问,但需要让用户 john 拥有写权限,操作如下:
检查文件权限:ls -l project.txt
为用户 john 设置写权限:setfacl -m u:john:rw project.txt
验证 ACL:getfacl project.txt
2、目录的继承权限:创建目录 team_folder,要求所有新文件或子目录都继承组 team 的写权限,操作如下:
创建目录并设置默认 ACL:mkdir team_folder
然后setfacl -m d:g:team:rw team_folder
验证默认 ACL:getfacl team_folder
测试继承效果:创建新文件touch team_folder/newfile.txt
并查看其 ACL
在使用 ACL 时,需要注意以下几点:
mask 权限:mask 权限用于控制最大权限,如果设置了 mask 权限,那么其他用户的权限不能超过这个 mask。
递归选项:使用-R
选项可以递归地应用 ACL 到目录中的所有文件和子目录。
备份与恢复:可以使用getfacl
和setfacl
命令来备份和恢复 ACL 设置。
1、如何确认 Linux 系统是否支持 ACL?
答:使用命令tune2fs -l /dev/sda1 | grep -i "Default mount options"
检查输出中是否包含 acl,或者使用mount | grep acl
查看挂载选项是否包含 acl。
2、如何为用户和组设置不同的权限?
答:使用setfacl
命令,为用户 john 设置读权限,为组 developers 设置执行权限:setfacl -m u:john:r myfile
和setfacl -m g:developers:x myfile
。