写点什么

用户权限 -Linux 系统 ACL 控制

作者:Albert Edison
  • 2022 年 8 月 07 日
  • 本文字数:3195 字

    阅读完需:约 10 分钟

用户权限-Linux系统ACL控制
  • ACL 访问控制概述

  • ACL 高级特性 MASK

  • ACL 高级特性 Default

  • ACL 访问控制实践案例


一、ACL 访问控制概述

的权限是针对某一类用户设置的,如果希望对某个指定的用户进行单独的权限控制,就需要用到文件的访问控制列表 ACL


设定 acl 只能是 root 管理员用户. 相关命令: getfacl setfacl

acl 基本使用方式

环境准备


[root@liza ~]# cp /etc/passwd /root/passwd
复制代码


文件在没有设定 acl, 看到的和传统权限是一样


[root@liza ~]# ll passwd -rw-r--r--. 1 root root 2287 Jan 12 14:25 passwd
复制代码


使用 getacl 查看权限


[root@liza ~]# getfacl passwd # file: passwd# owner: root# group: rootuser::rw-group::r--other::r--
复制代码


user::rw- //文件owner权限


group::r– //文件拥有组权限


other::r– //其他人权限

1.设定 acl 权限案例如下

-rw-r–r– 1 root root 1380 Feb 27 11:25 passwd


  1. alice 拥有读写权限 rw

  2. bgx 没有任何权限 -

  3. jack 组拥有读权限 r

  4. 匿名用户拥有读写权限 rw

建立相关用户
[root@liza ~]# useradd alice[root@liza ~]# useradd bgx[root@liza ~]# groupadd jack
复制代码
增加用户 alice 权限
[root@liza ~]# setfacl -m u:alice:rw passwd 
复制代码
增加用户 bgx 权限
[root@liza ~]# setfacl -m u:bgx:- passwd 
复制代码
增加匿名用户权限
[root@liza ~]# setfacl -m o::rw passwd 
复制代码
增加组权限
[root@liza ~]# setfacl -m g:jack:r passwd 
复制代码
注意: 如果用户同时属于不同的两个组,并且两个组设定了 acl 访问控制
  1. 根据 acl 访问控制优先级进行匹配规则

  2. 如有用户拥有多个组的权限不同的权限,优先使用最高权限(模糊匹配)

2. 查看 acl 权限

[root@liza ~]# ll passwd -rw-rw-rw-+ 1 root root 2287 Jan 12 14:25 passwd[root@liza ~]# getfacl passwd # file: passwd# owner: root# group: rootuser::rw-user:alice:rw-user:bgx:---group::r--group:jack:r--mask::rw-other::rw-
复制代码

3.移除 acl 权限

移除 jack 组的 acl 权限


[root@liza ~]# setfacl -x g:jack passwd 
复制代码


移除 bgx 用户的 acl 权限


[root@liza ~]# setfacl -x u:bgx passwd 
复制代码


移除文件和目录所有 acl 权限


[root@liza ~]# setfacl -b passwd 
复制代码

4.查看 acl 帮助

EXAMPLES 示例文档


[root@liza ~]# man setfacl
复制代码


复制 file1 的 ACL 权限给 file2


[root@liza ~]# touch file1 ;touch file2[root@liza ~]# setfacl -m u:alice:rw,u:bgx:r,g:jack:rw file1[root@liza ~]# getfacl file1 | setfacl --set-file=- file2[root@liza ~]# getfacl file2# file: file2# owner: root# group: rootuser::rw-user:alice:rw-user:bgx:r--group::rw-group:jack:rw-mask::rw-other::rw-
复制代码



二、ACL 高级特性 MASK

mask 用于临时降低用户或组的权限,但不包括文件的属主和匿名用户,那么 mask 最主要的作用是用来决定他们的最高权限


mask 默认不会对匿名用户降低权限,所以为了便于管理文件的访问控制,建议匿名用户的权限置为空

临时降低用户或组权限
[root@liza ~]# setfacl -m mask::rw passwd 
复制代码
提示
  1. mask 会影响所有用户,但不会影响属主属组以及匿名用户

  2. mask 权限决定了用户访问文件时的最高权限

  3. mask 用于临时降低用户访问文件的权限

  4. 任何重新设置 acl 访问控制会清理 mask 所设定的权限




三、.ACL 高级特性 Default


  1. default: 继承(默认)

  2. alice 能够对/opt 目录以及以后在/opt 目录下新建的文件有读、写、执行权限

赋予 alice 对/home 读写执行权限
[root@liza ~]# setfacl -R -m u:alice:rwx /opt/
复制代码
赋予 alice 对以后在/home 下新建的文件有读写执行权限(使 alice 的权限继承)
[root@liza ~]# setfacl -m d:u:alice:rwx /opt/
复制代码
检查对应的权限
[root@liza ~]# getfacl /opt/getfacl: Removing leading '/' from absolute path names# file: opt/# owner: root# group: root# flags: -s-user::rwxuser:alice:rwxgroup::rwxmask::rwxother::rwxdefault:user::rwxdefault:user:alice:rwxdefault:group::rwxdefault:mask::rwxdefault:other::rwx
复制代码



