移动到具有 GID 位设置的目录的文件如何继承组所有权

移动到具有 GID 位设置的目录的文件如何继承组所有权

问题

我知道在设置了 GID 位的目录中创建的文件将继承该目录的组所有权。但是,这不适用于移动到该目录的文件,如https://en.wikipedia.org/wiki/Setuid#setuid_and_setgid_on_directories

有时用户会将文件移动到共享文件夹而不是复制文件或创建新文件,因此共享文件夹中的文件并不是所有人都可以访问的。

例子:

有一个 shread 文件夹

john:/home/common$ ls -l
drwxrws--- 15 john users 4096 Feb 11 09:14 shared

以及私人文件夹中的文件。

john:/home/john$ ls -l
-rw-rw---- 1 john john 512 Feb 11 09:14 test.txt

该文件已移动到共享文件夹。它保留了群组所有权。

john:/home/common/shared$ mv /home/john/test.txt .
john:/home/common/shared$ ls -l
-rw-rw---- 1 john john 512 Feb 11 09:14 test.txt

当文件已移动shared,则组保持不变john,不会更改为users。如果文件复制,该群组更改为users

我的问题

尽管从系统角度来看这种行为是合乎逻辑的,但从用户角度来看这并不是所期望的。

有没有办法配置shared目录,以便移动文件的组也会自动更改?实现这一目标的最佳做法是什么?

答案1

setgid 确实会影响新创建的文件(使用touchcp),但它不会影响已经创建的文件(使用mv)。

有几种解决方案,例如发布在这里。此外,您还可以添加一个 cron 作业来定期运行chgrp共享文件夹下的所有文件/文件夹。

另一个可能的解决方案是incrontab -e当文件移动到共享文件夹时修复组所有权。请注意,这只会触发共享文件夹本身的事件,而不会触发任何其他子文件夹的事件。

/path/to/shared/dir IN_MOVED_TO /bin/chgrp users $@/$#

相关内容