ACL Access Control List:访问控制列表
实现灵活的权限管理
一般的权限只能针对所有者、所属组、其他三种对象,对于第四类以及第五类人则无法做出限制,功能有限,因此可以用到acl控制列表来实现
CentOS7 默认创建的xfs和ext4文件系统具有ACL功能
CentOS7 之前版本,默认手工创建的ext4文件系统无ACL功能,需手动增加
tune2fs –o acl /dev/sdb1
mount –o acl /dev/sdb1 /mnt/test
传统权限和ACL设定权限优先级(从高到低):
所有者,自定义用户(ACL定义用户),自定义组(ACL定义组),其他人
setfacl 设置acl控制列表
命令用法:
setfacl -m u:用户名:权限 文件名
如setfacl -m u:test1:rwx /etc/fstab
选项:
-x 用户名 文件名 删除acl权限
-b 彻底删除全部acl权限
-R -m 递归设置acl权限
设定acl控制列表后,会在权限列最后一位多出一个“+”号
getfacl 获取acl列表
用法:getfacl dir/file 获取文件或目录的acl列表
选项:
getfacl file1 | setfacl --set-file=- file2 复制file1的acl权限给file2
mask
acl列表中权限最高,其他权限全都低于mask权限,可用于批量修改acl列表中的权限。
一旦设定mask值,所属组的权限就是mask权限。
命令用法:
setfacl -m mask::rx file
设定maks权限前
设定mask权限后
选项:
--set选项会把原有的ACL项都删除,用新的替代,需要注意的是一定要包含UGO的设置,不能象-m一样只是添加ACL即可
示例:
setfacl --set u::rw,u:wang:rw,g::r,o::- file1
备份和恢复ACL
主要的文件操作命令cp和mv都支持ACL,只是cp命令需要加上-p 参数。但是tar等常见的备份工具是不会保留目录和文件的ACL信息
用法:
getfacl -R /tmp/dir1 > acl.txt 备份acl权限到acl.txt文件
setfacl -R -b /tmp/dir1 删除dir1目录所有权限
setfacl -R --set-file=acl.txt /tmp/dir1 用新权限代替原有权限
setfacl --restore acl.txt 从acl.txt获取权限列表
getfacl -R /tmp/dir1 查看权限