访问控制列表,用来控制文件权限

 

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