zoukankan      html  css  js  c++  java
  • Linux访问控制列表(Access Control List,简称ACL)

              Linux访问控制列表(Access Control List,简称ACL)

                                               作者:尹正杰

    版权声明:原创作品,谢绝转载!否则将追究法律责任。

    一.ACL概述

      ACL:Access Control List,实现灵活的权限管理
      
      除了文件的所有者,所属组和其它人,可以对更多的用户设置权限   
      CentOS7 默认创建的xfs和ext4文件系统具有ACL功能   
      CentOS7 之前版本,默认手工创建的ext4文件系统无ACL功能,需手动增加     tune2fs –o acl
    /dev/sdb1     mount –o acl /dev/sdb1 /mnt/test   
      ACL生效顺序:所有者,自定义用户,自定义组,其他人

    二.为jason用户对某个文件设置ACL权限

    [root@node101.yinzhengjie.org.cn ~]# ll /data/
    total 4
    -rw-r--r--. 1 jason devops  0 Sep 10 06:34 jason.txt
    -rw-r--r--. 1 root  devops 22 Sep 10 07:44 root.txt
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# setfacl -m u:jason:- /data/root.txt       #这里我们对jason用户设置的权限为空("-"),即无权限访问"/data/root.txt"文件。
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# ll /data/
    total 4
    -rw-r--r--. 1 jason devops  0 Sep 10 06:34 jason.txt
    -rw-r--r--+ 1 root  devops 22 Sep 10 07:44 root.txt                    #大家注意,该文件设置后属性后面的"."变成了"+",说明设置ACL权限啦
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# getfacl /data/root.txt                #我们可以使用该命令查看相应的ACL设置
    getfacl: Removing leading '/' from absolute path names
    # file: data/root.txt
    # owner: root
    # group: devops
    user::rw-
    user:jason:---    #我们发现jason用户对该文件的权限为0
    group::r--
    mask::r--
    other::r--
    
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# su -l jason
    Last login: Tue Sep 10 06:34:17 PDT 2019 on pts/0
    [jason@node101.yinzhengjie.org.cn ~]$ 
    [jason@node101.yinzhengjie.org.cn ~]$ ll /data/root.txt 
    -rw-r--r--+ 1 root devops 22 Sep 10 07:44 /data/root.txt
    [jason@node101.yinzhengjie.org.cn ~]$ 
    [jason@node101.yinzhengjie.org.cn ~]$ cat /data/root.txt 
    cat: /data/root.txt: Permission denied
    [jason@node101.yinzhengjie.org.cn ~]$ 
    [jason@node101.yinzhengjie.org.cn ~]$ echo "尹正杰到此一游">> /data/root.txt 
    -bash: /data/root.txt: Permission denied
    [jason@node101.yinzhengjie.org.cn ~]$ 

    三.为属组对某个文件设置ACL权限

    [root@node101.yinzhengjie.org.cn ~]# groupadd devops
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# id jason
    uid=10086(jason) gid=10086(jason) groups=10086(jason)
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# usermod -G devops  jason          #为了测试,我们将jason用户加入devops组
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# id jason
    uid=10086(jason) gid=10086(jason) groups=10086(jason),10097(devops)
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# ll /data/
    total 4
    -rw-r--r--. 1 root root 22 Oct  9 05:53 root.txt
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# getfacl /data/
    getfacl: Removing leading '/' from absolute path names
    # file: data/
    # owner: root
    # group: root
    # flags: --t
    user::rwx
    group::r-x
    other::rwx
    
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# getfacl /data/root.txt 
    getfacl: Removing leading '/' from absolute path names
    # file: data/root.txt
    # owner: root
    # group: root
    user::rw-
    group::r--
    other::r--
    
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# su -l jason
    Last login: Wed Oct  9 05:58:25 CST 2019 on pts/1
    [jason@node101.yinzhengjie.org.cn ~]$ 
    [jason@node101.yinzhengjie.org.cn ~]$ cat /data/root.txt 
    尹正杰到此一游
    [jason@node101.yinzhengjie.org.cn ~]$ 
    [jason@node101.yinzhengjie.org.cn ~]$ echo "jason到此一游" >> /data/root.txt         #我们发现没有设置ACL权限无法写入数据。
    -bash: /data/root.txt: Permission denied
    [jason@node101.yinzhengjie.org.cn ~]$ 
    [jason@node101.yinzhengjie.org.cn ~]$ exit 
    logout
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# setfacl -m g:devops:rw /data/root.txt         #我们为devops组添加读写权限
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# getfacl /data/root.txt 
    getfacl: Removing leading '/' from absolute path names
    # file: data/root.txt
    # owner: root
    # group: root
    user::rw-
    group::r--
    group:devops:rw-
    mask::rw-
    other::r--
    
    [root@node101.yinzhengjie.org.cn ~]# 
    [jason@node101.yinzhengjie.org.cn ~]$ echo "jason到此一游" >> /data/root.txt          #再次写入数据,发现数据写入成功啦!
    [jason@node101.yinzhengjie.org.cn ~]$ 
    [jason@node101.yinzhengjie.org.cn ~]$ cat /data/root.txt 
    尹正杰到此一游
    jason到此一游
    [jason@node101.yinzhengjie.org.cn ~]$ 

    四.将一个文件的权限复制给另一个文件权限

    [root@node101.yinzhengjie.org.cn ~]# setfacl -m u:jason:rw /data/root.txt 
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# getfacl /data/root.txt 
    getfacl: Removing leading '/' from absolute path names
    # file: data/root.txt
    # owner: root
    # group: root
    user::rw-
    user:jason:rw-
    group::r--
    group:devops:rw-
    mask::rw-
    other::r--
    
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# touch /data/a.txt
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# getfacl /data/a.txt 
    getfacl: Removing leading '/' from absolute path names
    # file: data/a.txt
    # owner: root
    # group: root
    user::rw-
    group::r--
    other::r--
    
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# getfacl /data/root.txt | setfacl --set-file=- /data/a.txt      #将/data/root.txt文件权限复制给/data/a.txt文件
    getfacl: Removing leading '/' from absolute path names
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# getfacl /data/a.txt 
    getfacl: Removing leading '/' from absolute path names
    # file: data/a.txt
    # owner: root
    # group: root
    user::rw-
    user:jason:rw-
    group::r--
    group:devops:rw-
    mask::rw-
    other::r--
    
    [root@node101.yinzhengjie.org.cn ~]# 

    五.清除ACL权限

    1>.清除指定用户的ACL权限

    [root@node101.yinzhengjie.org.cn ~]# getfacl /data/a.txt 
    getfacl: Removing leading '/' from absolute path names
    # file: data/a.txt
    # owner: root
    # group: root
    user::rw-
    user:jason:rw-
    group::r--
    group:devops:rw-
    mask::rw-
    other::r--
    
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# setfacl -x u:jason /data/a.txt         #清除jason用户的ACL权限。
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# getfacl /data/a.txt 
    getfacl: Removing leading '/' from absolute path names
    # file: data/a.txt
    # owner: root
    # group: root
    user::rw-
    group::r--
    group:devops:rw-
    mask::rw-
    other::r--
    
    [root@node101.yinzhengjie.org.cn ~]# 

    2>.清除指定组的ACL权限

     1 [root@node101.yinzhengjie.org.cn ~]# getfacl /data/a.txt 
     2 getfacl: Removing leading '/' from absolute path names
     3 # file: data/a.txt
     4 # owner: root
     5 # group: root
     6 user::rw-
     7 group::r--
     8 group:devops:rw-
     9 mask::rw-
    10 other::r--
    11 
    12 [root@node101.yinzhengjie.org.cn ~]# 
    13 [root@node101.yinzhengjie.org.cn ~]# setfacl -x g:devops /data/a.txt       #仅仅清除掉devops组的ACL权限
    14 [root@node101.yinzhengjie.org.cn ~]# 
    15 [root@node101.yinzhengjie.org.cn ~]# getfacl /data/a.txt 
    16 getfacl: Removing leading '/' from absolute path names
    17 # file: data/a.txt
    18 # owner: root
    19 # group: root
    20 user::rw-
    21 group::r--
    22 mask::r--
    23 other::r--
    24 
    25 [root@node101.yinzhengjie.org.cn ~]# 
    26 [root@node101.yinzhengjie.org.cn ~]# 

    3>.清除所有ACL权限

    [root@node101.yinzhengjie.org.cn ~]# getfacl /data/root.txt 
    getfacl: Removing leading '/' from absolute path names
    # file: data/root.txt
    # owner: root
    # group: root
    user::rw-
    user:jason:rw-
    group::r--
    group:devops:rw-
    mask::rw-
    other::r--
    
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# setfacl -b /data/root.txt         #清除所有ACL权限
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# getfacl /data/root.txt 
    getfacl: Removing leading '/' from absolute path names
    # file: data/root.txt
    # owner: root
    # group: root
    user::rw-
    group::r--
    other::r--
    
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# 

    六.访问控制列表的注意事项

    1>.mask只影响除所有者和other的之外的人和组的最大权限

    [root@node101.yinzhengjie.org.cn ~]# getfacl /data/root.txt 
    getfacl: Removing leading '/' from absolute path names
    # file: data/root.txt
    # owner: root
    # group: root
    user::rw-
    group::r--
    other::r--
    
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# setfacl -m mask::rw /data/root.txt     #mask需要与用户的权限进行逻辑与运算后,才能变成有限的权限(Effective Permission),用户和组的设置必须存在于mask权限设定范围内才会生效。
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# getfacl /data/root.txt 
    getfacl: Removing leading '/' from absolute path names
    # file: data/root.txt
    # owner: root
    # group: root
    user::rw-
    group::r--
    mask::rw-
    other::r--
    
    [root@node101.yinzhengjie.org.cn ~]# 

    2>.--set选项会把原来又的ACL选项都删除,用新的替代,需要注意的是一定要包含UGO的设置,不能像-m一样只是添加ACL就可以

    [root@node101.yinzhengjie.org.cn ~]# setfacl -b /data/root.txt 
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# getfacl /data/root.txt 
    getfacl: Removing leading '/' from absolute path names
    # file: data/root.txt
    # owner: root
    # group: root
    user::rw-
    group::r--
    other::---
    
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# setfacl --set u::rw,u:jason:rw,g::r,o::- /data/root.txt 
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# getfacl /data/root.txt 
    getfacl: Removing leading '/' from absolute path names
    # file: data/root.txt
    # owner: root
    # group: root
    user::rw-
    user:jason:rw-
    group::r--
    mask::rw-
    other::---
    
    [root@node101.yinzhengjie.org.cn ~]# 

    3>.备份和恢复ACL(主要的文件操作命令cp和mv都支持ACL,只是cp命令需要加上-p参数。但是tar等常见的备份工具是不会保留目录和文件的ACL信息)

    [root@node101.yinzhengjie.org.cn ~]# getfacl -R /data/ > acl.txt        #备份某个目录的文件ACL权限
    getfacl: Removing leading '/' from absolute path names
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# cat acl.txt                   #查看备份目录的ACL权限信息
    # file: data/
    # owner: root
    # group: root
    # flags: --t
    user::rwx
    group::r-x
    other::rwx
    
    # file: data//root.txt
    # owner: root
    # group: root
    user::rw-
    user:jason:rw-
    group::r--
    mask::rw-
    other::---
    
    # file: data//a.txt
    # owner: root
    # group: root
    user::rw-
    group::r--
    mask::r--
    other::r--
    
    [root@node101.yinzhengjie.org.cn ~]# 
    [root@node101.yinzhengjie.org.cn ~]# setfacl -R --set-file=acl.txt /data/          #恢复指定目录的ACL权限
    [root@node101.yinzhengjie.org.cn ~]# 

    七.小试牛刀

    1>.在/testdir/dir里创建新文件自动属于webs组,组apps的成员如tomcat能对这些新文件有读写权限,组dbs的成员如:mysql只能对新文件有读权限,其它用户(不属于webs,apps,dbs)不能访问这个文件夹
    
    2>.备份/testdir/dir里所有文件的ACL权限到/root/acl.txt中,清除/test/dir中所有ACL权限,最后还原ACL权限。
  • 相关阅读:
    Python界面常用GUI包
    ATSC/DVB/ISDB三大标准比较
    【MPEG】DVB / ATSC / ISDB区别
    Python判断字符串是否为字母或者数字
    MApp_ZUI_CTL_MarqueeTextWinProc字串滚动
    PWM原理及其在电源中的应用
    按键板的原理与实现 扩展GPIO
    按键板的原理与实现----ADC
    使用with语句来写一个稍微复杂sql语句,附加和子查询的性能对比
    SQL Server备份还原数据库中的小把戏
  • 原文地址:https://www.cnblogs.com/yinzhengjie/p/11367475.html
Copyright © 2011-2022 走看看