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

Jdz*_*Jdz 5 linux directory groups

问题

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

碰巧用户将文件移动到共享文件夹而不是复制它们或创建新文件,现在共享文件夹中的文件并非所有人都可以访问。

例子:

有一个共享文件夹

john:/home/common$ ls -l
drwxrws--- 15 john users 4096 Feb 11 09:14 shared
Run Code Online (Sandbox Code Playgroud)

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

john:/home/john$ ls -l
-rw-rw---- 1 john john 512 Feb 11 09:14 test.txt
Run Code Online (Sandbox Code Playgroud)

该文件被移至共享文件夹。它保留了团体所有权。

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
Run Code Online (Sandbox Code Playgroud)

当文件移动到时shared,该组将保留john并且不会更改为users如果复制文件,组将更改为users.

我的问题

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

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

Kha*_*led 3

setgid 确实会影响新创建的文件(使用touch, cp),并且不会影响已创建的文件(使用mv)。

有几种解决方案,例如此处发布的解决方案。此外,您还可以定期向共享文件夹下的所有文件/文件夹添加 cron 作业chgrp

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

/path/to/shared/dir IN_MOVED_TO /bin/chgrp users $@/$#
Run Code Online (Sandbox Code Playgroud)