问题
我知道在设置了 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 确实会影响新创建的文件(使用touch
、cp
),但它不会影响已经创建的文件(使用mv
)。
有几种解决方案,例如发布在这里。此外,您还可以添加一个 cron 作业来定期运行chgrp
共享文件夹下的所有文件/文件夹。
另一个可能的解决方案是incrontab -e
当文件移动到共享文件夹时修复组所有权。请注意,这只会触发共享文件夹本身的事件,而不会触发任何其他子文件夹的事件。
/path/to/shared/dir IN_MOVED_TO /bin/chgrp users $@/$#