前面我们之前说过,Linux系统的权限分为六种。有读写执行的基本权限,umask默认权限。

今天我们来说一下ACL权限。

提示:每一个文件,只能有一个所有者,只能有一个所属组,剩下的都是other(其他人)

1、什么是ACL权限

比如我是一个老师,创建可一个共享文件夹,这个文件夹的所有者肯定是我,我把所有的学生都加入到一个组里,把文件夹的所属组定义到学生组。这样我就能够分别定义我操作文件夹的权限,和学生对文件夹的操作权限,和其他人(其他班的同学)对文件夹的操作权限。但是如果我的班级要有试听同学,试听同学对文件夹的操作权限和班中同学的权限肯定要不同。就会出现下面的情况。

  • 如果定义所有者为试听同学,肯定不行。

    第一,我创建的文件夹,我已经是所有者了,虽然可以改,但是感觉会非常混乱。

    第二,一个文件的所有者只能有一个,而试听同学可能会有多个。
  • 如果试听同学定义成other(其他人),肯定不行。

    因为试听同学能看了,那其他班级的同学也就能看了。
  • 如果试听同学定义成所属组,这样也不行。

    因为要求试听同学要有一定的对文件夹操作的权限,但是和班级的正式同学要有区别。

这时就会发现用户对文件的身份不够用了,这就需要用到ACL权限了。

ACL概述:ACL是用于解决用户对文件身份不足的问题的

上边的描述如下图:

2、开启ACL

# dumpe2fs命令是查询指定分区详细文件系统信息的命令
[root@localhost ~]# dumpe2fs -h /dev/sda3 选项:
-h 仅显示超级块中信息,而不显示磁盘块组的详细信息。

/dev/sda3文件内容,如下图:

这就表示Linux分区支持ACL权限。默认开启,查看一下,以防万一

如果没有开启,手工开启分区的ACL权限。

# 重新挂载根分区,并挂载加入acl权限。(临时生效)
[root@localhost ~]# mount -o remount,acl /

也可以通过修改/etc/fstab文件,永久开启ACL权限。(永久生效)

注意:/etc/fstab文件要慎重修改,改错了,系统可能启动不了。

# 加入acl
[root@localhost ~]# vi /etc/fstab
UUID-c2ca6f57-b15c-43ea-bca0-f239083d8bd2 / ext4 defaults,acl(在/目录的该位置添加上acl) 1 1 # 重新挂载文件系统或重启动系统,使修改生效
[root@localhost ~]# mount -o remount /

3、ACL权限的相关命令

(1)设定ACL权限

[root@localhost ~]# setfacl [选项] 文件名

选项:

  • -m:设定ACL权限
  • -b:删除ACL权限
  • -x:删除单个用户的ACL权限

例如:设置ACL权限给用户。

# 格式:
[root@localhost ~]# setfacl -m u:用户名:权限(数字和字母都行) 文件名 # 示例
[root@localhost ~]# setfacl -m u:st:5 /www/

查看一下/www/文件夹,如下图所示:

(2)查询文件的ACL权限

执行命令:[root@localhost ~]# getfacl 文件名

结果如下图所示:

第一行有一个报错,错误是说不识别左侧的/(根目录标识),他推荐进入到根目录,用相对路径的方式进行查看。这个报错并不影响我们查看结果,可以忽略。

说明字段含义:

  • # file:www:文件名。
  • #owner: sc:所有者。
  • # group:tg:所属组。
  • user::rwx:所有者权限。
  • user:st:r-x:这里就是文件的ACL权限。
  • group::rwx:所属组权限。
  • mask::rwx:最大有效权限。
  • other::--:其他人权限。

(3)设置文件ACL权限给用户组

# 命令格式
[root@localhost ~]# setfacl -m g:组名:权限 文件名 # 示例
[root@localhost ~]# setfacl -g u:st:5 /www/

(4)给文件夹和里边的文件同时赋予ACL权限

[root@localhost ~]# setfacl -m u:st:5 -R /www/

选项:-R:递归

注意:赋予递归ACL权限,只能赋予目录。也就是说# setfacl -m u:st:5 -R /www/最后的/www/位置,一定要是文件夹,不能是文件。

