1、ACL权限简介
按之前学习的linux基本权限的知识,linux中的一个文件(或文件夹)有三个用户身份,所有者,所属组,其他人等。在上图,如果给一个文件夹/av设定所有者Tony为:rwx权限,所属组stu为:rwx权限,其他人为无权限,但现在想给老王设置权限:r-x权限,而且不去改变现有的文件夹的基本权限设定,那么该怎么办呢?这就需要用到ACL权限的知识。
2、查看分区ACL权限是否开启
我们看某个文件(Linux系统中目录也是文件,一切皆是文件)是否支持 ACL 权限,首先要看文件所在的分区是否支持 ACL 权限。
①、查看当前系统有哪些分区:df -h
②、查看指定分区详细文件信息:dumpe2fs -h 分区路径
3、开启分区ACL权限
①、临时开启分区 ACL 权限
mount -o remount,acl 分区名称
如mount -o remount,acl /
重新挂载根分区,并挂载加入 acl 权限。注意这种命令开启方式,如果系统重启了,那么根分区权限会恢复到初始状态。
②、永久开启分区 ACL 权限
一、修改配置文件 /etc/fstab
二、重新挂载文件系统或重启系统,使得修改生效(但要小心,/etc/fstab千万别写错了,否则重新挂载可能会使系统崩溃)
mount -o remount /
4、ACL权限查看与设定
①、查看ACL命令
getfacl 文件名
# 查看ACL权限
②、设定ACL权限
setfacl 选项 文件名
给用户设定ACL权限: setfacl -m u:用户名:权限 指定文件名
给用户组设定ACL权限: setfacl -m g:组名:权限 指定文件名
选项 | 说明 |
-m | 设定ACL权限 |
-x | 删除指定的ACL权限 |
-b | 删除所有的ACL权限 |
-d | 设定默认ACL权限 |
-k | 删除默认ACL权限 |
-R | 递归设定ACL权限 |
注意:我们给用户或用户组设定 ACL 权限其实并不是真正我们设定的权限,是与 mask 的权限“相与”之后的权限才是用户的真正权限,一般默认mask权限都是rwx,与我们所设定的权限相与就是我们设定的权限。mask 权限下面我们会详细讲解。
范例:
所有者root用户在根目录下创建一个文件目录/project,然后创建一个QQ群所属组,所属组里面创建两个用户zhangsan和lisi。所有者和所属组权限和其他人权限是770。然后创建一个旁听用户 pt,给他设定/project目录的 ACL 为 r-x。
目录 /project 的所有者和所属组其他人权限设定为 770。接下来我们创建旁听用户 pt,并赋予 acl 权限 rx
为了验证 pt 用户对于 /project 目录没有写权限,我们用 su 命令切换到 pt 用户,然后进入 /project 目录,在此目录下创建文件,看是否能成功:
上面提示权限不够,说明 acl 权限赋予成功,注意如下所示,如果某个目录或文件下有 + 标志,说明其具有 acl 权限。
5、最大有效权限mask及删除acl权限
前面第4点我们讲过,我们给用户或用户组设定 ACL 权限其实并不是真正我们设定的权限,是与 mask 的权限“相与”之后的权限才是用户的真正权限,一般默认mask权限都是rwx,与我们所设定的权限相与就是我们设定的权限。有时我们对于某个文件不想让别人设定写(w)的acl权限,这时就可以改变mask的值为:rx即(r-x)即可。那么我们怎么设置呢?
setfacl -m m:权限 文件名
6、删除 ACL 权限
①、删除指定用户的 ACL 权限
setfacl -x u:用户名 文件名
②、删除指定用户组的 ACL 权限
setfacl -x g:组名 文件名
③、删除文件的所有 ACL 权限
setfacl -b 文件名
7、默认ACL权限和递归ACL权限
①、通过加上选项 -R 递归设定文件的 ACL 权限,所有的子目录和子文件也会拥有相同的 ACL 权限。
setfacl -m u:用户名:权限 -R 文件名
②、如果给父目录设定了默认的 ACL 权限,那么父目录中所有新建的子文件会继承父目录的 ACL 权限。
setfacl -m d:u:用户名:权限 文件名 # d是default的意思
参考链接: