04. linux系统ACL访问控制

发布于 25 天前  36 次阅读


  1. 1.ACL访问控制概述

    上一章节我们学习了基础权限UGO、特殊权限,但所有的权限是针对某一类用户设置的, 如果希望对文件进行自定义权限控制,就需要用到文件的访问控制列表ACL

    UGO设置基本权限: 只能一个用户,一个组和其他人
    ACL
    设置基本权限: rwx
    设定acl只能是root管理员用户. 相关命令getfacl , setfacl

    acl基本使用方式

    //环境准备

    [root@lxgyw ~]# cp /etc/passwd /root/passwd

    //文件在没有设定acl, 看到的和传统权限是一样

    [root@lxgyw ~]# ll passwd

    -rw-r--r-- 1 root root 0
    10-26
    13:59 /home/test.txt

     

    //使用getacl查看权限

    [root@lxgyw ~]# getfacl passwd

    # file: passwd

    # owner: root

    # group: root

    user::rw- //文件owner权限

    group::r-- //文件拥有组权限

    other::r-- //其他人权限

    1.设定acl权限案例如下

    -rw-r--r-- 1 root root 1380 Feb 27
    11:25 passwd

     

    alice 拥有读写权限 rw

    bgx 没有任何权限 -

    jack 组拥有读权限 r

    匿名用户拥有读写权限 rw

     

     

    //建立相关用户

    [root@lxgyw ~]# useradd alice

    [root@lxgyw ~]# useradd bgx

    [root@lxgyw ~]# useradd jack

     

    //增加用户 alice 权限

    [root@lxgyw ~]# setfacl -m u:alice:rw passwd

     

    //增加用户 bgx 权限

    [root@lxgyw ~]# setfacl -m u:bgx:- passwd

     

    //增加匿名用户权限

    [root@lxgyw ~]# setfacl -m o::rw passwd

     

    //增加组权限

    [root@lxgyw ~]# setfacl -m g:jack:r passwd

     

     

    注意: 如果用户同时属于不同的两个组,并且两个组设定了acl访问控制


    1.
    根据acl访问控制优先级进行匹配规则


    2.
    如有用户拥有多个组的权限不同的权限,优先使用最高权限(模糊匹配)

    2.查看acl权限

    [root@lxgyw ~]# ll passwd

    -rw-rw-rw-+ 1 root root 1531
    Jan
    26
    07:52 passwd

     

    [root@lxgyw ~]# getfacl passwd

    # file: passwd

    # owner: root

    # group: root

    user::rw-

    user:bgx:---

    user:alice:rw-

    group::r--

    group:jack:r--

    mask::rw-

    other::rw-

    3.移除acl权限

    //移除jack组的acl权限

    [root@lxgyw ~]# setfacl -x g:jack passwd

     

    //移除bgx用户的acl权限

    [root@lxgyw ~]# setfacl -x u:bgx passwd

     

    //移除文件和目录所有acl权限

    [root@lxgyw ~]# setfacl -b passwd

     

    //移除默认的acl

    [root@lxgyw ~]# setfacl -k dir

    4.查看acl帮助

    //EXAMPLES 示例文档

    [root@lxgyw ~]# man setfacl

     

    //复制 file1 ACL 权限给 file2

    [root@lxgyw ~]# setfacl -m u:alice:rw,u:bgx:r,g:jack:rw file1

    [root@lxgyw ~]# getfacl file1 |setfacl --set-file=- file2

  2. 2.ACL高级特性MASK

    mask用于临时降低用户或组的权限,但不包括文件的所有者和其他人。
    mask最主要的作用是用来决定用户的最高权限。

    mask默认不会对匿名用户降低权限,所以为了便于管理文件的访问控制,建议匿名用户的权限置为空

    //临时降低用户或组权限

    [root@lxgyw ~]# setfacl -m mask::rw filename

    小结
    1.
    mask会影响哪些用户,除了所有者和其他人。
    2.
    mask权限决定了用户访问文件时的最高权限。(如何影响)
    3.
    mask用于临时降低用户访问文件的权限。(mask做什么)
    4.
    任何重新设置acl访问控制会清理mask所设定的权限。

  3. 3.ACL高级特性Default

    default: 继承(默认)

    alice能够对/opt目录以及以后在/opt目录下新建的文件有读、写、执行权限

    //赋予 alice /home 读写执行权限

    [root@lxgyw ~]## setfacl -R -m u:alice:rwX /opt

    //赋予 alice 对以后在/home 下新建的文件有读写执行权限(使 alice 的权限继承)

    [root@lxgyw ~]## setfacl -m d:u:alice:rwX /opt

     

    //检查对应的权限

    [root@linux-node1 ~]# getfacl /opt/

    getfacl: Removing leading '/' from absolute path names

    # file: opt/

    # owner: root

    # group: bgx

    user::rwx

    user:alice:rwx

    group::rwx

    mask::rwx

    other::rwx

    default:user::rwx

    default:user:alice:rwx

    default:group::rwx

    default:mask::rwx

    default:other::rwx

  4. 4.ACL访问控制实践案例

    案例1: 将新建文件的属性修改tom:admin, 权限默认为644
    要求tom对该文件有所有的权限mary可以读写该文件admin组可以读写执行该文件jack只读该文件, 其他人一律不能访问该文件

    //实验前, 建立几个普通用户

    [root@lxgyw ~]# useradd tom

    [root@lxgyw ~]# useradd bean

    [root@lxgyw ~]# useradd mary

    [root@lxgyw ~]# useradd jack

    [root@lxgyw ~]# useradd sutdent

    [root@lxgyw ~]# groupadd admin

    [root@lxgyw ~]# gpasswd -a mary admin

    [root@lxgyw ~]# gpasswd -a bean admin

     

    //检查用户属性

    [root@linux-node1 ~]# id tom

    uid=1004(tom) gid=1004(tom) groups=1004(tom)

    [root@linux-node1 ~]# id mary

    uid=1006(mary) gid=1006(mary) groups=1006(mary),1007(admin)

    [root@linux-node1 ~]# id bean

    uid=1005(bean) gid=1005(bean) groups=1005(bean),1007(admin)

    [root@linux-node1 ~]# id jack

    uid=1002(jack) gid=1002(jack) groups=1002(jack)

    [root@linux-node1 ~]# id sutdent

    uid=1007(sutdent) gid=1008(sutdent) groups=1008(sutdent)

     

    //准备相关文件

    [root@linux-node1 ~]# cp /etc/passwd /root/

    [root@linux-node1 ~]# chown tom:admin passwd

    [root@linux-node1 ~]# chmod 644 passwd

     

    //检查设定前的acl列表

    [root@linux-node1 ~]# getfacl passwd

    # file: passwd

    # owner: tom

    # group: admin

    user::rw-

    group::r--

    other::r--

     

    //设定acl权限

    [root@linux-node1 ~]# setfacl -m u::rwx,u:mary:rw,u:jack:r,g:admin:rwx,o::- passwd

     

    //检查acl权限

    [root@linux-node1 ~]# getfacl passwd

    # file: passwd

    # owner: tom

    # group: admin

    user::rwx

    user:jack:r--

    user:mary:rw-

    group::r--

    group:admin:rwx

    mask::rwx

    other::---

    acl的控制规则是从上往下匹配
    1.
    tom由于是文件的拥有者,所以直接按照user::rwx指定的权限去操作
    2.
    mary用户从上往下寻找匹配规则,发现user:mary:rw-能够精确匹配mary用户,尽管mary属于admin组,同时admin组有rwx的权限,但是由于mary用户的规则在前面,所有优先生效。
    3.
    bean由于找不到精确匹配的规则,而bean是属于admin组,根据文件的定义,该文件是属于admin组,所以bean的权限是按照group:admin:rwx的权限去操作。
    4.
    jack用户从上往下寻找匹配规则,发现user:jack:r--能够精确匹配jack用户。
    5.
    student用户找不到精确匹配的user定义规则, 也找不到相关组的定义规则,最后属于other

    案例2: lab acl setup

    controller组成员有:student

    sodor组成员有:thomas,james

     

    目录: /shares/steamies

    文件: /shares/steamies/file

    脚本: /shares/steamies/test.sh

     

    controller属于该目录的所属组, 新建文件必须属于controller

    sodor组的成员对该目录拥有rwx权限

    sodor组成员james对该目录及子目录(包括以后新建立的文件)没有任何权限

    实际操作

    //准备用户

    [root@linux-node1 ~]# groupadd controller

    [root@linux-node1 ~]# groupadd sodor

    [root@linux-node1 ~]# useradd student -G controller

    [root@linux-node1 ~]# useradd thomas -G sodor

    [root@linux-node1 ~]# useradd james -G sodor

     

    //准备目录

    [root@linux-node1 ~]# mkdir /shares/steamies -p

    [root@linux-node1 ~]# echo "file" >> /shares/steamies/file

    [root@linux-node1 ~]# echo "echo 123" >> /shares/steamies/test.sh

    [root@linux-node1 ~]# chmod 755 /shares/steamies/test.sh

    [root@linux-node1 ~]# chown -R :controller /shares/steamies/

    [root@linux-node1 ~]# chmod g+s /shares/steamies/

     

     

    //设定权限(X表示,如果原本有执行权限就保留,如果没有则不添加)

    [root@linux-node1 ~]# setfacl -R -m g:sodor:rwX,u:james:- /shares/steamies/

     

    //设定继承规则

    [root@linux-node1 ~]# setfacl -R -m d:g:sodor:rwX,d:u:james:- /shares/steamies/

     

     

    [root@linux-node1 steamies]# getfacl /shares/steamies/

    getfacl: Removing leading '/' from absolute path names

    # file: shares/steamies/

    # owner: root

    # group: controller

    # flags: -s-

    user::rwx

    user:james:---

    group::r-x

    group:sodor:rwx

    mask::rwx

    other::r-x

    default:user::rwx

    default:group::r-x

    default:group:sodor:rwx

    default:mask::rwx

    default:other::r-x

     

     

     

     

     

     

     

     

     

     

        


一沙一世界,一花一天堂。君掌盛无边,刹那成永恒。