这篇文章上次修改于 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.
没有评论