如果文件被赋予了ACL权限,那么我们用ll命令查看到文件的权限,可能是不准确的,如果想要看准确的,需要通过getfacl 文件名命令查看。

如下图所示:

(5)ACL默认权限

上边的目录中如果再创建新的文件,新创建的文件是否有ACL权限?

答案是没有的。可以在命令中加入d选项,设置ACL默认权限,就可以解决。

[root@localhost ~]# setfacl -m d:u:aa:rwx -R /test

注意:默认权限只能赋予目录。

下图为设置ACL默认权限的文件夹,通过getfacl 文件名命令查看权限。

(6)总结

如果给目录赋予ACL权限,两条命令都要输入。

递归与默认的区别:

  • setfacl -m u:cc:rx -R soft/——》只对已经存在的文件生效。
  • setfacl -m d:u:aa:rwx -R /test——》只对以后新建的文件生效。

拓展:

ACL权限,一旦递归之后,不可避免的出现权限溢出。

  • 什么是权限溢出?

    ACL权限递归之后,目录和目录中的文件都会有相同的执行权限。目录的执行权限是进入目录,而文件的执行权限就非常危险了,相当于赋予了文件最大权限。这个问题是没法解决的。

    以后通过shell脚本,能解决ACL权限递归造成的权限溢出问题,判断文件夹里边的文件类型,文件赋予4,文件夹赋予5,这样就能解决。但这就不是一个单一命令了。

所以正常情况下还是使用所有者,所属组,其他人权限来处理。

4、最大有效权限mask

最大有效权限mask值,是用来控制文件的最大有效权限的。

如下图所示:

mask值分别和所有者、所属组、其他人、ACL权限,相与的结果,来最终决定一个身份的权限是什么。

例如:设定一个文件的mask权限为rw-

使用m:权限格式:

[root@localhost www]# setfacl -m m:6 /www/

结果如下图:

5、删除ACL权限

示例如下:

# 删除指定用户和用户组的ACL权限
[root@localhost ~]# setfacl -x u:st /project/ # 会删除文件的所有的ACL权限
[root@localhost ~]# setfacl -b project/

