1、ACL为访问控制列表,主要目的是提供传统的属主、所属群组、其他人的读、写、执行权限之外的详细权限设置。可以针对单一用户、单一文件或目录来进行r、w、x的权限设置。
2、dmesg | grep -i acl 可以查询本机是否支持ACL的功能。
3、getfacl:获取某个文件/目录的ACL设置选项,setfacl:设置某个目录/文件的ACL规范
4、setfacl命令用法介绍:
用法: setfacl [-bkdR] { -m|-M|-x|-X ... } file ...
-m, --modify-acl 更改文件的访问控制列表
-M, --modify-file=file 从文件读取访问控制列表条目更改
-x, --remove=acl 根据文件中访问控制列表移除条目
-X, --remove-file=file 从文件读取访问控制列表条目并删除
-b, --remove-all 删除所有扩展访问控制列表条目
-k, --remove-default 移除默认访问控制列表
-d, --default 应用到默认访问控制列表的操作
-R, --recursive 递归操作子目录
5、案例要求:有两个用户v1,和v2,现在需要v1也能访问v2的家目录,但是不具有修改的权限。
#首先进入v1用户,发现v2的家目录确实无法访问
[root@master ~]# su - v1
Last login: Mon Jul 8 17:57:04 CST 2019 on pts/0
[v1@master ~]$ cd /home/v2
-bash: cd: /home/v2: Permission denied
[v1@master ~]$ exit
logout
#切换回root用户,通过setfacl设置v1权限为rx,目录为v2的家目录
[root@master ~]# setfacl -m u:v1:rx /home/v2
[root@master ~]# getfacl /home/v2
getfacl: Removing leading '/' from absolute path names
# file: home/v2
# owner: v2
# group: v2
user::rwx
user:v1:r-x
group::---
mask::r-x
other::---
#切换回v1用户
[root@master ~]# su - v1
Last login: Mon Jul 8 18:42:21 CST 2019 on pts/0
[v1@master ~]$ cd /home/v2
#发现可以访问
[v1@master v2]$ ll -a
total 12
drwxr-x---+ 2 v2 v2 62 Jul 8 16:31 .
drwxr-xr-x. 7 root root 70 Jul 8 16:31 ..
-rw-r--r--. 1 v2 v2 18 Oct 31 2018 .bash_logout
-rw-r--r--. 1 v2 v2 193 Oct 31 2018 .bash_profile
-rw-r--r--. 1 v2 v2 231 Oct 31 2018 .bashrc
#但是无法创建文件
[v1@master v2]$ touch test
touch: cannot touch ‘test’: Permission denied
5、setfacl可以对账号、用户组名、有效权限设置进行配置
账号: setfacl -m u:v1_user:rx /home/v2
用户组名: setfacl -m g:v1_group:rx /home/v2
有效权限: setfacl -m m:rx /home/v2
(用户或用户组所设置的权限必须要存在于mask的权限设置范围内才会生效)
6、使用默认权限设置目录未来文件的ACL权限继承【d:[u|g]:[user|group]:权限】
例如:让v1在/home/v2下面一支具有rx的默认权限
#创建一个文件/文件夹,发现权限后面没有+,代表这个ACL属性并没有继承。
[root@master v2]# touch a.txt
[root@master v2]# mkdir b
[root@master v2]# ll
total 0
-rw-r--r--. 1 root root 0 Jul 8 19:27 a.txt
drwxr-xr-x. 2 root root 6 Jul 8 19:27 b
#让v1在/home/v2下面一直有rx默认权限
[root@master v2]# setfacl -m d:u:v1:rx /home/v2
[root@master v2]# touch b.txt
[root@master v2]# mkdir a
#查询文件,有了+
[root@master v2]# ll
total 0
drwxr-x---+ 2 root root 6 Jul 8 19:29 a
-rw-r--r--. 1 root root 0 Jul 8 19:27 a.txt
drwxr-xr-x. 2 root root 6 Jul 8 19:27 b
-rw-r-----+ 1 root root 0 Jul 8 19:28 b.txt
#y用getfacl再次查看
[root@master v2]# getfacl /home/v2
getfacl: Removing leading '/' from absolute path names
# file: home/v2
# owner: v2
# group: v2
user::rwx
user:v1:r-x
group::---
mask::r-x
other::---
default:user::rwx
default:user:v1:r-x
default:group::---
default:mask::r-x
default:other::---
7、让ACL的属性全部消失的命名【setfacl -b 文件名】
8、单一设置值的取消,需要通过-x
setfacl -x u:v1 /home/v2
setfacl -x d:u:v1 /home/v2
(针对取消某个账号的ACL时,不需要加上权限列表)