ACL实现灵活的权限管理
除了文件的所有者,所属组和其它人,可以对更多的用户设置权限
CentOS7当中,无论是操作系统安装时还是之后手工创建的文件系统(xfs、ext4)均会开启ACL功能。
CentOS6及之前的版本,仅操作系统安装时创建的文件系统才会默认开启ACL,手工创建的文件系统,需要手工开启ACL功能。
mount -o acl /dev/sda7 取消的方式,重新挂载时不指定即可
tune2fs -o acl /dev/sda7 取消的方式 tune2fs -o ^acl /dev/sda7
ACL权限判断的顺序
先判断是否是文件的OWNER,如果是,则执行OWNER的权限后结束,如果不是OWNER,则判断是否是ACL的USER,如果是则执行USER权限后结束,如果不是ACL的USER, 则判断是否属于GROUP或ACL GROUP,如果是,则取最大权限。如果不属于任何GROUP,则执行OTHER。
所有人->ACL的user>所有组和ACL的group->其他人
将文件f1的所属人权限改为—,将文件f1 ACL里的user :liubei权限设为rwx,切换到liubei用户下,此时该用户对f1文件啥都不能做,说明文件的ower权限大于ACL的user权限。
将文件f1 acl的user:guanyu的权限设为—,将acl里的group:guanyu的权限设为rw-,进入guanyu用户下,此时不能查看修改文件f1,所以acl中user权限大于group权限。
文件f1的组权限为—,acl中group:guanyu的权限为rwx,切换到guanyu用户下,能查看修改执行文件
文件f1组权限为rwx,acl中group:guanyu权限为rw-,切换到guanyu用户下,此时能执行文件。
所以如果不是ACL的USER, 则判断是否属于GROUP或ACL GROUP,如果是,则取最大权限。
为多用户或者组的文件和目录赋予访问权限rwx:
setfacl -m u:liubei:— f1 设置ACL USER
setfacl -m g:shuguo:rwx f1 设置ACL GROUP
setfacl -M acl.txt f1[dir1](将一个文件的ACL,导入到另一个文件中)
acl.txt 内容来自getfacl f1 > acl.txt,如下
# file: fstab
# owner: root
# group: root
user::rw-
user:zhangfei:rwx
group::r–
mask::rwx
other::r–
setfacl -Rm u:zhangfei:rwx acltest/ 递归设置
setfacl -m mask:rwx f1 设置mask的权限
或 chmod g=rwx f1 一旦设置了ACL权限后,原有的文件GROUP不可再更改,使用chmod g=即修改ACL MASK(用ll命令显示的文件组权限变为mask)
ACL MASK随着新的ACL设置会被重置,重置的标准是让该文件上的所有ACL及文件原GROUP上的权限都有效。
给文件f1的组权限设成rwx,但文件f1 ACL里组权限还是原本的rw-,而mask权限变为rwx,切换到guanyu用户下,执行文件f1,权限被拒绝。
原本文件f1 ACL中mask权限为rwx,当把文件组权限改为—时,可以发现组权限并没有发生变化,而mask权限变为—,所以当文件设置了ACL权限后,原有的文件GROUP不可再更改,使用chmod g=即修改ACL MASK。
当mask权限为—时,ACL中的user权限和group权限都会受到作用(除了owner),即mask权限会约束到ACL中user和group权限,两者(mask和ACL USER或mask和ACL group)权限取并集。
最好最后设置mask,是为了保障每一条ACL都能够生效。
setfacl -x u:liubei f1 单独去除一条ACL权限
setfacl -X aclrm.txt f1[ f2 f3 *](批量删除ACL:先创建一个文件在里面写入你所要删除的ACL,格式如下图)
aclrm.txt 内容如下
u:liubei
g:shuguo
setfacl -b f1 去除该文件上ACL属性(文件中mask也被删掉了)。
setfacl -m d:u:guanyu:rwx dir1 设置ACL默认权限,仅影响新创建的文件及目录,不影响当前。
此时进入guanyu用户下,进入/app/acltest/dir1,但是不能创建文件,说明guanyu用户是以其他身份来访问dir1目录的。
回到root用户下,发现之后在dir1中创建的文件和目录都默认有ACL属性。
再切到guanyu用户下,进入dir1下123目录中,发现能够创建文件了,而且文件也有默认ACL属性。说明guanyu用户此时拥有 setfacl -m d u:guanyu:rwx dir1 命令新增加acl user的权限,也说明该命令对当前目录不会生效,对子目录以下的有效。
setfacl -m u:guanyu:rwx dir1(在 setfacl -m d u:guanyu:rwx dir1 后面再敲setfacl -m u:guanyu:rwx dir1(两者顺序可以颠倒)就可以在当前目录也生效)
setfacl -x d:sunquan d11 删除一条默认权限
setfacl -k d1 删除全部默认权限
setfacl -b d1 删除ACL属性
备份和恢复ACL
getfacl -R /tmp/dir1 > acl.txt 将目录下的所有文件的ACL属性备份到文件
setfacl -R -b /tmp/dir1 清除目录下所有文件的ACL属性
setfacl -R –set-file=acl.txt /tmp/dir1 通过文件还原ACL属性的方法1
setfacl –restore acl.txt 通过文件还原ACL属性的方法2
原创文章,作者:fuming,如若转载,请注明出处:http://www.178linux.com/82811