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