Linux学习—ACL

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux学习—ACL相关的知识,希望对你有一定的参考价值。

ACL—-普通的权限设置方法只可以修改文件所属人,所属组和其他人的权限,如果想把文件权限设置的更加复杂,更加详细的话,例如使每个用户有不同的权限,传统的修改权限的方法已经不够用了,那么我们需要用到访问控制列表(ACL).



目录

  • ACL是什么

  • 开启ACL方法

  • ACL的用法和作用

  • 优先顺序

  • mask详解

  • 备份和恢复ACL


一、ACL是什么

    即实现灵活的控制列表,对权限更加细化的设置,除了文件的所有者,所属组和其它人,可以对更多的用户设置权限。

    Linux 下用户对文件的操作权限有 r-读, w-写, x-可执行三种,而对linux 下的文件而言,用户身份分为:所有者, 所属组, 其它人, 且文件的所有者,所属组都只能是一个,所以在对文件分配用户的使用权限时,只能对这三种身份进行分配rwx 权限.

    Linux 主要作为服务器系统使用,用户众多.所以在实际使用场景中,这三种身份并不能很好地实现资源权限分配问题,所以就有了ACL权限.ACL 权限就是为了解决linux 下三种身份不能满足资源权限分配需求的问题的。


二、开启ACL方法

    CentOS 6 需要对新建分区手动开启ACL:

        ①创建分区

            fdisk /dev/sda

            n

            enter

            +2G

            w

        ②同步分区表

            partx -a /dev/sda

        ③创建文件系统

            mkfs.ext4 /dev/sda6

        ④开启ACL支持

            tune2fs -o acl /dev/sda6

        ⑤查看ACL

            tune2fs -l /dev/sda6 |grep option

    CentOS 7 默认开启


三、ACL的用法和作用

       ACL的用法格式:

        getfacl file|directory                          查看文件的ACL权限

        setfacl -m u:wang:rwx file|directory            设置文件对于用户wang的ACL权限

        setfacl -Rm g:sales:rwx directory               递归设置目录下的所有文件的ACL权限

        setfacl -M file.acl file|directory              按照file.acl的内容批量设置文件的ACL权限

               例如: 编辑file.acl的内容

                      vim file.acl

                      u:lisi:rwx

                      u:wang:r-x

                      g:shuguo:---

                      :wq

                setfacl -M file.acl test    这样一次性给test文件设置多个ACL权限

        setfacl -m g:salesgroup:rw file| directory     设置文件对于组salesgroup的ACL权限

        setfacl -d -m u:wang:rx directory              设置以后在该目录下创建文件和目录时的默认ACL权限

       setfacl -k file|directory                      取消默认设置

        setfacl -x u:wang file|directory               取消ACL权限

        setfacl -X file.acl directory                  按照文件file.acl批量取消

      setfacl–b file                                删除所有ACL权限

********************************************************************************************************

    结合案例分析ACL的作用:

    ①进入/app目录下创建testdir目录,查看该目录的权限为755,其他人只能进入该目录,不能创建在该目录下文件

    ②增加用户lisi

    ③登录lisi用户,进入/app/testdir/,尝试创建文件,

      结果显示:Permission denied

    ④setfacl -m u:lisi:rwx testdir/,然后查看去权限,发现多了个 +

    ⑤再次尝试创建文件,这次成功

技术分享图片技术分享图片


四、优先顺序

     我们继续做这个小实验:

    chown lisi testdir
    chmod 555 testdir
    setfacl -m u:lisi:rwx testdir

     这样文件所属人的权限位r-x,ACL设置文件所属人的权限是rwx,这样就产生了冲突,但实际上lisi用户下创建testdir目录下的文件时失败.说明权限生效具有优先顺序。

    在没有设置ACL的时候,权限的优先顺序为:owner > group > other

    在加入了ACL之后,分为了owner,ACL user,group,ACL group,other五个类别,他们的优先顺序为:

    owner > ACL user> group 和ACL group谁的权限多,谁优先 > other

     总结:当设置ACL的时候,我们经常把文件所属组设置成root,只需要使用ACL的权限。


五、mask详解

    定义:只影响除所有者other之外的人和组的最大权限,即ACL user,group,ACL group三类

    格式:

        setfacl -m m:rw- testdir/    修改目录testdir/的mask值为rw-

    一旦设置了ACL权限,原来组的权限就变为不可改的状态并且组的权限位也不在显示的是组的权限,而是mask的权限,即使利用chmod g=***的方法修改的也是mask的值,而不是原来组的权限.

    mask是实时更新的,每使用一次setfacl,mask更新一次,用户的权限需要与mask进行逻辑与运算后,才能变成有效的权限,用户或组的设置必须存在于mask权限设定范围内才会生效.所以在所有的ACL都设置好了之后,最后修改mask,限制ACL权限.

    案例:

      原来的权限位r-x

    技术分享图片

        getfacl /testdir

    技术分享图片

        setfacl -m u:liubei:r-- testdir ,然后mask的值为r-x

    技术分享图片

        setfacl -m g:guanyu:-w- testdir ,然后mask的值为rwx

    技术分享图片

        setfacl -m m:--- testdir ,然后mask的值为---,并且刚才设置的ACL有效权限都变为---

    技术分享图片

        setfacl -m u:zhangfei:--x testdir ,然后mask的值为rwx

    技术分享图片


六、备份和恢复ACL

    主要的文件操作命令cp和mv都支持ACL,只是cp命令需要加上-p 参数。但是tar等常见的备份工具是不会保留目录和文件的ACL信息。我们需要对ACL进行备份以至可以恢复ACL。

    getfacl file|directory > acl.txt     备份

    setfacl --restore acl.txt            恢复









     

以上是关于Linux学习—ACL的主要内容,如果未能解决你的问题,请参考以下文章

linux学习-主机的细部权限规划:ACL 的使用

Linux学习之路—3.权限管理

Linux之acl库的安装与使用(限制Linux某用户的访问权限)

Linux之acl库的安装与使用(限制Linux某用户的访问权限)

Linux学习阶段性总结2

linux学习:Nginx--常见功能配置片段与优化-06