确保目录中的新文件属于该组

确保目录中的新文件属于该组

我想创建一个共享目录,以便多个用户(所有用户都属于 mygroup)可以创建和编辑文件。我希望此目录和子目录中的所有文件都属于我的组

我已经将现有文件更改为具有组我的组使用chgrp,但新创建的文件仍属于用户的主要组。有没有办法确保新文件属于该组,而无需反复运行 chgrp。

答案1

您想要设置 SetGID 位。

chmod g+s dir

目录中创建的所有新文件的组都设置为目录的组。

超级用户博客文章解释了粘滞位和其他 Linux 权限位:

然而,SetGID 则完全是另一回事。当目录设置了 SetGID 位并在该目录中创建文件时,文件的组所有权将自动修改为目录的组。

答案2

这可能会让一些人陷入 setgid 困境,如果文件夹的组与您自己的组不同,您可能需要以 root 身份运行 chmod,但您不会收到任何表明您需要执行此操作的错误。

没有 sudo

$ ls -ld dir
drwxrwxr-x 2 luke testgroup 4096 Mar  9 10:44 dir

$ chmod g+s dir                                     # no errors

$ ls -ld dir
drwxrwxr-x 2 luke testgroup 4096 Mar  9 10:44 dir   # but nothing changed

$ touch dir/nosudo && ls -l dir/
-rw-rw-r-- 1 luke luke 0 Mar  9 10:51 nosudo        # and the group is set wrong

使用 sudo

$ sudo chmod g+s dir

$ ls -ld dir
drwxrwsr-x 2 luke testgroup 4096 Mar  9 10:44 dir   # the setgid bit is now on

$ touch dir/withsudo && ls -l dir/
-rw-rw-r-- 1 luke luke      0 Mar  9 10:51 nosudo
-rw-rw-r-- 1 luke testgroup 0 Mar  9 10:51 withsudo # and the group is set right

答案3

设置setgid许可标志在文件夹上。

chmod g+s dirname

相关内容