Linux acl命令,实现文件权限管理

ACLAccess Control List 主要的目的是提供传统的owner,group,othersread,write,execute权限之外的具体权限设置,

ACL可以针对单一用户、单一文件或目录来进行r,w,x的权限控制,对于需要特殊权限的使用状况有一定帮助。

如,某一个文件,不让单一的某个用户访问。

ACL使用两个命令来对其进行控制

     getfacl:取得某个文件/目录的ACL设置项目

     setfacl:设置某个文件/目录的ACL设置项目

--------------------------------------------------------------------------------------------
setfacl - 设置文件访问控制列表的命令
格式1:setfacl [-bkndRLPvh] [{-m|-x} acl_spec] [{-M|-X} acl_file] file...
格式2:setfacl --restore=file
描述
   setfacl 用来在命令里设置acl.
   选项-m和-x后面跟acl规则。多条acl规则以逗号(,)隔开。选项-M和-X用来从文件或标准输入读取acl规则。
   选项--set和--set-file用来设置文件或目录的acl规则,先前的设定将被覆盖。
   选项-m(--modify和-M(--modify-file)选项修改文件或目录的acl规则。
   选项-x(--remove)和-C(--remove-file)选项删除acl规则。
   当使用-M,-X选项从文件中读取规则时,setfacl接受getfacl命令输出的格式。
   当在不支持acls的文件系统上使用setfacl命令时,setfacl将修改文件权限位。如果acl规则并不完全匹配文件权限位,setfacl将会修改文件权限位使其尽可能的反应acl规则,并会向standard error发送错误消息,以大于0的状态返回。
权限
    root是唯一有CAP_FOWNERr能力的用户。
选项
    -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
     递归的对所有文件及目录进行操作。
    -L,--logical
     跟踪符号链接,默认情况下只跟踪符号链接文件,跳过符号链接目录。
    -P,--physical
     跳过所有符号链接,包括符号链接文件。
    --version
     输出setfacl的版本号并退出。
    --help
     输出帮助信息。
    --
     标识命令行参数结束,其后的所有参数都将被认为是文件名。
    -
     如果文件名是-,则setfacl将从标准输入读取文件名。
ACL规则
   setfacl命令可以识别以下的规则格式。
    [d[efault]:] [u[ser]:]uid [:perms]
    指定用户的权限,文件所有者的权限(如果uid没有指定)。
    [d[efault]:] g[roup]:gid [:perms]
    指定群组的权限,文件所有群组的权限(如果gid未指定)。
    [d[efault]:] m[ask][:] [perms]
    有效权限掩码
    [d[efault]:] o[ther] [:perms]
    其他的权限

    对于uid和gid,可以指定一个数字,也可指定一个名字。
    perms域是一个代表各种权限的字母组合:读-r 写-w 执行-x,执行只适合目录和一些可执行的文件,perms域也可设置为八进制格式。
自动创建的规则
    文件目录公包含3俱基本的acl规则。
      *3个基本规则不能被删除。 
      *任何一条包含指定的用户名或群组名的规则必须包含有效的权限组合。
      *任何一条包含缺省规则的规则在使用时,缺省规则必须存在。

——————————————————————————————————————————————

 1、ACL 
    linux  file permission.
    在linux下,对一个文件可以进行操作的对象被分为三娄:file owner(文件的拥有者)、group(组,注意不一定是文件拥有者所在的组)、other(其他)。
    简单地来说acl就是可以设置特定用户或用户组对于一个文件操作权限,需要掌握的命令也只有三个:getfacl,setfacl,chacl.
    ACL是一系列的access entry所组成的。第一条access entry定义了特定的类别可以对文件拥有的操作权限。access entry有三个组成部分:Entry tag type,qualifier(optional),permission
    Entry tag type 有以下几种类型:
      ACL_USER_OBJ:相当于Linux里file_owner的permission
      ACL_USER:定义了额外的用户可以对此文件拥有的permission
      ACL_GROUP_OBJ:相当于Linux里group的permission
      ACL_GROUP:定义了额外的组可以对此文件拥有的permission
      ACL_MASK:定义了ACL_USER,ACL_GROUP_OBJ和ACL_GROUP的最大权限
      ACL_OTHER:相当于Linux里other的permisssion
     例:
      $getfacl --omit-header a.txt        #参数--omit-header可以隐藏前面三个以#开头的定义文件名,file owner和group
       user::rwx                          #define(定义)ACL_USER_OBJ
       user:mis3:rwx                      #define ACL_USER
       group::r--                         #define ACL_GROUP_OBJ
       group:misg:rwx                     #define ACL_GROUP
       mask::rwx                          #define ACL_MASK
       other::rwx                         #define ACL_OTHER
2、如何设置ACL文件
   access entry有三个组成部分:Entry tag type,qualifier(optional),permission。第一个是Entry tag type;第二个字段为qualifier,它定义了特定用户和拥护组对于文件的权限,如用户mis3和组misg;第三个字段是permission。
   例:
     $ll a.txt
     -rw-rw-r--+ root root 12 jul 9 19:50 a.txt      #"+" :表示文件拥有了acl_user或acl_group的值,我们称它为acl文件。
3、acl_mask和Effective permission
    acl_mask是掌握acl的另一个关键。
    在linux file permission里面大家都知道比如对于rw-rw-r--来说,当中的那个rw-是指文件组的permission.但是在acl里面这种情况只是在acl_mask不存在的情况下成立。如果文件有acl_mask值,那么当中那个rw-代表的就是mask值而不是group permission了。
   例:
    $ll -l
    -rwxrw-r-- 1 itadmin misg 1 jul 9 21:39 a.txt      #文件没有acl权限时,acl_mask不起作用。
    $getfacl --omit-header a.txt
     user::rwx
     group::rw-
     mask::rwx
     other::r--
    $setfacl u:acc4:rwx a.txt
    $ll 
    -rwxrwxr--+ 1 itadmin misg 1 jul 9 21:39 a.txt   #给文件acl权限之后,mask就起作用了,这时
    $getfacl --omit-header a.txt              #group permission就不是自己的,而是mask权限。
    user::rwx                                                                      
    user:acc4:rwx
    group::rw-
    mask::rwx
    other::r--
    现在misg组的其他用户想执行a.txt程序就会发生permission deny,原国在于实际上misg组的用户只有read and write permission。这当中显示的rwx是acl_mask的值,而不是group的permission.
    例:假如现在我设置a.txt的mask为read only,那么misg组的用户还会有write permission吗?
       $setfacl -m mask::r-- a.txt
       $getfacl --omit-header a.txt
       user::rwx
       user:acc4:rwx    #effective:r--
       group::rw-    #effective:r--
       mask::r--
       other::r--
    这里我们可以看到acl_user和acl_group_obj旁边多了个$effective:r--,这是什么意思呢?这是因为acl_mask规定了acl_user,acl_group_obj和acl_group的最大权限。所以acl_user和acl_group_obj只有read权限。
      $ll -l 
      -rwxr--r-- 1 itadmin misg 1 jul 9 21:39 a.txt   #现在group permission也会显示其mask的值 
4、Default ACL
      前面所说都是access acl,针对文件而言,而default acl是指对于一个目录进行default acl设置,并且在此目录下建立的文件都将继承此目录的acl.
      $mkdir a
      $setfacl -d -m u:mis3:rw a
      $getfacl --omit-header a
      user::rwx
      group::rwx
      other::r-x
      default:user::rwx
      default:user:mis3:rwx
      default:group::rwx
      default:mask::rwx
      default:other::r-x
      $touch a/test.txt
      $ll -l a/test.txt
      -rw-rw-r-- 1 itadmin misg 1 jul 9 21:39 ./a/test.txt
      $getfacl --omit-header ./a/test.txt
      user::rw-
      user:mis3:rw-             #继承了文件夹的权限。
      group::rwx #effective:rw-
      mask::rw-
      other::r--
5、ACL相关命令
    getfacl命令是用来读取文件的acl,setfacl是用来设定文件的access acl,还有一个chacl是用来改变文件和目录的access acl and default acl ,其中chacl -B:它可以彻底删除文件或目录的acl属性(包括default acl),比如你用setfacl -x删除了所有文件的acl属性,那个+号还是会出现在文件的末尾,所以正确的删除方法应该是用chacl -B.
    用cp来复制文件的时候我们现在可以加上-p选项,这样在拷贝文件的时候也将拷贝文件的acl属性,对于不能拷贝的acl属性将给出警告。
    mv命令将会默认地移动文件的acl属性,同样如果操作不允许的情况下会给出警告。
6、注意 
    如果你的文件系统不支持acl的话,你也许需要重新mount你的file system
     mount -o remount, acl [mount point]
    如果用chmod命令改变linux file permission的时候相应的acl值也会改变,反之。
7、参考资料
   1、man acl  ,man page
   2、http://www.suse.de/~agruen/acl/linux-acls/online
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值