ACL权限概述
ACL的全称是 Access Control List (访问控制列表) ,一个针对文件/目录的访问控制列表。
它在UGO权限管理的基础上为文件系统提供一个额外的、更灵活的权限管理机制。它被设计为UNIX文件权限管理的一个补充。ACL允许你给任何的用户或用户组设置任何文件/目录的访问权限。
场景
通常无论文件还是目录都会有基础的三类权限
- 拥有者(owner):文件的创建者或拥有者。
- 用户组(group):文件所属的用户组。
- 其他人(others):除拥有者和用户组之外的所有用户。
而无特殊需求的情况下,这三类就基本满足需求了。
但是如果出现了需要有第四类权限的需求,基础权限就无法满足了,这个时候,就需要使用ACL了。
使用
查看ACL权限
使用 getfacl 命令
getfacl 文件/目录名
示例
$ getfacl a
# file: a
# owner: root
# group: root
user::rwx
group::r-x
other::r--
default:user::rwx
default:user:user2:---
default:group::r-x
default:mask::r-x
default:other::r--
$ getfacl 111.log
# file: 111.log
# owner: root
# group: root
user::rw-
user:user2:---
group::r--
mask::r--
other::r--
操作ACL权限
使用 setfacl 命令>>>>
参数
setfacl [-bkRd] [{-m|-x} acl参数] 文件/目录名
- -m :配置后面的 acl 参数给文件/目录使用,不可与 -x 合用;
- -x :删除后续的 acl 参数,不可与 -m 合用;
- -b :移除所有的 acl 配置参数;
- -k :移除默认的 acl 参数;
- -R :递归配置 acl; 既设定的 acl 权限会对目录下所有子文件生效。
- -d :配置“默认 acl 参数”,只对目录有效,在该目录新建的数据会引用此默认值;
>>>>
添加或修改ACL权限
# 对文件test.txt设置user2用户的权限是---
setfacl -m u:user2:--- test.txt
# 对文件1设置user2组的权限是rwx
setfacl -m g:user2:rwx test.txt
结果
$ ll test.txt
# 会发现最后的 . 变成了 +
-rw-r--r--+ 1 root root 0 Aug 6 03:24 test.txt
$ getfacl test.txt
# file: test.txt
# owner: root
# group: root
user::rw-
user:user2:---
group::r--
group:user2:rwx
mask::r--
other::r--
>>>>
删除ACL权限
setfacl -x u:user2 test.txt
$ getfacl test.txt
# file: test.txt
# owner: root
# group: root
user::rw-
group::r--
group:user2:rwx
mask::r--
other::r--
setfacl -x g:user2 test.txt
$ getfacl test.txt
# file: test.txt
# owner: root
# group: root
user::rw-
group::r--
mask::r--
other::r--
$ ll test.txt
# 会发现最后的 . 变成了 +
-rw-r--r--+ 1 root root 0 Aug 6 03:24 test.txt
此时我们虽然已经删掉了添加的两条acl,但是在ll的时候,还是有+ ,
这个时候就需要用到 -b 了,清除所有acl规则
$ setfacl -b test.txt
$ ll test.txt
-rw-r--r--. 1 root root 0 Aug 6 03:24 test.txt
>>>>
默认ACL权限(default)
default 权限在 ACL(Access Control List)中的继承行为是为了方便和简化权限管理。当我们在一个目录上设置了 default 权限时,这些权限会自动应用于该目录下新创建的文件或子目录。
>修改default权限
# 修改文件夹a的default权限中grop的权限为---
setfacl -d -m g::--- a
$ getfacl a
# file: a
# owner: root
# group: root
user::rwx
group::r-x
other::r--
default:user::rwx
default:group::---
default:other::r--
此时我们再在a目录下创建文件夹
$ mkdir a/dir1
$ getfacl a/dir1
# file: a/dir1
# owner: root
# group: root
user::rwx
group::---
other::r--
default:user::rwx
default:group::---
default:other::r--
可以看到不仅继承了default权限,而且自己的权限也是继承的父目录的default权限
创建文件
$ touch a/file1
$ getfacl a/file1
# file: a/file1
# owner: root
# group: root
user::rw-
group::---
other::r--
可以看到,文件是没有default权限的,但是自己的权限也是继承自父目录的default权限的,因为文件的满权限也只是666,所以default中的执行权限是无法继承到文件中的。
>添加或修改其他default权限
例如文件夹中所有创建的文件夹或者文件对 user2 的权限都是 r-x
$ setfacl -m d:u:user2:r-x a
$ getfacl a
# file: a
# owner: root
# group: root
user::rwx
group::r-x
other::r--
default:user::rwx
default:user:user2:r-x
default:group::r-x
default:mask::r-x
default:other::r--
此时在目录a下创建文件和文件夹
$ mkdir a/dir2
$ getfacl a/dir2
# file: a/dir2
# owner: root
# group: root
user::rwx
user:user2:r-x
group::r-x
mask::r-x
other::r--
default:user::rwx
default:user:user2:r-x
default:group::r-x
default:mask::r-x
default:other::r--
$ touch a/file2
$ getfacl a/file2
# file: a/file2
# owner: root
# group: root
user::rw-
user:user2:r-x #effective:r--
group::r-x #effective:r--
mask::r--
other::r--
可以看到,文件夹可以完美继承default权限,但是文件的话,执行权限会无法继承,提示有效的权限是 r–