第六章、使用访问控制列表限制文件访问
6.1、 ACL访问控制列表概述
实现更多的权限控制,可以同时针对多个不同的用户、组进行权限设定
ext2,ext3,ext4文件系统挂载的时候需要使用acl选项,xfs默认就支持.
设定acl只能是root
命令: getfacl , setfacl
# ll /tmp/passwd
-rw-r--r--. 1 root root 2005 Jul 19 11:38/tmp/passwd
# getfacl /tmp/passwd 在没有对文件设定acl的时候,看到结果和ls -l 看到的传统权限设定是一样
getfacl: Removing leading '/' from absolutepath names
# file: tmp/passwd
# owner: root
# group: root
user::rw- 文件owner权限
group::r-- 文件拥有组权限
other::r-- 其他人权限
文件设定acl后:
# ll /tmp/passwd
-rwxrwx---+ 1 root root 2058 May 11 21:08/tmp/passwd
# getfacl /tmp/passwd
getfacl: Removing leading '/' from absolutepath names
# file: tmp/passwd
# owner: root
# group: root
user::rwx
user:mary:rw- #effective:r--
user:jack:r--
group::rwx #effective:r-x
group:tom:r--
mask::r-x
other::---
目录设定默认acl后:
# getfacl /tmp/test
getfacl: Removing leading '/' from absolutepath names
# file: tmp/test
# owner: root
# group: root
user::rwx
group::r-x
other::r-x
default:user::rwx
default:user:tom:r-x
default:group::r-x
default:mask::r-x
default:other::r-x
6.2、制定ACL访问控制列表
例子1:
要求在desktop虚拟机里把文件的属性修改tom:admin , 权限默认为644
要求: tom对该文件有所有的权限,mary可以读写该文件,admin组可以读写执行该文件,jack只读该文件,其他人一律不能访问该文件
tom组仅仅对该文件只读
实验前,建立几个普通用户
# useradd tom
# useradd bean
# useradd mary
# useradd jack
# groupadd admin
# gpasswd -a mary admin
# gpasswd -a bean admin
# id tom
uid=1001(tom) gid=1001(tom)groups=1001(tom)
# id mary
uid=1002(mary) gid=1002(mary)groups=1002(mary),1004(admin)
# id bean
uid=1003(bean) gid=1003(bean)groups=1003(bean),1004(admin)
# id jack
uid=1004(jack) gid=1005(jack)groups=1005(jack)
# chown tom:admin /tmp/passwd
# chmod 644 /tmp/passwd
# setfacl -muser::rwx,user:mary:rw,group::rwx,user:jack:r,group:tom:r,other::--- /tmp/passwd
# getfacl /tmp/passwd
getfacl: Removing leading '/' from absolutepath names
# file: tmp/passwd
# owner: tom
# group: admin
user::rwx
user:mary:rw-
user:jack:r--
group::rwx
group:tom:r--
mask::rwx <---除了 user:: 和 other:: ,会于中间的所有控制列表进行 交集运算, 算出对应规则有效权限
other::---
acl的控制规则是从上往下匹配的
tom由于他是文件的拥有者,所以直接安装user:: 指定的权限去操作 --》 rwx
mary不是文件的拥有着,从上往下找规则,发现user:mary:rw-能够精确匹配mary用户 --》 rw-
尽管mary是属于admin组,admin组有rwx的权限,但是由于mary的规则在前面,所有优先生效
bean由于找不到精确匹配bean用户的规则,而bean是属于admin组,根据文件的定义,该文件是属于admin组的,所以bean的权限是按照group::rwx的权限去操作。 --》 rwx
jack 不是文件的主人,并且找到user:jack:r-- ,所以只读
student用户,不是文件主人,也找不到精确匹配的user定义规则,也找不到相关组的定义规则,最后属于other --》 ---
理解mask的作用
=========================================
删除关于jack的规则
# setfacl -x user:jack /tmp/passwd
去掉所有规则
# setfacl -b /tmp/passwd
===========================================
例子2:要求在server0虚拟机上完成
执行 lab acl setup开始实验
controller组成员:student
sodor组成员有:thomas,james 密码均为redhat
要求: sodor组的成员可以对/shares/steamies有所有的权限,但sodor组成员james对该目录以及目录里的现有文件和以后建立的文件什么权限都没有.
目录里的display_engines.sh用于测试执行权限.
# setfacl -Rm g:sodor:rwX /shares/steamies
# setfacl -Rm u:james:- /shares/steamies
# setfacl -m d:g:sodor:rwx /shares/steamies
# setfacl -m d:u:james:- /shares.steamies
# exit
$ su - thomas
$ cd /shares/steamies/
$ cat roster.txt
$ ./display_engines.sh
$ mkdir tidmouth
$ echo "toot toot" >tidmouth/whistle.txt
$ exit
$ su - james
$ cd /shares/steamies
$ ls !$
$ cat !$/roster.txt
student$ newgrp controller
==================================================
删除目录的所有默认acl
# setfacl -k /tmp/dir
===================================================
实验:
共享目录: /shares/cases,目录下存在两个文件分别为adventures.txt和moriarty.txt
bakerstreet组成员:holmes,watson
scotlandyard组成员: lestrade,gregson,jones
所有用户密码均为redhat
所有更改应用在cases目录及其下的文件,但不会应用到/shares目录
所有bakerstreet组成员可以对cases目录里的文件有读和写权限
scotlandyard组成员jones只能对目录里的文件有只读权限,其余的scotlandyard组成员均可以对该目录的文件有读写权限
目录里的所有内容都属于bakerstreet组,让目录里的文件可以让文件的拥有者和拥有组可以读写,其他用户没有任何权限,要求目录里以后新建的文件都自动属于bakerstreet组
# lab acl setup
# chgrp -R bakerstreet /shares/cases/
# chmod g+s /shares/cases/
# setfacl -R -muser::rwX,group::rwX,group:scotlandyard:rwX,user:jones:rX,other::-/shares/cases/
# setfacl -md:user::rwX,d:group::rwx,d:group:scotlandyard:rwx,d:user:jones:rx,other::-/shares/cases/
# lab acl grade
个人笔记:
[root@localhost ~]# chown tom:admin/tmp/passwd
[root@localhost ~]# chmod 644 /tmp/passwd
[root@localhost ~]# ll /tmp/passwd
-rw-r--r--. 1 tom admin 2005 Jun 28 21:41/tmp/passwd
[root@localhost ~]# setfacl -mu::rwx,u:mary:rw,g:admin:rwx,u:jack:r,o::-,g:tom:r /tmp/passwd
[root@localhost ~]#
[root@localhost ~]# getfacl /tmp/passwd
getfacl: Removing leading '/' from absolutepath names
# file: tmp/passwd
# owner: tom
# group: admin
user::rwx
user:jack:r--
user:mary:rw-
group::r--
group:tom:r--
group:admin:rwx
mask::rwx
other::---
改MASK
[root@localhost ~]# setfacl -m mask::rx/tmp/passwd
[root@localhost ~]# setfacl /tmp/passwd
Usage: setfacl [-bkndRLP] { -m|-M|-x|-X ...} file ...
Try `setfacl --help' for more information.
[root@localhost ~]# getfacl /tmp/passwd
getfacl: Removing leading '/' from absolutepath names
# file: tmp/passwd
# owner: tom
# group: admin
user::rwx
user:jack:r—
user:mary:rw- #effective:r--
group::r--
group:tom:r--
group:admin:rwx #effective:r-x
mask::r-x
other::---
对user和other是不受影响的,中间的用户才受MASK的影响。
删除设定的权限
oot@localhost ~]# setfacl -x user:jack/tmp/passwd
[root@localhost ~]# setfacl /tmp/passwd
Usage: setfacl [-bkndRLP] { -m|-M|-x|-X ...} file ...
Try `setfacl --help' for more information.
[root@localhost ~]# getfacl /tmp/passwd
getfacl: Removing leading '/' from absolutepath names
# file: tmp/passwd
# owner: tom
# group: admin
user::rwx
user:mary:rw-
group::r--
group:tom:r--
group:admin:rwx
mask::rwx
other::---
[root@localhost ~]# setfacl -x /tmp/passwd
setfacl: Option -x: Invalid argument nearcharacter 1
[root@localhost ~]# setfacl -b /tmp/passwd
[root@localhost ~]# getfacl /tmp/passwd
getfacl: Removing leading '/' from absolutepath names
# file: tmp/passwd
# owner: tom
# group: admin
user::rwx
group::r--
other::---
[root@localhost ~]#
例2.