第六章、使用访问控制列表限制文件访问

 

 

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.txtmoriarty.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::---

 

userother是不受影响的,中间的用户才受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.