从零开始学习Linux(二十四):ACL权限查看与设置

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权限的文件,查看结果如下图所示:

普通未设置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权限,如下图所示:

你可能感兴趣的:(从零开始学习Linux(二十四):ACL权限查看与设置)