问题
我知道在设置了 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
目录,以便为移动的文件自动更改组?实现这一目标的最佳实践是什么?
setgid 确实会影响新创建的文件(使用
touch
,cp
),但不会影响已经创建的文件(使用mv
)。有几种解决方案,例如此处发布的解决方案。此外,您可以定期添加一个 cron 作业来定期添加
chgrp
共享文件夹下的所有文件/文件夹。另一种可能的解决方案是
incrontab -e
在将文件移动到共享文件夹时修复组所有权。请注意,这只会触发共享文件夹本身的事件,而不是任何其他子文件夹。