我们的 beegfs 存储系统上有一个配额管理系统,可以跟踪文件夹的组使用情况。
本次测试中,配额由“fordemx-home”组进行管理,测试文件夹设置如下:
$ mkdir acl_test
$ sudo chown -R fordemx:fordemx-home acl_test
$ sudo chmod 0770 acl_test/
$ sudo chmod g+s acl_test
$ sudo chmod u+s acl_test
$ sudo setfacl -Rdm u:fordemx:rwx acl_test
$ sudo setfacl -Rdm g:fordemx-home:rwx acl_test
$ sudo setfacl -Rdm o::- acl_test
$ getfacl acl_test/
# file: acl_test/
# owner: fordemx
# group: fordemx-home
# flags: ss-
user::rwx
group::rwx
other::---
default:user::rwx
default:user:fordemx:rwx
default:group::rwx
default:group:fordemx-home:rwx
default:mask::rwx
default:other::---
因此,用户和组都是粘性的,并且父级和子级的默认用户和组都被分配。在创建文件/文件夹时,用户、组和默认 ACL 会被正确继承,并适当影响配额利用率。在以下示例中,我们创建两个虚拟文件,删除 1 个,并在每个步骤之间检查配额利用率:
$ cd acl_test
$ dd if=/dev/urandom of=sample1.txt bs=64M count=16
$ dd if=/dev/urandom of=sample2.txt bs=64M count=16
$ ll
total 1048577
drwsrws---+ 2 fordemx fordemx-home 2 Apr 16 13:09 ./
drwxr-s--- 17 fordemx fordemx-home 27 Apr 16 12:53 ../
-rw-rw----+ 1 fordemx fordemx-home 536870896 Apr 16 13:09 sample1.txt
-rw-rw----+ 1 fordemx fordemx-home 536870896 Apr 16 13:10 sample2.txt
$ beegfs-ctl --getquota --gid fordemx-home
Quota information for storage pool Default (ID: 1):
user/group || size || chunk files
name | id || used | hard || used | hard
--------------|------||------------|------------||---------|---------
fordemx-home| 2036|| 1.89 GiB| 1024.00 GiB|| 16251|unlimited
$ rm -rf sample1.txt
$ beegfs-ctl --getquota --gid fordemx-home
Quota information for storage pool Default (ID: 1):
user/group || size || chunk files
name | id || used | hard || used | hard
--------------|------||------------|------------||---------|---------
fordemx-home| 2036|| 1.39 GiB| 1024.00 GiB|| 16247|unlimited
到目前为止,一切都按预期运行。但是,由于用户拥有这些文件,他们应该能够更改文件的组,从而阻止文件在组配额内被跟踪
$ chown fordemx:fordemx sample2.txt
$ beegfs-ctl --getquota --gid fordemx-home
Quota information for storage pool Default (ID: 1):
user/group || size || chunk files
name | id || used | hard || used | hard
--------------|------||------------|------------||---------|---------
fordemx-home| 2036|| 911.07 MiB| 1024.00 GiB|| 16243|unlimited
这不是我们所希望的,因为用户可以简单地绕过我们的配额限制。奇怪的是,sample2.txt 的 ACL 仍然显示 ACL 定义的组为“fordemx-home”
$ getfacl sample2.txt
# file: sample2.txt
# owner: fordemx
# group: fordemx
user::rw-
user:fordemx:rwx
group::rwx
group:fordemx-home:rwx # <----- shouldn't quota still be managed under fordemx-home
mask::rw-
other::---
有没有办法可以限制用户更改此目录及其子目录中文件的 Linux 组权限?欢迎提供任何其他帮助或建议?
答案1
有点黑客风格,可能会破坏一些东西。但你知道,没有付出就没有收获。决定将 chgrp 和 chown 的权限更改为仅限 root。这似乎是阻止用户推卸责任的唯一方法。