『学了就忘』Linux权限管理 — 53、ACL权限详解的更多相关文章

  1. 『学了就忘』Linux用户管理 — 50、用户管理相关文件详细说明

    目录 1.用户信息文件 2./etc/shadow影子文件 3./etc/group 组信息文件 4.组密码文件 5.用户的家目录 6.用户邮箱目录 7.用户模板目录 总结: 提示:严格的用户权限划分 ...

  2. 『学了就忘』Linux用户管理 — 51、用户管理相关命令

    目录 1.添加用户(useradd命令) 2.设定密码(passwd命令) 3.用户信息修改(usermod命令) 4.删除用户(userdel命令) 5.切换用户身份(su命令) 1.添加用户(us ...

  3. 『学了就忘』Linux服务管理 — 75、Linux系统中的服务

    目录 1.服务的介绍 2.Windows系统中的服务 3.Linux系统中服务的分类 4.独立的服务和基于xinetd服务的区别 5.如何查看一个服务是独立的服务还是基于xinetd的服务 (1)查看 ...

  4. 『学了就忘』Linux日志管理 — 92、日志轮替

    目录 1.日志文件的命名规则 2.logrotate配置文件说明 3.logrotate配置文件的主要参数 1.日志文件的命名规则 日志轮替最主要的作用就是把旧的日志文件移动并改名,同时建立新的空日志 ...

  5. 『学了就忘』Linux日志管理 — 93、日志轮替补充

    目录 1.把自己的日志加入日志轮替 (1)操作方式 (2)示例 2.logrotate命令 1.把自己的日志加入日志轮替 使用RPM包方式安装服务的日志会自动的加入logrotate轮替,一般不需要你 ...

  6. 『学了就忘』Linux软件包管理 — 40、Linux系统软件包介绍

    目录 1.Linux系统软件包分类 2.源码包说明 3.二进制包说明 4.RPM包的优缺点 4.RPM包的两种安装方法 5.总结 1.Linux系统软件包分类 Linux系统下的软件包只有源码包和二进 ...

  7. 『学了就忘』Linux软件包管理 — 42、对RPM软件包的查询操作

    目录 1.查询RPM软件包是否安装 2.查询系统中所有已安装的RPM软件包 3.查询RPM软件包的详细信息 4.查询RPM软件包中的文件列表 5.查询系统文件属于哪个RPM包 6.查询RPM软件包所依 ...

  8. 『学了就忘』Linux软件包管理 — 43、RPM包的校验和证书

    目录 1.RPM包的校验 (1)RPM包校验基本命令 (2)校验某个系统文件是否被修改举例 (3)验证内容中8个信息的具体内容 (4)文件类型有哪些 2.RPM包的证书 (1)数字证书 (2)数字证书 ...

  9. 『学了就忘』Linux软件包管理 — 44、在RPM包中提取文件

    目录 1.RPM包中文件的提取 2.在RPM包中提取文件的操作 (1)cpio命令介绍 (2)提取RPM包中文件 1.RPM包中文件的提取 为什么要做这个事呢? 在操作Linux系统的时候误删除一个文 ...

  10. 『学了就忘』Linux软件包管理 — 47、Linux源码包的安装和卸载

    目录 1.源码包安装服务的注意事项 2.源码包安装服务的过程 3.源码包安装服务的删除 4.源码包安装服务的启动 5.源码包安装服务的关闭 1.源码包安装服务的注意事项 (1)安装服务选择哪种软件包? ...

随机推荐

  1. C++ 与 Visual Studio 2019 和 WSL(四)——库组件

    C++ 与 Visual Studio 2019 和 WSL (库组件) Reference 在 C++ 项目中使用库和组件 | Microsoft Docs 演练:创建和使用自己的动态链接库 (C+ ...

  2. python和shell 取日期为今天的行

    按条件取行 todolist.txt是存储所有数据的地方,每次查看数据库显得麻烦. 在执行命令后,要在终端显示今日应作事项. 首先用linux 的shell脚本来实现该功能. grep指令可以在文件中 ...

  3. FastAPI 学习之路(四十二)定制返回Response

    我们想要在接口中返回xml格式的内容,我们应该如何实现呢. from fastapi import FastAPI,Response @app.get("/legacy/") de ...

  4. skywalking实现分布式系统链路追踪

    一.背景 随着微服务的越来越流行,我们服务之间的调用关系就显得越来越复杂,我们急需一个APM工具来分析系统中存在的各种性能指标问题以及调用关系.目前主流的APM工具有CAT.Zipkin.Pinpoi ...

  5. 使用jave2实现将wav格式的音频转换成mp3格式

    最近需要用到语音合成功能,网上查阅了一番,发现可以使用腾讯云的语音合成API来完成这个功能,但是腾讯云的api返回的是wav格式的音频文件,这个格式的文件有些不通用,因此需要转换成mp3格式的文件. ...

  6. SCons - 简单而强大的项目编译脚本(原文https://www.cnblogs.com/binchen-china/p/5646791.html)

    N年前学的makefile,当时还勉强能写一些简单的工程编译,现在已经基本忘了.makefile确实编写复杂,而且平时也不是经常使用,容易忘记.偶识了scons,一切都变的简单了.最近研究了下scon ...

  7. Allegro如何测量距离,测距工具的使用

    http://www.allegro-skill.com/thread-2480-1-1.html

  8. 基于屏幕空间的实时全局光照(Real-time Global Illumination Based On Screen Space)

    目录 Reflective Shadow Maps(RSM) RSM 的重要性采样 RSM 的应用与缺陷 Screen Space Ambient Occulsion(SSAO) SSAO Blur ...

  9. ASP的调试技术解答

    一. 调试 ASP.NET 应用程序时出现"未将项目配置为进行调试"的错误信息 症状 当您在 Visual Studio .NET 中调试 ASP.NET 应用程序时,可能会出现下 ...

  10. nod_1009 数字1的数量(分析题)

    题意: 给定一个十进制正整数N,写下从1开始,到N的所有正数,计算出其中出现所有1的个数. 例如:n = 12,包含了5个1.1,10,12共包含3个1,11包含2个1,总共5个1. Input 输入 ...