我想创建一个共享目录,以便多个用户(所有用户都属于 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