Linux之ACL权限

目录

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权限

场景

        某大牛在QQ 群内直播讲解 Linux 系统的权限管理,讲解完之后,他在一个公有的 Linux 系统中创建了一个 /project 目录,里面存放的是课后参考资料。那么 /project 目录对于 大牛 而言是所有者,拥有读写可 执行(rwx)权限 ,对于 Q Q群内的所有用户 他们都分配的 一个所属组 里面,也都 拥有读写可执行(rwx)权限 ,而对于 QQ 群外的其他人 ,那么我们 不给他访问/project 目录的任何权限 ,那么 /project目录的所有者和所属组权限都是(rwx ),其他人权限无
        问题来了,这时候直播有旁听的人参与(不属于QQ 群内),听完之后,我们允许他访问 /project 目录查看参考资料,但是不能进行修改,也就是拥有(r-x )的权限,这时候我们该怎么办呢?我们知道 一个文件只能有一个所属组 ,我们将他 分配到QQ群所在的所属组 内,那么他 拥有了写的权限 ,这是 不被允许 的;如果将这个旁听的人 视为目录/project 的其他人 ,并且 将/project目录的其他人权限改为(r-x) ,那么不是 旁听的人也能访问我们/project目录 了,这显然 也是不被允许 的。怎么解决呢?

Linux之ACL权限_第1张图片

对应到Linux系统也是这样,我们给指定的用户指定目录分配指定的权限,也就是 ACL 权限分配

设定ACL权限

ACL权限管理命令

        getfacle  文件名 --- 查看ACL权限

        setfacl  选项  文件名 --- 设定ACL权限

参数及作用

参数 作用
-m
设定 ACL 权限。如果是 给予用户 ACL 权限 ,则使用 "u: 用户名:权限 " 格式赋予;如果是 给予组 ACL 权限 ,则使用 "g: 组名:权限 " 格式赋予
-x 删除指定的ACL权限
-b 删除所有的ACL权限
-d 设定默认ACL权限。只对目录生效,指目录中新建立的文件拥有此默认权限
-k
删除默认 ACL 权限
-R
递归设定 ACL 权限。指设定的 ACL 权限会对 目录下的所有子文件生效

给用户和用户组添加ACL权限

        用户 --- setfacl -m u:用户名:权限 指定文件名

        用户组 --- setfacl -m g:组名:权限 指定文件名

注意:     

        我们给用户或用户组设定 ACL 权限其实并不是真正我们设定的权限,是与 mask 的权限 “相与”之后的权限才是用户的真正权限 一般默认mask权限都是rwx ,与 我们所设定的权限相与 就是我们设定的权限。

案例

        示例 --- 所有者root用户在根目录下创建一个文件目录/project,然后创建一个QQ群所属组,所属组里面创建两个用户zhangsanlisi。所有者和所属组权限和其他人权限是770,然后创建一个旁听用户 pt,给他设定/project目录的 ACL r-x

创建 目录 /project 的所有者和所属组其他人权限设定为 770 

[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,其他用户---

创建旁听用户pt,并赋予ACL权限rx

[root@localhost ~]# useradd pt --- 创建用户pt
[root@localhost ~]# setfacl -m u:pt:rx /project 赋予旁听用户pt对project列表rx的权限

 注意:

        如果某个目录或文件下有 + 标志,说明其具有 ACL权限

查看目录/project的ACL权限

[root@localhost ~]# getfacl /project/

Linux之ACL权限_第2张图片

验证pt 用户对于 /project 目录没有写权限

        用 su 命令切换到 pt 用户,然后进入 /project 目录,在此目录下创建文件,看是否能成功
[root@localhost ~]# su - pt
[pt@localhost ~]$ cd /project/
[pt@localhost project]$ touch test.txt

Linux之ACL权限_第3张图片

         touch: 无法创建 'test.txt': 权限不够

最大有效权限 mask

        前面说过我们给用户或用户组设定 ACL 权限其实并不是真正我们设定的权限,是与 mask 的权限相与之后的权限才是用户的真正权限,一般默认mask权限都是rwx,与我们所设定的权限相与就是我们设定的权限

通过getfacl 文件名 也能查看 mask 的权限的相关配置

         setfacl -m m:权限 文件名

案例

[root@localhost ~]# setfacl -m m:rw /project/

Linux之ACL权限_第4张图片

删除ACL权限

删除指定用户的ACL权限

setfacl -x u:用户名 文件名

删除指定用户的ACL权限

setfacl -x g:组名 文件名

删除文件的所有ACL权限

setfacl -b 文件名

递归ACL权限

        通过加上选项 -R 递归设定文件的 ACL 权限,所有的子目录和子文件也会拥有相同的 ACL 权限
setfacl -m u:用户名:权限 -R 文件名

默认ACL权限

        如果给父目录设定了默认的 ACL 权限,那么父目录中所有新建的子文件会继承父目录 ACL 权限

setfacl -m d:u:用户名:权限 文件名

你可能感兴趣的:(Rhcsa,linux,运维,服务器)