1、设置ACL权限
命令格式:setfacl [选项] 文件名;
选项说明:
- -m:设定ACL权限;
- -x:删除指定的ACL权限;
- -b:删除所有的ACL权限;
- -d:设定默认的ACL权限;
- -k:删除默认ACL权限;
- -R:递归设定ACL权限;
我们以上一小节中的举例说明:
整个过程如下:
(1)创建两个用户codea、codeb,作为团队开发人员;
(2)创建学习用户learnc;
(3)创建开发团队devgroup;
(4)创建项目目录/project;
(5)将项目目录的所有者变更为root,所属组变更为devgroup;
(6)将项目目录权限设置为rwxrwx---(770);
(7)使用ACL方式给用户赋予r-x权限;
(8)创建学习团队learngroup;
(9)使用ACL方式给团队learngroup赋予r-x权限;
[root@VM-0-8-centos ~]# useradd codea
[root@VM-0-8-centos ~]# useradd codeb
[root@VM-0-8-centos ~]# useradd learnc
[root@VM-0-8-centos ~]# groupadd devgroup
[root@VM-0-8-centos ~]# mkdir /project
[root@VM-0-8-centos ~]# chown root:devgroup /project/
[root@VM-0-8-centos ~]# chmod -R 770 /project/
[root@VM-0-8-centos ~]# setfacl -m u:learnc:rx /project
[root@VM-0-8-centos ~]# groupadd learngroup
[root@VM-0-8-centos ~]# setfacl -m g:learngroup:rx /project/
说明:
(1)为用户分配权限,使用 u:用户名:权限 格式。
(2)为组分配权限,使用 g:组名:权限 格式。
2、查看ACL权限
命令格式:getfacl 文件名;
执行命令,查看/project目录的ACL权限:
getfacl /project/
分别查看未设置ACL权限和设置ACL权限的文件,查看结果如下图所示:
同时查看/project和/project2目录文件,如下图所示:
设置了ACL权限的文件夹比未设置的多了一个+号。
3、ACL最大有效权限
mask是用来指定最大有效权限的。
如果给某用户赋予了ACL权限,需要和mask权限进行“与”计算后,才能得到用户的真正权限。
此举是为了防止给用户或者用户组的权限过高,提前设定,做到权限的双重保证。
与计算逻辑,举例说明:
A | B | 与计算 |
---|---|---|
r | r | r |
r | - | - |
- | r | - |
- | - | - |
命令格式:setfacl -m m:权限 文件名;
setfacl -m m:rx /project
更改完mask最大权限以后,查看/project目录的ACL权限,如下图所示:
图中红框标注的信息表示:虽然group组的权限设置的是rwx,但是真正有效的权限是r-x。mask最大有效权限不影响所有者权限。
4、删除ACL权限
4.1、删除指定用户的ACL权限
命令格式:setfacl -x u:用户名 文件名;
执行命令,删除用户learnc的ACL权限:
setfacl -x u:learnc /project
整个直接过程如下图所示:
在删除命令执行前有user:learnc:r-x选项,执行后再次查看learnc的ACL权限消失。而且,此时设置的mask权限也恢复成rwx。
4.2、删除指定用户组的ACL权限
命令格式:setfacl -x g:组名 文件名;
执行命令,删除learngroup组的ACL权限:
setfacl -x g:learngroup /project
整个直接过程如下图所示:
4.3、删除文件所有的ACL权限
命令格式:setfacl -b 文件名;
在4.2章节中,我们将用户learnc和用户组learngroup的ACL权限给删除了。现在我们重新添加上,并且查看/project目录的ACL权限。如下图所示:
执行命令删除/project目录的所有的ACL权限:
setfacl -b /project
再次查看如下图所示:
5、递归设置ACL权限
递归是父目录在设定ACL权限时,所有的子文件、子目录以及子目录中的子文件也会拥有相同的ACL权限。
命令格式:setfacl -m u:用户名:权限 -R 目录名;
注意:-R选项必须放在后面才行,不能放在-m之前否则会报错!!!
执行命令,递归设置learnc用户/project目录的权限为rx:
setfacl -m u:learnc:rx -R /project
执行命令之前查看/project目录没有任何ACL权限,执行命令后再次查看,发现/project/china目录learnc用户都有了rx权限。
整个过程如下图所示:
6、设置默认ACL权限
默认ACL权限的作用是如果给父目录设定默认ACL权限,那么父目录中所有新建的子文件和子目录都会继承父目录的ACL权限;
命令格式:setfacl -m d:u:用户名:权限 目录名;
说明:可以在此命令后面加-R来进行递归,达到一条命令同时设置ACL默认权限和设置递归;
在/project/china目录下面新建文件shanxi,查看文件的ACL权限,如下图所示:
发现此时新创建的文件没有ACL权限。
执行命令为/project/china文件设置默认ACL权限:
setfacl -m d:u:learnc:rx /project/china/
在/project/china目录下面创建文件neimenggu,然后查看neimenggu文件对应的ACL权限,如下图所示: