除了传统rwx权限,你知道Linux还有acl访问控制权限吗?详细教程

2019-07-18     Linux学习教程

请关注本头条号,每天坚持更新原创干货技术文章。

如需学习视频,请在微信搜索公众号“智传网优”直接开始自助视频学习

1. 前言

本文主要讲解Linux acl访问控制权限的原理以及日常使用方法。是Linux系统管理中的一个重要安全工具及策略设置,运维人员必须掌握好。

2. Linux acl权限控制的原理

我们知道 Linux 的权限控制是非常重要的,传统的权限仅有三种身份 (owner, group, others) ,即文件或者目录拥有者权限、拥有者同组成员的权限、其它用户的权限,搭配三种权限 (r,w,x),即可读、可写、可执行而已,这些权限可以通过 chmod、 chown 等命令来修改。然而并没有办法单纯的针对某一个使用者或某一个群组来设置特定的权限需求。此时就得要使用 ACL 这个工具了。

比如有个名为zcwyou的用户,他想要修改 nginx.conf 这个配置文件,然而这个文件是归root 用户所有,这样怎样为单个用户做特定授权呢? 为了解决这种情况,访问控制列表Access Control List(ACL)诞生了。

ACL 是 Access Control List 的缩写,主要的目的是在提供传统的 owner,group,others 的 read,write,execute 权限之外的细部权限设置。ACL 可以针对单一使用者,单一文件或目录来进行 r,w,x 的权限规范,对于需要特殊权限的使用状况非常有帮助。它为文件系统提供了附加的、更具有弹性的权限机制。 它被设计来为补充 UNIX 文件权限机制。 ACL 允许你赋予任何某用户/组访问某项资源的权限。 setfacl 与 getfacl 命令会帮助你管理 ACL 而不会有任何麻烦。

那ACL工具主要支持以下对象设置安全权限:

使用者 (user):可以针对使用者来设置权限;

群组 (group):针对群组为对象来设置其权限;

默认属性 (mask):还可以针对在该目录下在创建新文件/目录时,规范新数据的默认权限;

也就是说,如果你有一个目录,需要给一堆人使用,每个人或每个群组所需要的权限并不相同时,在过去,传统的 Linux 三种身份的三种权限是无法达到的, 因为基本上,传统的 Linux 权限只能针对一个用户、一个群组及非此群组的其他人设置权限而已,无法针对单一用户或个人来设计权限。 而 ACL 就是为了要改变这个问题啊!好了,稍微了解之后,再来看看如何让你的文件系统可以支持 ACL 吧!

3. Linux acl权限控制的工具集

查看Linux acl权限工具是否有安装,一般情况下,系统都是默认安装的。

[root@zcwyou ~]# rpm -qa |grep acl

查看linux acl工具包

如果没有安装,使用以下命令安装它:

[root@zcwyou ~]# yum -y install acl
  • setfacl用于设置文件和目录的 ACL。
  • getfacl - 获取文件的 ACL 。对于每个文件, getfacl 都会显示文件名、文件所有者、所属组以及ACL。 如果目录有默认 ACL, getfacl 也会显示这个默认的 ACL。

4. Linux acl权限控制工具的使用

运行 tune2fs 命令来检查是否启用了 ACL。

[root@zcwyou ~]# tune2fs -l /dev/sdb1 | grep options

显示如下

Default mount options: (none)

上面的输出很明显第说明 /dev/sdb1 分区没有启用 ACL。

如果结果中没有列出 acl,则你需要在挂载选项中加上 acl。 为了让它永久生效, 修改 /etc/fstab 中 /app 这一行成这样:

[root@zcwyou ~]# vi /etc/fstab

开机默认为分区开启linux acl

修改为以下这行,

/dev/sdb1 /app ext4 defaults,acl 1 1

当然,你也可以使用下面命令将其添加道文件系统的超级块中:

[root@zcwyou ~]# tune2fs -o +acl /dev/sdb1

然后,通过运行以下命令来动态修改选项:

[root@zcwyou ~]# mount -o remount,acl /app

再次运行tune2fs看看是否开启了acl

[root@zcwyou ~]# tune2fs -l /dev/sdb1 | grep options

输出。

Default mount options: acl

CentOS 7默认已经启用acl,可以直接使用。

5. 如何查看默认acl的设置

[root@zcwyou ~]# getfacl /etc/passwd

getfacl: Removing leading '/' from absolute path names

file: etc/passwd

owner: root

group: root

user::rw-

group::r--

other::r--

查看默认acl的设置

