我在Linux机器上有一个目录(即data),它由一个用户(即userone)和一个组(即groupone)拥有,并拥有setgid为775的权限。现在,每当 userone 创建新目录时,它都不会继承组的权限。我希望每当 userone 创建任何新目录时都继承组的权限。我怎样才能做到这一点?
现在,每当 userone 创建目录时,它就会失去组用户的写入权限。
0 drwxr-sr-x. 2 userone groupone 6 Dec 8 02:49 tests
答案1
那么,您的意思是您希望在该目录中创建的文件/目录继承父目录的权限?
为此,您需要使用默认 ACL (acl(5)
):
如果默认 ACL 与目录关联,则创建文件对象的函数的模式参数和目录的默认 ACL 用于确定新对象的 ACL:
- 新对象继承包含目录的默认 ACL 作为其访问 ACL。
所以,与setfacl(1)
,该-d
标志告诉它修改默认 ACL:
$ ls -ld data
drwxrwsr-x+ 2 userone groupone 4096 Dec 8 18:36 data/
$ setfacl -d -m u::rwx,g::rwx,o::r-x data
$ getfacl data
# file: data
# owner: userone
# group: groupone
# flags: -s-
user::rwx
group::rwx
other::r-x
default:user::rwx
default:group::rwx
default:other::r-x
设置完成后,在目录中创建的新文件或目录将从默认 ACL 获取其权限。这会覆盖umask
创建文件的进程的模式,但不会覆盖指定给open()
/ mkdir()
/etc 的文件模式。系统调用。
$ mkdir data/test
$ ls -ld data/test
drwxrwsr-x+ 2 userone groupone 4096 Dec 8 18:38 data/test/
您可能需要在挂载时使用挂载选项在文件系统上启用 ACL acl
。
答案2
在挂载时设置 ACL 是通过该挂载的 /etc/fstab 行完成的。有关更多详细信息,请参阅 man fstab,它位于第四个参数中。可能的值取决于文件系统,您可以在 man mount 中找到该文件系统。对于 ext2/3/4,添加的选项只是 acl 或 noacl。 (以上应该是评论,但我不能发表评论)。