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

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

作者: 通靈鹿小六 | 来源:发表于2020-12-15 07:36 被阅读0次

    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权限查看与设置

        本文链接:https://www.haomeiwen.com/subject/nxwmgktx.html