四、ACL 访问控制实践案例

案例 1: 将新建文件的属性修改 tom:admin, 权限默认为 644

要求:tom 对该文件有所有的权限 mary 可以读写该文件 admin 组可以读写执行该文件 jack 只读该文件其他人一律不能访问该文件

实验前, 建立几个普通用户
[root@liza ~]# groupadd admin[root@liza ~]# useradd -G admin mary[root@liza ~]# useradd -G admin bean[root@liza ~]# useradd tom[root@liza ~]# useradd jack[root@liza ~]# useradd student
复制代码
检查用户属性
[root@liza ~]# id maryuid=1009(mary) gid=1012(mary) groups=1012(mary),1011(admin)[root@liza ~]# id beanuid=1010(bean) gid=1013(bean) groups=1013(bean),1011(admin)[root@liza ~]# id maryuid=1009(mary) gid=1012(mary) groups=1012(mary),1011(admin)[root@liza ~]# id jackuid=1012(jack) gid=1015(jack) groups=1015(jack)[root@liza ~]# id studentuid=1013(student) gid=1016(student) groups=1016(student)
复制代码
准备相关文件
[root@liza ~]# cp /etc/passwd /root/[root@liza ~]# chown tom:admin passwd [root@liza ~]# chmod 644 passwd 
复制代码
检查设定前的 acl 列表
[root@liza ~]# getfacl passwd # file: passwd# owner: tom# group: adminuser::rw-group::r--other::r--
复制代码
设定 acl 权限
[root@liza ~]# setfacl -m u::rwx,u:mary:rw,u:jack:r,g:admin:rwx,o::- passwd 
复制代码
检查 acl 权限
[root@liza ~]# getfacl passwd # file: passwd# owner: tom# group: adminuser::rwxuser:mary:rw-user:jack:r--group::r--group:admin:rwxmask::rwxother::---
复制代码
acl 的控制规则是从上往下匹配
  1. tom 由于是文件的拥有者,所以直接按照 user::rwx 指定的权限去操作

  2. mary 用户从上往下寻找匹配规则,发现 user:mary:rw-能够精确匹配 mary 用户,尽管 mary 属于 admin 组,同时 admin 组有 rwx 的权限,但是由于 mary 用户的规则在前面,所有优先生效

  3. bean 由于找不到精确匹配的规则,而 bean 是属于 admin 组,根据文件的定义,该文件是属于 admin 组,所以 bean 的权限是按照 group:admin:rwx 的权限去操作

  4. jack 用户从上往下寻找匹配规则,发现 user:jack:r–能够精确匹配 jack 用户

  5. student 用户找不到精确匹配的 user 定义规则, 也找不到相关组的定义规则,最后属于 other

案例 2: lab acl setup

  1. controller 组成员有:student

  2. sodor 组成员有:thomas,james

  3. 目录: /shares/steamies

  4. 文件: /shares/steamies/file

  5. 脚本: /shares/steamies/test.sh

  6. controller 属于该目录的所属组, 新建文件必须属于 controller 组

  7. sodor 组的成员对该目录拥有 rwx 权限

  8. sodor 组成员 james 对该目录及子目录(包括以后新建立的文件)没有任何权限

准备用户
[root@liza ~]# groupadd controller[root@liza ~]# groupadd sodor[root@liza ~]# useradd -G controller student[root@liza ~]# useradd -G sodor thomas[root@liza ~]# useradd -G sodor james
复制代码
准备目录
[root@liza ~]# mkdir -p /shares/steamies [root@liza ~]# echo "file" >> /shares/steamies/file[root@liza ~]# echo "echo 123" >> /shares/steamies/test.sh[root@liza ~]# chmod 755 /shares/steamies/test.sh [root@liza ~]# chown -R :controller /shares/steamies/[root@liza ~]# chmod g+s /shares/steamies/
复制代码
设定权限(X 表示,如果原本有执行权限就保留,如果没有则不添加)
[root@liza ~]# setfacl -R -m g:sodor:rwx,u:james:- /shares/steamies/
复制代码
设定继承规则
[root@liza ~]# setfacl -R -m d:g:sodor:rwX,d:u:james:- /shares/steamies/[root@liza ~]# getfacl /shares/steamies/getfacl: Removing leading '/' from absolute path names# file: shares/steamies/# owner: root# group: controller# flags: -s-user::rwxuser:james:---group::rwxgroup:sodor:rwxmask::rwxother::rwxdefault:user::rwxdefault:user:james:---default:group::rwxdefault:group:sodor:rwxdefault:mask::rwxdefault:other::rwx
复制代码


发布于: 2022 年 08 月 07 日阅读数: 2
用户头像

Albert Edison

关注

目前在某大厂担任后端开发,欢迎交流🤝 2022.03.08 加入

🏅️平台:InfoQ 签约作者、阿里云 专家博主、CSDN 优质创作者 🛫领域:专注于C语言、数据结构与算法、C++、Linux、MySQL、云原生的研究 ✨成就:2021年CSDN博客新星Top9,算法领域优质创作者,全网累计粉丝4W+

评论

发布
暂无评论
用户权限-Linux系统ACL控制_Linux_Albert Edison_InfoQ写作社区