目录
Linux之ACL权限
场景
设定ACL权限
ACL权限管理命令
参数及作用
给用户和用户组添加ACL权限
案例
创建 目录 /project 的所有者和所属组其他人权限设定为 770
创建旁听用户pt,并赋予ACL权限rx
查看目录/project的ACL权限
验证pt 用户对于 /project 目录没有写权限
最大有效权限 mask
通过getfacl 文件名 也能查看 mask 的权限的相关配置
案例
删除ACL权限
删除指定用户的ACL权限
删除指定用户的ACL权限
删除文件的所有ACL权限
递归ACL权限
默认ACL权限
对应到Linux系统也是这样,我们给指定的用户指定目录分配指定的权限,也就是 ACL 权限分配
getfacle 文件名 --- 查看ACL权限
setfacl 选项 文件名 --- 设定ACL权限
参数 | 作用 |
-m
|
设定 ACL 权限。如果是 给予用户 ACL 权限 ,则使用 "u: 用户名:权限 " 格式赋予;如果是 给予组 ACL 权限 ,则使用 "g: 组名:权限 " 格式赋予
|
-x | 删除指定的ACL权限 |
-b | 删除所有的ACL权限 |
-d | 设定默认ACL权限。只对目录生效,指目录中新建立的文件拥有此默认权限 |
-k |
删除默认 ACL 权限
|
-R
|
递归设定 ACL 权限。指设定的 ACL 权限会对 目录下的所有子文件生效
|
用户 --- setfacl -m u:用户名:权限 指定文件名
用户组 --- setfacl -m g:组名:权限 指定文件名
注意:
我们给用户或用户组设定 ACL 权限其实并不是真正我们设定的权限,是与 mask 的权限 “相与”之后的权限才是用户的真正权限 , 一般默认mask权限都是rwx ,与 我们所设定的权限相与 就是我们设定的权限。
示例 --- 所有者root用户在根目录下创建一个文件目录/project,然后创建一个QQ群所属组,所属组里面创建两个用户zhangsan和lisi。所有者和所属组权限和其他人权限是770,然后创建一个旁听用户 pt,给他设定/project目录的 ACL 为 r-x
[root@localhost ~]# mkdir /project --- 创建 project文件目录
[root@localhost ~]# useradd zhangsan --- 创建zhangsan用户
[root@localhost ~]# useradd lisi --- 创建lisi用户
[root@localhost ~]# groupadd QQgroup --- 创建用户组QQgroup
[root@localhost ~]# gpasswd -M zhangsan,lisi QQgroup --- 将zhangsan,lisi 放入QQgroup用户组中
[root@localhost ~]# chown root:QQgroup /project/ --- 将project文件目录的拥有者改为QQgroup用户组
[root@localhost ~]# chmod 770 /project/ --- 修改project目录的权限 管理者rwx,用户组rwx,其他用户---
[root@localhost ~]# useradd pt --- 创建用户pt
[root@localhost ~]# setfacl -m u:pt:rx /project 赋予旁听用户pt对project列表rx的权限
注意:
如果某个目录或文件下有 + 标志,说明其具有 ACL权限
[root@localhost ~]# getfacl /project/
[root@localhost ~]# su - pt
[pt@localhost ~]$ cd /project/
[pt@localhost project]$ touch test.txt
touch: 无法创建 'test.txt': 权限不够
前面说过我们给用户或用户组设定 ACL 权限其实并不是真正我们设定的权限,是与 mask 的权限“相与”之后的权限才是用户的真正权限,一般默认mask权限都是rwx,与我们所设定的权限相与就是我们设定的权限
[root@localhost ~]# setfacl -m m:rw /project/
setfacl -x u:用户名 文件名
setfacl -x g:组名 文件名
setfacl -b 文件名
setfacl -m u:用户名:权限 -R 文件名
如果给父目录设定了默认的 ACL 权限,那么父目录中所有新建的子文件会继承父目录的 ACL 权限
setfacl -m d:u:用户名:权限 文件名