为目录设置特殊权限

为目录设置特殊权限

我在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:

  1. 新对象继承包含目录的默认 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。 (以上应该是评论,但我不能发表评论)。

相关内容