定义: ACL(Access control list),即访问控制列表,它是一系列规则的集合,ACL通过这些规则对不同的报文分类,进而对不同的报文进行不同的处理。
ACL的基本原理:它负责管理用户配置的所有的规则,提供报文匹配规则的算法。
ACL规则的匹配: 报文到达设备后,设备从报文中提取信息,并将提取到的报文与ACL规则进行匹配,如果有提取的信息与规则匹配成功就称作命中规则,之后就停止查找,根据匹配的规则进行相应的动作; 还有可能查找完所有的匹配规则都没有一条规则能匹配成功,这称为未命中规则。
简单来说,匹配过程会有两种结果,命中规则和 未命中规则,命中规则中又分为命中permit(允许)规则和命中deny(拒绝)规则。
只要对文件设置acl规则后,acl就会对该文件开启,如下图没开启acl前的文件属性显示状态和开启后的显属性显示状态,发现属性信息后面多了一个小+号:
要查看acl列表可以使用: getfacl filename
如上图所示:显示的数据前面带 # 的表示是文件的默认属性,一二三行就是这个文件的默认属性; 第四行用户名栏是空的这代表该文件所有者的权限; 第五行表示针对aporai这个用户的权限是rwx,它就是我们通过setfacl 命令设置的 acl 规则; 第六行用户组栏是空的,这代表该文件的所属用户组的 权限; 第七行表示此文件的权限閥值,即 所设置的用户和组的权限必须在mask所定的权限最大值以内才会生效。第七行表示该文件的其他人权限。
1. acl列表的管理即添加匹配规则,下面介绍几条常见的管理命令:
setfacl -m u:aporai:rw file.acl ###### 指定aporai这个用户对file.acl这个文件有rw的权限
setfacl -m g:student:rx file.acl #######指定student这个组的用户对file.acl这个文件有rx的权限
setfacl -x u:aporai file.acl ####### 删除指定的用户aporai的匹配规则
setfacl -x g:student file.acl ####### 删除指定的组student的匹配规则
setfacl -b file.acl ####### 关闭在该文件上开启的acl列表,同时删除所有的acl参数
假如我们要给file.acl这个文件指定 aporai用户有读写权限:
假如我们要给file.acl这个文件指定某个用户组对其有r权限,那么如下图:
2.acl的有效权限mask
mask的意思是所指定的用户和组的权限必须在mask的权限设置范围内才会生效,即权力閥值。
假设跟随上一步的实验结果,我们给了aporai这个用户rw的权限,给了student这个用户组 r 的权限,若我们此时改变权限閥值为 仅有r,然后看看会有什么现象发生,如下图:
我们会发现在aporai这个用户的指定的匹配规则后面出现了一个#提示的内容,意思是有效的权限仅有r ,而指定组student后并未出现任何提示,这是什么原因呢? 这是因为设置的mask值为r,即最大有效权限为r,所以aoprai指定的权限已经超出了mask的指定的范围,而student这个组指定的权限并未超出mask的最大的值。 通过这个实验我们会大概理解mask的意思。
需要注意chmon g+r/w/z 也会改变mask的默认值, 通常我们使用 setfacl -m m:xxx file 这一命令来更改mask的值。
3:acl默认权限的设定
还有一种比较常见的应用场景,你要让在你所开启acl列表的目录下面,每建立一个文件或目录,都会继承你的上层目录acl列表的匹配规则,以上的配置方法明显是不能实现的,如图所示:
这时可以使用这个命令来解决: setfacl -m d:u:aporai:rw important.txt
我们发现这和之前的命令相比只是多了一个 d 参数,其实这个参数代表的含义是:设置默认acl参数,它只对目录有效,而且是在该目录下新建的文件和目录才会继承上个目录的acl匹配规则,对在加d这个参数 之前建立的数据不起作用。
下面我们通过实验来验证:
首先, 我们先在/下建立一个目录important.txt , 并对它设置acl规则为:aporai用户可以对其有rwx权限。
然后,我们在该目录下面建立新文件file 和新目录dir,观察发现file 和 dir 都没开启acl列表:
接着,我们用setfacl -m d:u:student:rwx important.txt 这条命令对目录importan.txt进行配置。 发现acl列表出现了新的内容:
再继续在该目录下面创建对照组,文件file-mirro、目录dir-mirro,并观察他们的属性信息发现对照组的文件和目录已经继承了上层目录的acl列表的匹配规则:
再在dir-mirro目录下创建新目录dir1,观察实验结果:
所以,d参数是有第归性质的。
setfacl -k important.txt ##### 删除目录的默认acl参数。
注意!!!默认acl只对目录生效,且只对目录下新建的目录或文件会遗传默认匹配!