ACL access control list 访问控制列表
1 ACL权限简介
当你了解了Linux中的属主属组其他人权限后,就会发现,这样的权限划分并不能满足我们的需求。比如你有个文件,你的权限为rwx,文件所属组的权限为rwx,而其它人没有权限。现在需要给某个用户分配rx权限,那么在不打破现在属主属组其它人的权限的情况下,就没有办法实现这种权限分配了。那么此时就用到了ACL权限。
2 查看、开启、设定与删除ACL权限
2.1 查看
ACL权限是作用于分区的,属于挂载权限,当你挂载的时候指定使用ACL权限才会开启。
dumpe2fs -h /dev/sda1
#查看指定分区详细文件系统信息,从而得知该分区的ACL权限情况 -h 表示仅显示超级块分区信息
2.2 开启
在上一步的查看中,如果指定的分区没有开启ACL权限,那么就需要我们手动开启。
临时开启:
mount -o remount,acl /dev/sda1 重新挂载指定分区
# 重新挂载根分区,并加入ACL权限
永久开启:
修改配置文件 vim /etc/fstab
(defaults,acl) 在defaults后加上 acl
不过我这里的defaults 已经包含 acl 就不必再额外加acl了
mount -o remount /
#重新挂载文件系统或重启系统,使修改生效
2.3 设定
查看文件的ACL权限以便管理ACL权限 getfacl 文件名
设定文件的ACL权限 setfacl 选项 文件名
选项:
-m 设定ACL权限
-x 删除指定的ACL权限
-b 删除所有的ACL权限
-d 设定默认的ACL权限
-k 删除默认ACL权限
-R 递归设定ACL权限
setfacl -m u:testuser:rx /testdir
# 给用户 testuser 赋予 r-x 权限,使用 u:用户名:权限 格式
# 给用户组 testgroup 赋予 r-x 权限,使用 g:组名:权限 格式
2.4 删除
setfacl -x u:testuser 文件名 #删除指定文件的指定用户的ACL权限
setfacl -b 文件名 #删除指定文件的所有用户的ACL权限
3 最大有效权限
在getfacl 命令的输出中,我们可以看到一个 mask 值,如下图:
mask是用来指定最大权限的。如果我们给用户赋予了ACL权限,是需要和mask的权限进行“与”运算,才能得到用户的真正权限。所以最大有效权限是给用户设定的权限与mask相与的结果。
设定mask的值: setfacl -m m:rwx 文件名
比如针对 testdir 给用户 testuser 分配的权限为 rwx
而 mask 为 r-x 那么用户的实际权限为 r-x 如下图:
'与' 运算结果为 r-x
4 默认ACL权限和递归ACL权限
递归ACL权限:
setfacl -m u:testuser:rx -R testdir/
# 递归的把testdir目录以及其下的所有文件给testuser分配 rx ACL权限 仅针对目录
默认ACL权限:
默认ACL权限的作用是如果给父目录设定了默认ACL权限,那么父目录下的所有新建的子文件都会继承父目录的ACL权限。
setfacl -m d:u:testuser:rw -R /home/testdir # 赋予目录默认权限 仅针对目录有效