首页 > 代码库 > linux acl

linux acl

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

            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的权限

查看内核版本 uname -a

查看是否安装acl  dumpe2fs |grep "Default mount iptions"

wKiom1NnkUajH_JuAABZn_RTl2Q408.jpg

在设置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属性. 同样如果操作不允许的情况下会给出警告


      开始设置规则:

以root 用户建立一个文件a.txt,设置权限只有root可读

通过acl,给niu用户增加可读权限

设置acl之前:

wKiom1Nnk6iiUnQCAABlsjdKVu4377.jpg

设置acl:此时 ls -l 后面会多出个 + 号

wKiom1NnlHehbNBJAABkdtAzSKA901.jpg

设置acl之后:niu 用户可以读取a.txt的内容

wKioL1NnlKjjPpoAAACk64kRsmc898.jpg

在acl的mask不存在的情况下,权限位的第二组才表示组的权限,如果acl中存在mask,则第二组权限位代表mask值,mask规定了ACL_USER, ACL_GROUP和ACL_GROUP_OBJ的最大值,在设置的权限相冲突的情况下以设置的mask为主

例如: 设置acl 用户niu 对a.txt 有rw权限,设置mask 位r 。结果应该是用户牛对a.txt只有读权限

wKioL1NnmOuzOfZfAACkbZq3ePY315.jpg

验证:只可读不可写

wKioL1NnmUnhbxy1AABTU_CCDmw615.jpg

把mask改为rw,结果应该是用户niu 具有读写权限

wKiom1NnmhmwvMU_AADcPNTyxac268.jpg

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

wKioL1Nnm3XDO93lAAD0SK1PdfA926.jpg

恢复acl

wKioL1NnnAGB9E_5AAB3IAdyn0s488.jpg







本文出自 “牛磊的博客” 博客,请务必保留此出处http://helloeveryone.blog.51cto.com/6171143/1406906