访问控制列表,用来控制文件权限
1、为什么要用ACL
-
不允许更改文件的拥有者、拥有组
-
user1这个用户对该文件有rwx权限
-
user2这个用户对该文件有rx权限
之前讲的三种身份,在这里就不适用了,acl就是为了来解决这种问题
1.1、前提
-
文件或目录所在分区的文件系统要支持ACL功能,如果没有,需要在挂载的时候,手工指定
-
xfs文件系统默认支持
2、设置ACL
2.1、setfacl
设置ACL
#对tt这个用户增加rwx权限
setfacl -m u:tt:rwx /tmp/passwd
#对tt这个用户没有任何权限
setfacl -m u:tt:--- /tmp/passwd
#对tt这个组增加rwx权限
setfacl -m g:tt:rwx /tmp/passwd
2.2、getfacl
查看ACL
#权限位置最后一个.(点)变成+,就表示这个文件设置过ACL
ll /tmp/passwd
getfacl /tmp/passwd
-
user::rw- 第一个冒号后面为空,代表这是文件的拥有者的权限
-
user:tt:rwx 代表ACL设置的权限
-
group::r-- 第一个冒号后面为空,代表文件的拥有组的权限
-
mask::rwx 表示有效权限
-
other::r-- 表示其它人权限
2.3、对目录设置ACL
setfacl -m u:tt:rwx /root/doc
setfacl -m g:dd:rx /root/doc
setfacl -R -m u:tt:rwx /root/doc
-
-R,表示递归修改
-
#注意:递归,-R必须在前面
2.4、默认ACL
默认情况下,对一个目录作了ACL,在这个目录下新建一个文件,这个文件不会继承上级目录的ACL权限,除非增加默认权限
setfacl -m d:u:tt:rwx /tmp/doc
-
d 表示default,默认的,以后在该目录下新建的所有子目录或文件都会继承该权限,
getfacl /tmp/doc
-
可以看到多个default
-
default:user::rwx 第二个冒号后面为空,表示无效,不会继承
mkdir /tmp/doc/doc2
-
这时,这个目录的user:tt:rwx和default user:tt:rwx都是继承自上级目录的default user:tt:rwx,所以在这个子目录doc2下再新建文件的时候,也会继承该权限
注意:
-
只是后面新建的文件或目录才会继承,在设置默认ACL之前就已经存在的文件或目录,是没有继承的,所以,需要递归
setfacl -R -m d:u:tt:rwx /tmp/doc
2.5、权限冲突
默认匹配顺序:
local user > acl user > acl group > local group > other
centos7.1之前:
group:谁后设置,谁优先
3、设置MASK
#有效权限,表示用户或组的ACL权限位,只有MASK值在相应权限位也出现,才生效。
#注意,必须最后设置mask,如果设置完mask,再设置acl权限,会影响mask值
setfacl -m m:r /tmp/doc
#设置默认mask权限
#在该目录下新建的目录会继承该mask值
#新建文件,取创建文件时的系统权限和mask的交集
setfacl -m d:m:r /tmp/doc
#查看acl
getfacl /tmp/doc
-
effective:r-- 如果后面出现这个,表示前面的权限无效,这才是实际权限
注意:
-
设置acl的mask,本地的group权限也会受影响
-
更改本地的group权限,会直接影响acl的mask
4、删除ACL
#删除默认ACL
setfacl -k /tmp/doc
#删除doc这个目录本身的ACL,但其下面的下目录或文件继承自它的权限不会丢失
setfacl -x u:tt /tmp/doc
#删除目录本身的所有ACL
setfacl -b /tmp/doc