Linux ACL

为什么80%的码农都做不了架构师?>>>   hot3.png

       某些系统账号希望对某一些文件有管理权限,有三种方法:

             1 加入属主所在的同一个组中,这等于扩大了访问其他文件的权限了。

             2 加入other中,这样权限放开的更大了。

             3 给文件的sudo权限。

             4 采用acl策略。

       前三种方法都有自己的缺点,最终考虑使用acl。

       所谓ACL,就是Access Control List,一个文件/目录的访问控制列表,可以针对任意指定的用户/组分配RWX权限。此功能

 需要内核的支持,在linux 2.6以后默认加入内核中。

             acl由一系列的访问控制权限组成,主要的有如下:

             ACL_USER_OBJ: 相当于Linux里file_owner的权限

             ACL_USER: 定义了额外的用户可以对此文件拥有的权限

             ACL_GROUP_OBJ: 相当于Linux里group的权限

             ACL_GROUP: 定义了额外的组可以对此文件拥有的权限

             ACL_MASK: 定义了ACL_USER, ACL_GROUP_OBJ和ACL_GROUP的最大权限

             ACL_OTHER: 相当于Linux里other的权限

      安装acl

            apt-get install acl

     重新挂载分区

           mount -o remount,rw,acl /dev/sda3 

           分区在不支持acl的情况下getfacl可以工作,但是setfacl不能够工作的。

      下图所示默认的acl规则

            Linux ACL_第1张图片

            #注释表明了文件的默认用户和所属组

            user::rw- 定义了ACL_USER_OBJ, 说明root拥有读和写的权限

            group::--- 定义了ACL_GROUP_OBJ,说明任何人都没有权限

            other::--- 定义了ACL_OTHER,说明任何人都没有权限

 

       在设置acl规则前我们先了解一下设置acl常用的选项:

           -b,--remove-all

           删除所有扩展的acl规则,基本的acl规则(所有者,群组,其他)将被保留。

           -k,--remove-default

           删除缺省的acl规则。如果没有缺省规则,将不提示。

           -n,--no-mask

          不要重新计算有效权限。setfacl默认会重新计算ACL mask,除非mask被明确的制定。

          --mask

          重新计算有效权限,即使ACL mask被明确指定。

          -d,--default

          设定默认的acl规则。

          --restore=file

          从文件恢复备份的acl规则(这些文件可由getfacl -R产生)。通过这种机制可以恢复整个目录树的acl规则。此参数不能       和除--test以外的任何参数一同执行。

          --test

         测试模式,不会改变任何文件的acl规则,操作后的acl规格将被列出。

         -R,--recursive

         递归的对所有文件及目录进行操作。

         -P,--physical

        跳过所有符号链接,包括符号链接文件。

 

         -m -x -M -X 

         -m -x 是在设置acl所需要定义的选项,-m 表示设置acl ,-x 表示删除acl规则

         -M -X 则可以在文件中读入acl规则,使相应的规则生效

 

         用cp来复制文件的时候我们现在可以加上-p选项.这样在拷贝文件的时候也将拷贝文件的ACL属性.对于不能拷贝的ACL属

   性将给出警告

         mv命令将会默认地移动文件的ACL属性. 同样如果操作不允许的情况下会给出警告

         

        开始设置规则:

        用test用户访问perl.pl文件,显示如下:

        Linux ACL_第2张图片

        设置acl规则

        Linux ACL_第3张图片

            这时候我们会看到在权限位后面多了一个+号,这个符号提示我们此文件使用了acl,而且你还会看到在ls -l 的输出中

     perl.pl的组权限变成read了,在acl的mask不存在的情况下,权限位的第二组才表示组的权限,如果acl中存在mask,则第二

     组权限位代表mask值,mask规定了ACL_USER, ACL_GROUP和ACL_GROUP_OBJ的最大值,在设置的权限相冲突的情况下以

    设置的mask为主。

           Linux ACL_第4张图片

           可以看到test用户可以访问perl.pl文件了。

           删除设置的acl

           Linux ACL_第5张图片

           可以看到acl规则已经删除,怎么在权限位的后面还有一个加号呢,要完全删除需要使用-b参数

           

           还可以设置默认的acl规则,如希望在某个目录下的新建文件都使用同一个acl规则,则可以对某个目录设置默认acl规则

使其新建文件都采用默认acl规则

           Linux ACL_第6张图片

           Linux ACL_第7张图片

           在目录中建好文件后发现出现了#effective,ACL_MASK的定义. 它规定了ACL_USER(其他用户), ACL_GROUP_OBJ(组权限)和ACL_GROUP(其他组的权限)的最大权限,所以test组真正的权限是rw,怎么改变mask值呢?

           Linux ACL_第8张图片

          也可以从文件中恢复文件原有的acl规则,如下:先保存规则到一个文件中

          Linux ACL_第9张图片

          开始删除规则

          Linux ACL_第10张图片

          开始恢复规则

          Linux ACL_第11张图片

      以上只是简单的一些用法,更多用法参考man

转载于:https://my.oschina.net/guol/blog/37808

你可能感兴趣的:(Linux ACL)