-d:设置默认的acl参数,只对目录有效。在该目录下新建的数据会引用此默认值。
例子:有一个目录/project,所有者是root,所属组是tgroup,组里面有两个用户zhangsan和lisi,他们拥有读写执行权限,其他人没有任何权限,但是现在有一个外来用户st需要读和执行权限,用acl可以解决该问题。
创建用户zhangsan和lishi,st
useradd zhangsan
useradd lisi
useradd st
创建组
groupadd tgroup
把zhangsan和lisi加入组
gpasswd -a zhangsan tgroup
gpasswd -a lisi tgroup
创建目录,并赋值权限和所有者和所属组
mkdir /project
chown root:tgroup /project
chmod 770 /project
设置acl权限
setfacl -m -u:(用户名):(赋予的权限) 目录
setfacl -m u:st:rx /project/
之后可以看到,权限后面多了一个+,代表是acl权限
通过查看命令
getfacl 目录
getfacl /project
给一个组设置acl权限
grouopadd tgroup2
setfacl -m g:tgroup2:rwx /project/
注意上图有个mask的字段,该字段又表示什么意思呢?
mask是最大有效权限,如果赋予用户acl权限,是需要和mask权限相与才能得到用户的真正的权限的。
可以调整mask权限的值来达到调整最后用户真正权限的目的。
setfacl -m m:rw /project/
看到mask权限改变了。mask&&acl,最后用户真正的权限也会相应改变。
删除acl权限
1 删除指定用户的acl权限
setfacl -x u:用户名 文件名
setfacl -x u:st /project/
2 删除指定组用户的acl权限
setfacl -x g:组名 文件名
setfacl -x g:tgroup2 /project/
3 删除文件下所有acl权限
setfacl -b 文件名
setfacl -b /project/
默认的acl权限和递归acl权限
递归acl权限
父目录设置acl权限,所有子目录和子文件都有该相同acl权限
setfacl -m u:用户名:权限 -R 目录
setfacl -m u:st:rx -R /project/
不过有个问题,在创建这条命令之后的目录和文件,都不具备该acl权限,如果想要以后创建的文件和目录具备该acl权限,需要默认的acl权限
默认acl权限
setfacl -m d u:用户名:权限 -R 目录
默认acl权限的作用:父目录设定了默认acl权限,那么父目录新建的文件和目录,都会继承该acl权限。
默认acl权限和递归acl权限的区别
1 默认的只对新建的文件和目录会继承该acl权限,以前建立好的,没有这个功能,如果以前建立好的文件和目录要有该acl权限,得用递归acl权限。
2 递归的alc权限,只对以前创建好的文件和目录能有该acl权限,对于后来新建的没有,默认和递归的作用正好相反。
3 默认acl权限 setfacl -m d u:用户名:权限 -R 目录
递归acl权限 setfacl -m u:用户名:权限 -R 目录