这篇文章上次修改于 625 天前,可能其部分内容已经发生变化,如有疑问可询问作者。

最近写猪比的云端GOCQ遇到了一个权限问题:

  • 我需要gocq用户对于/www/wwwroot/qb.xzynb.top/gocq目录及子目录下的文件拥有rwx权限
  • 而对于其他目录均只有--x权限

很显然,普通的权限控制已经不能满足这个需求,那么这个时候就要使用我们的ACL

ACL是什么

ACL是Access Control List(访问控制列表)的缩写,不过在Linux系统中,ACL用于设定用户针对文件的权限,而不是在交换路由器中用来控制数据访问的功能(类似于防火墙)。

如何开启ACL

查看是否开启:

[root@localhost ~]# mount
/dev/sda1 on /boot type ext4 (rw)
/dev/sda3 on I type ext4 (rw)
…省略部分输出…
#使用mount命令可以看到系统中已经挂载的分区,但是并没有看到ACL权限的设置
[root@localhost ~]# dumpe2fs -h /dev/sda3
#dumpe2fs是查询指定分区文件系统详细信息的命令
…省略部分输出…
Default mount options: user_xattr acl
…省略部分输出…

开启:

[root@localhost ~]# mount -o remount, acl /
#重新挂载根分区,并加入ACL权限
#使用 mount 命令重新挂载,并加入 ACL 权限。不过使用此命令是临时生效的。要想永久生效,需要修改 /etc/fstab 文件,命令如下:
[root@localhost ~]#vi /etc/fstab
UUID=c2ca6f57-b15c-43ea-bca0-f239083d8bd2 /ext4 defaults, acl 1 1
#加入ACL权限
[root@localhost ~]# mount -o remount /
#重新挂载文件系统或重启系统,使修改生效

ACL查看

使用getfacl <文件名>指令可以查看ACL,这里不过多赘述

设置ACL

使用setfacl可以设置ACL
选项:

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