Назад | Перейти на главную страницу

Как файл, перемещенный в каталог с установленным битом GID, может наследовать владение группой

Проблема

Я знаю, что файл, созданный в каталоге с установленным битом 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

и файл в личной папке.

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 чтобы исправить групповое владение при перемещении файла в вашу общую папку. Будьте осторожны, это вызывает события только для самой общей папки, а не для других подпапок.

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