简介
ACL权限控制主要目的是提供传统的 owner,group,other 的 read,wirte,execute 权限之外的具体权限设置,可以针对单一用户或组来设置特定的权限,是用来解决用户对文件身份不足这个缺陷的方法。
ACL权限的安装与配置
一般情况下,ACL 在最小化安装的 (minimal) CentOS 中是默认安装并启用的,到底有没有安装,安装一下试试看就知道了。
[root@localhost ~]# yum install acl
Loaded plugins: fastestmirror, langpacks
....(省略)
Package acl-2.2.51-12.el7.x86_64 already installed and latest version
Nothing to do
要使用ACL必须要有文件系统支持才行,目前绝大多数的文件系统都会支持。对于 CentOS 7 来说,其默认的文件系统是 xfs,不需要预先设置就可以直接使用 ACL 的功能。
设定和查看ACL权限
- 设定ACL权限
为用户设定ACL权限
[root@localhost ~]# setfacl -m u:用户名:权限(rwx) 文件名
======================================================
为用户组设定ACL权限
[root@localhost ~]# setfacl -m g:组名:权限(rwx) 文件名
- 查看ACL权限
查看文件或目录的ACL权限
[root@localhost ~]# getfacl 文件名
- 补充
setfacl
参数
-m:设定ACL权限;
-x:删除指定的ACL权限;
-b:删除所有的ACL权限;
-d:设定默认ACL权限;
-k:删除默认ACL权限;
-R:递归设定ACL权限;
最大权限与删除
-
最大有效权限mask
mask是用来指定最大有效权限的(使用命令getfacl 文件名显示的结果中倒数第二排会出现mask这个词)。如果给用户赋予了acl权限,是需要和mask的权限“相与”才能得到用户的真正权限。相与是计算机中的术语,皆真方为真,有假便为假。例如mask权限为rwx,某用户的acl权限为r-x,则实际有效权限为r-x。
※最大权限也会影响到组权限(例:某文件所有者为tony,chmod赋予的普通权限为7,而acl赋予tony的权限为5,则acl权限会高于chmod权限) - 修改最大有效权限mask
修改mask的命令
setfacl -m m:权限 文件
- 删除acl权限的命令
删除指定用户的acl权限
setfacl -x u:用户名 文件
=============================
删除指定用户组的acl权限
setfacl -x g:组名 文件
=============================
删除文件所有的acl权限
setfacl -b 文件
递归ACL权限与默认ACL权限
-
递归ACL权限
父目录在设定ACL权限时,所有的已建立好的子文件和子目录也会拥有相同的ACL权限。
※递归权限仅能赋予目录,赋予文件会报错
※新建立的文件没有相应的权限
设定递归权限
setfacl -m u:用户名:权限 -R 目录名
-
默认ACL权限
如果父目录设定默认ACL权限,那么父目录中所有新建的子文件都会继承父目录的ACL权限。
※默认权限也只能赋予目录,但赋予文件不会报错
※旧的子文件不会赋予响应的权限
设定默认权限
setfacl -m d(default的缩写):用户名:权限 目录名
-
权限溢出
由于rwx对文件和目录的作用不同,当给目录赋予权限时,递归所得到子文件权限可能超出预想,这便是权限溢出。
※尽量少用acl权限