6. 如何为文件设置acl属性

以下面格式运行 setfacl 命令可以为指定文件设置 ACL。在下面的例子中,我们会给 zcwyou用户对 /etc/samba/smb.conf文件 rwx 的权限。

[root@zcwyou ~]# setfacl -m u:zcwyou:rwx /etc/samba/smb.conf

为文件设置acl属性

setfacl命令部分参数

-m: 修改文件的当前 ACL

u: 指明用户

magi: 用户名

rwx: 要设置的权限

/etc/samba/smb.conf: 指定的文件或者目录

通过ls命令也可以查看这个文件的特殊权限,注意一下图中的+号。

查看文件acl属性

7. 如何为目录设置acl属性

以下面格式运行 setfacl 命令可以递归地为指定目录设置 ACL。在下面的例子中,我们会将 /etc/samba/ 目录中的 rwx 权限赋予zcwyou用户。

首先先查看当前情况,如下图

为目录设置acl属性

可以看到上图中,只有smb.conf一个文件有+号。

执行以下命令:

[root@zcwyou ~]# setfacl -Rm u:zcwyou:rwx /etc/samba/

-R: 表示把设置递归到子目录中

再次检查:

检查目录acl属性

可以看出,所有文件都被设置了acl权限。

使用getacl查看目录

[root@zcwyou ~]# getfacl /etc/samba/

getfacl: Removing leading '/' from absolute path names

file: etc/samba/

owner: root

group: root

user::rwx

user:zcwyou:rwx

group::r-x

mask::rwx

other::r-x

使用getacl命令检查目录acl属性

8. 为组用户设置acl

以下面格式为指定文件运行 setfacl 命令。在下面的例子中,我们会给 zcwyou组赋予 /etc/samba/smb.conf 文件的 rwx 权限。

[root@zcwyou ~]# setfacl -m g:zcwyou:rwx /etc/samba/smb.conf

为组用户设置acl属性

g: 表示为一个组设置acl属性

如果对多个用户和组授权,只需要用 逗号 区分开,就像下面这样。

[root@zcwyou ~]# setfacl -m u:user1:rwx,g:group2:rwx /etc/samba/smb.conf

9. 删除acl

以下面格式运行 setfacl 命令会删除文件对指定用户的 ACL。这只会删除用户权限而保留 mask 的值为只读。

[root@zcwyou ~]# setfacl -x u:magi /etc/samba/smb.conf

选项-x: 表示从文件的 ACL 中删除acl属性

使用 选项-b 来删除文件中所有的 ACL,例如:

[root@zcwyou ~]# setfacl -b /etc/samba/smb.conf

选项-b: 表示删除所有的 ACL 条目所有的属性

再次查看删掉后的 ACl 值就会发现所有的东西都不见了,包括 mask 的值也不见了。

10. acl最大权限mask

10.1 最大有效权限mask

mask是用来指定最大有效权限的(使用命令getfacl 文件名显示的结果中倒数第二排会出现mask这个词)。如果给用户赋予了acl权限,是需要和mask的权限“相与”才能得到用户的真正权限。相与是计算机中的术语,皆真方为真,有假便为假。例如mask权限为rwx,某用户的acl权限为r-x,则实际有效权限为r-x。

最大权限也会影响到组权限(例:某文件所有者为tony,chmod赋予的普通权限为7,而acl赋予tony的权限为5,则acl权限会高于chmod权限)

修改最大有效权限mask

修改mask的命令

setfacl -m m:权限 文件

11. 对acl的属性进行备份和恢复

运行以下命令备份和还原 ACL 的值。要制作备份, 需要进入对应的目录然后这样做(假设我们要备份 sites-available 目录中的 ACL 值)。

[root@zcwyou ~]# cd /etc/apache2/sites-available/
[root@zcwyou ~]# getfacl -R * > acl_backup_for_folder

运行下面命令进行还原acl属性设置

[root@zcwyou ~]# setfacl --restore=/etc/apache2/sites-available/acl_backup_for_folder

12. 总结

Linux的ACL机制是对传统的用户、组、其他用户权限安全机制的补充,结合传统的权限机制,将极为灵活地根据特定用户为Linux系统的文件或者目录设置特定权限。它是Linux系统工程师必须掌握的系统工具。

本文已同步至博客站,尊重原创,转载时请在正文中附带以下链接:

https://www.linuxrumen.com/rmxx/649.html

点击了解更多,快速查看更多的技术文章列表。

文章来源: https://twgreatdaily.com/zh-hans/NeZlQ2wB8g2yegNDESV3.html