首页
学习
活动
专区
圈层
工具
发布
24 篇文章
1
Linux系列教程(一)——Linux系统简介
2
Linux系列教程(四)——Linux常用命令之文件和目录处理命令
3
Linux系列教程(五)——Linux常用命令之链接命令和权限管理命令
4
Linux系列教程(六)——Linux常用命令之文件搜索命令
5
Linux系列教程(二)——Linux系统安装(手把手学安装centos6.8)
6
Linux系列教程(三)——Linux学习技巧
7
Linux系列教程(七)——Linux常用命令之帮助和用户管理命令
8
Linux系列教程(十一)——Linux软件包管理之RPM命令
9
Linux系列教程(十三)——Linux软件包管理之源码包、脚本安装包
10
Linux系列教程(八)——Linux常用命令之压缩和解压缩命令
11
Linux系列教程(十二)——Linux软件包管理之yum在线管理
12
Linux系列教程(九)——Linux常用命令之网络和关机重启命令
13
Linux系列教程(十四)——Linux用户和用户组管理之相关配置文件
14
Linux系列教程(十)——Linux文本编辑器vim
15
Linux系列教程(十五)——Linux用户和用户组管理之用户管理命令
16
Linux系列教程(十六)——Linux权限管理之ACL权限
17
Linux系列教程(十七)——Linux权限管理之文件系统系统属性chattr权限和sudo命令
18
Linux系列教程(十八)——Linux文件系统管理之文件系统常用命令
19
Linux系列教程(二十一)——Linux的bash基本功能
20
Linux系列教程(二十)——Linux的shell概述以及如何执行脚本
21
Linux系列教程(二十四)——Linux的系统管理
22
Linux系列教程(二十三)——Linux的服务管理
23
Linux系列教程(十九)——Linux文件系统管理之手工分区
24
Linux系列教程(二十二)——Linux的bash变量

Linux系列教程(十六)——Linux权限管理之ACL权限

  通过前面的两篇博客我们介绍了Linux系统的用户管理,Linux用户和用户组管理之相关配置文件 讲解了用户管理的相关配置文件,包括用户信息文件/etc/passwd,用户密码文件/etc/shadow;然后介绍了用户组信息文件/etc/group,用户组密码文件/etc/gshadow。用户的家目录,以及用户的模板目录;Linux用户和用户组管理之用户管理命令 讲解了管理用户和用户组的命令,包括新建、修改、查看等等以及用的比较多的切换用户命令 su。那么用户管理结束之后,我们将进入linux的权限管理介绍,本篇博客介绍的是Linux权限管理的ACL权限。

1、什么是 ACL 权限?

  比如有如下场景:

  某大牛在QQ群内直播讲解Linux系统的权限管理,讲解完之后,他在一个公有的Linux系统中创建了一个 /project 目录,里面存放的是课后参考资料。那么 /project 目录对于大牛而言是所有者,拥有读写可执行(rwx)权限,对于QQ群内的所有用户他们都分配的一个所属组里面,也都拥有读写可执行(rwx)权限,而对于 QQ 群外的其他人,那么我们不给他访问/project 目录的任何权限,那么 /project 目录的所有者和所属组权限都是(rwx),其他人权限无。

  问题来了,这时候直播有旁听的人参与(不属于QQ群内),听完之后,我们允许他访问/project目录查看参考资料,但是不能进行修改,也就是拥有(r-x)的权限,这时候我们该怎么办呢?我们知道一个文件只能有一个所属组,我们将他分配到QQ群所在的所属组内,那么他拥有了写的权限,这是不被允许的;如果将这个旁听的人视为目录/project 的其他人,并且将/project目录的其他人权限改为(r-x),那么不是旁听的人也能访问我们/project目录了,这显然也是不被允许的。怎么解决呢?

  我们想想windows系统里面给某个文件分配权限的办法:

  如上图,我们想要让某个用户不具备某个权限,直接不给他分配这个目录的相应权限就行了。那么对应到Linux系统也是这样,我们给指定的用户指定目录分配指定的权限,也就是 ACL 权限分配。

2、查看分区 ACL 权限是否开启:dump2fs

  我们看某个文件(Linux系统中目录也是文件,一切皆是文件)是否支持 ACL 权限,首先要看文件所在的分区是否支持 ACL 权限。

  ①、查看当前系统有哪些分区:df -h

  ②、查看指定分区详细文件信息:dumpe2fs -h 分区路径

  下面是查看 根分区/ 的详细文件信息

3、开启分区 ACL 权限

  ①、临时开启分区 ACL 权限

代码语言:javascript
复制
mount -o remount,acl /

  重新挂载根分区,并挂载加入 acl 权限。注意这种命令开启方式,如果系统重启了,那么根分区权限会恢复到初始状态。

  ②、永久开启分区 ACL 权限

  一、修改配置文件 /etc/fstab

  上面是修改根分区拥有 acl 权限

代码语言:javascript
复制
UUID=490ed737-f8cf-46a6-ac4b-b7735b79fc63 /                       ext4    defaults,acl        1 1

  二、重新挂载文件系统或重启系统,使得修改生效

代码语言:javascript
复制
mount -o remount /

4、设定 ACL 权限:setfacl 选项 文件名

  ①、给用户设定 ACL 权限:setfacl -m u:用户名:权限 指定文件名

  ②、给用户组设定 ACL 权限:setfacl -m g:组名:权限 指定文件名

  注意:我们给用户或用户组设定 ACL 权限其实并不是真正我们设定的权限,是与 mask 的权限“相与”之后的权限才是用户的真正权限,一般默认mask权限都是rwx,与我们所设定的权限相与就是我们设定的权限。mask 权限下面我们会详细讲解

  范例:所有者root用户在根目录下创建一个文件目录/project,然后创建一个QQ群所属组,所属组里面创建两个用户zhangsan和lisi。所有者和所属组权限和其他人权限是770。

     然后创建一个旁听用户 pt,给他设定/project目录的 ACL 为 r-x。

  目录 /project 的所有者和所属组其他人权限设定为 770。接下来我们创建旁听用户 pt,并赋予 acl 权限 rx

  为了验证 pt 用户对于 /project 目录没有写权限,我们用 su 命令切换到 pt 用户,然后进入 /project 目录,在此目录下创建文件,看是否能成功:

  上面提示权限不够,说明 acl 权限赋予成功,注意如下所示,如果某个目录或文件下有 + 标志,说明其具有 acl 权限。

5、查看 ACL 权限:getfacl 文件名

6、最大有效权限 mask

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

  我们通过 getfacl 文件名 也能查看 mask 的权限,那么我们怎么设置呢?

代码语言:javascript
复制
setfacl -m m:权限 文件名

7、删除 ACL 权限

  ①、删除指定用户的 ACL 权限

代码语言:javascript
复制
setfacl -x u:用户名 文件名

  ②、删除指定用户组的 ACL 权限

代码语言:javascript
复制
setfacl -x g:组名 文件名

  ③、删除文件的所有 ACL 权限

代码语言:javascript
复制
setfacl -b 文件名

8、递归 ACL 权限

  通过加上选项 -R 递归设定文件的 ACL 权限,所有的子目录和子文件也会拥有相同的 ACL 权限。

代码语言:javascript
复制
setfacl -m u:用户名:权限 -R 文件名

9、默认 ACL 权限

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

代码语言:javascript
复制
setfacl -m d:u:用户名:权限 文件名

10、总结

  本篇博客我们介绍了权限管理的ACL权限,通过设定 ACL 权限,我们为某个用户指定某个文件的特定权限,在实际权限管理中还是用的比较多的。

下一篇
举报
领券