ACL主要目的是提供传统的权限之外的具体权限的设置。ACL可以针对单一用户,单一文件或目录来进行r,w,x的权限设置。对于需要特殊权限的使用状况非常有帮助。
ACL主要可以针对以下几个项目来进行设置:
用户:可以针对用户来设置权限;
用户组:可以针对用户组来设置其权限;
默认属性:可以在该目录下在新建目录时设置新数据的默认权限。
如何启动ACL
使用mount,可以直接查看挂载参数的功能。如果没有acl,则说明挂载的时候没有开启acl权限。那么我们可以使用dump2fs -h /dev/sda2命令来查看该块设备的状态信息。其中有一行Default mount options: *****,如果****中有acl,则说明支持acl。
接下来,我们可以使用mount -o remount,acl / 的命令来重新挂载根分区,这样就打开了acl权限。
如果想要每次开机都生效,可以编辑/etc/fstab,并修改相关参数。
/dev/sda1 / ext4 defaults,acl 1 1
ACL设置技巧
setfacl [-bkRd] [{-m|-x} acl参数] 目标文件名
参数:
-m:设置后续的acl参数给文件使用,不可以与-x合用。
-x:删除后续的acl参数,不可与-m合用。
-b:删除所有的acl设置参数。
-k:删除默认的acl参数。
-R:递归设置acl。
-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 目录