Linux权限管理之ACL权限
ACL 是什么
ACL的全称是 Access Control List (访问控制列表) ,一个针对文件/目录的访问控制列表。它在UGO权限(属主,属组,其他人)管理的基础上为文件系统提供一个额外的、更灵活的权限管理机制。它被设计为UNIX文件权限管理的一个补充。ACL允许你给任何的用户或用户组设置任何文件/目录的访问权限。
ACL有什么用
既然是作为UGO权限管理的补充,ACL自然要有UGO办不到或者很难办到的本事,例如:
可以针对特定用户来设置权限
可以针对特定用户组来设置权限
子文件/目录继承父目录的权限
最主要的是当我们的某个目录或文件对其他人设置的权限是---但是某个用户又需要查看里面的内容,这个用户即不是这个文件或目录的拥有者或拥有组中的用户,他只属于
其他用户,其他用户还对这个文件没有任何权限,这时候我们就可以用ACL来设置。
一、检查Linux是否支持ACL
ACL需要Linux内核和文件系统的配合才能工作,当前我们能见到的大多数Linux发行版本默认都是支持的。但最好还是能够先检查一下:
sudo tune2fs -l /dev/sda1 |grep "Default mount options:"
Default mount options: user_xattr acl
我们能够看到默认情况下(Default mount options:)已经加入 acl 支持了。
二、如何设置ACL
我们可以使用setfacl和getfacl命令来设置或查看文件/目录的acl权限。
用法:
setfacl [参数] 文件/目录名
参数
-m :配置后面的 acl 参数给文件/目录使用,不可与 -x 合用;
-x :删除后续的 acl 参数,不可与 -m 合用;
-b :移除所有的 ACL 配置参数;
-k :移除默认的 ACL 参数;
-R :递归配置 acl;
-d :配置“默认 acl 参数”,只对目录有效,在该目录新建的数据会引用此默认值;
给用户设定 ACL 权限:setfacl -m u:用户名:权限 指定文件名
给用户组设定 ACL 权限:setfacl -m g:组名:权限 指定文件名
查看文件/目录的acl权限
用法:
getfacl 文件/目录名
三、下面我们通过一些示例来演示 ACL 权限的基本用法。
针对用户来设置权限
1、假设pi1用户创建了一个文件ii权限如下
-----------------------------------------------
[root@CentOS7 home]# ll ii
-rw-r-----. 1 pi1 pi1 14 7月 16 13:55 ii #其他用户没有任何权限
[root@CentOS7 home]#
-----------------------------------------------
2、为用户pi2添加读写权限,pi2对于ii文件属于其他用户
-----------------------------------------------
[pi1@CentOS7 home]$ setfacl -m u:pi2:rw ii #root或文件拥有者可以通过setfacl命令来添加权限
-----------------------------------------------
3、再次查看ii权限
-----------------------------------------------
[root@CentOS7 home]# ll ii
-rw-r-x---+ 1 pi1 pi1 14 7月 16 13:55 ii #可以看到权限部分多了个+
[root@CentOS7 home]#
-----------------------------------------------
4、查看ii文件的ACL 权限
-----------------------------------------------
[root@CentOS7 home]# getfacl ii
# file: ii #说明文件
# owner: pi1 #ii文件的拥有着
# group: pi1 #ii文件的拥有组
user::rw- #使用者列表栏为空,代表文件拥有着的权限
user:pi2:rw- #针对pi2的权限设置为rx,与拥有者不同
group::r-- #针对文件拥有组的权限设定仅有r
mask::rw- #此文件预设的有效权限(mask)
other::--- #其他人拥有的权限
[root@CentOS7 home]#
-----------------------------------------------
5、为用户组pi2添加读写权限,pi2对于ii文件属于其他用户
-----------------------------------------------
[root@CentOS7 home]# setfacl -m g:pi2:rw ii
-----------------------------------------------
6、查看ii文件的ACL 权限
-----------------------------------------------
[root@CentOS7 home]# getfacl ii
# file: ii
# owner: pi1
# group: pi1
user::rw-
user:pi2:rw-
group::r--
group:pi2:rw- #多了一个pi2组的权限
mask::rw-
other::---
[root@CentOS7 home]#
-----------------------------------------------
四、最大有效权限 mask
我们给用户或用户组设定 ACL 权限其实并不是真正我们可用的权限,是与 mask 的权限“相与”之后的权限才是用户的真正可用的权限,这是什么意思那就是当你为pi1这个用户设置了rwx的权限,但是mask的权限是r--那么ip1用户实际得到的权限就只有r,一般默认mask权限都是与你ACL添加的权限一样的,所以你设定了什么权限用户就具有什么权限。
举例:改变mask权限
-----------------------------------------------
[root@CentOS7 home]# setfacl -m m:r ii #设置mask只有r权限
[root@CentOS7 home]# getfacl ii
# file: ii
# owner: pi1
# group: pi1
user::rw-
user:pi2:rw- #effective:r-- #系统提示有效的权限为r
group::r--
group:pi2:rw- #effective:r--
mask::r--
other::---
-----------------------------------------------
五、递归 ACL 权限
通过加上选项 -R 递归设定文件的 ACL 权限,所有的子目录和子文件也会拥有相同的 ACL 权限。
setfacl -m u:用户名:权限 -R 文件名
六、默认 ACL 权限
如果给父目录设定了默认的 ACL 权限,那么父目录中所有新建的子文件会继承父目录的 ACL 权限。
setfacl -m d:u:用户名:权限 文件名
七、删除 ACL 权限
1、删除指定用户的 ACL 权限
setfacl -x u:用户名 文件名
2、删除指定用户组的 ACL 权限
setfacl -x g:组名 文件名
3、删除文件的所有 ACL 权限
setfacl -b 文件名