zoukankan      html  css  js  c++  java
  • linux用户权限 -> ACL访问控制

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

    facl权限

    简介

    facl的权限是针对某一类用户设置的。
    如果希望对某个指定的用户进行单独的权限控制就需要用到文件的访问控制列表acl
    设定acl只能是root管理员用户。

    使用方法

    查看权限

    在没有设定acl时,看到的权限是相同的,下面的结果是默认权限

    [root@Test01 ~]# getfacl /tmp
    getfacl: Removing leading '/' from absolute path names
    # file: tmp
    # owner: root
    # group: root
    # flags: --t
    user::rwx
    group::rwx
    other::rwx

    修改权限

    #环境创建:
    新增三个普通用户alice、bgx、jack
    
    #权限需求
    alice 拥有读写权限    rw
    bgx  没有任何权限     -
    jack 组拥有读权限     r
    匿名用户拥有读写权限  rw
    
    #权限设定
    setfacl -m u:alice:rw test.txt
    setfacl -m u:bgx:- test.txt
    setfacl -m g:jack:r test.txt
    setfacl -m o::rw test.txt

    移除权限

    移除文件或目录的所有facl权限    setfacl -b test.txt
    移除jack组的权限               setfacl -x g:jack test.txt
    删除目录的所有默认              acl setfacl -k /tmp

    高级特性mask

    mask用于临时降低用户或组的权限,但不包括文件的属主和匿名用户,那么mask最主要的作用是用来决定他们的最高权限。
    mask默认不会对匿名用户降低权限,所以为了便于管理文件的访问控制,建议匿名用户的权限置为空。

    临时降低用户或组权限setfacl -m mask::rw filename

    提示:

    1.mask会影响所有用户,但不会影响属主以及匿名用户(掐头去尾)。
    2.mask权限决定了用户访问文件时的最高权限。
    3.mask用于临时降低用户访问文件的权限。
    4.任何重新设置acl访问控制会清理mask所设定的权限

    高级特定default继承

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

    1)赋予 alice 对/opt 读写执行权限 
    etfacl -R -m u:alice:rwX /opt
    
    2)赋予 alice 对以后在/opt 下新建的文件有读写执行权限(使 alice 的权限继承) 
    setfacl -m d:u:alice:rwX /opt
    
    3)检查对应的权限
    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

    ACL访问控制实践案例

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

    //实验前, 建立几个普通用户
    [root@xuliangwei ~]# useradd tom
    [root@xuliangwei ~]# useradd bean
    [root@xuliangwei ~]# useradd mary
    [root@xuliangwei ~]# useradd jack
    [root@xuliangwei ~]# useradd sutdent
    [root@xuliangwei ~]# groupadd admin
    [root@xuliangwei ~]# gpasswd -a mary admin
    [root@xuliangwei ~]# 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
  • 相关阅读:
    JavaScript 中的undefined and null 学习
    html5 file upload and form data by ajax
    openresty + lua-resty-weedfs + weedfs + graphicsmagick动态生成缩略图(类似淘宝方案)
    ubuntu10.04 安装oracle server 版 笔记
    windows xp + mysql5.5 + phpmyadmin insert 中文繁體
    (原创)ubuntu 10.04+ruby1.9.2+rails3 安装记录
    ruby簡單的代碼行統計工具
    Ruby中如何复制对象 (deep clone)(转载)
    vi 常用命令使用說明
    一个小公司老板的日常管理日记,希望能让创业的朋友学到东西(转载)
  • 原文地址:https://www.cnblogs.com/tim1blog/p/9746640.html
Copyright © 2011-2022 走看看