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

Как я могу настроить каталог файловой системы, чтобы * всегда * была доступна запись для группы?

У меня есть файловый сервер Linux с некоторыми общими каталогами. К этим каталогам иногда обращаются через SFTP, а иногда и пользователи с оболочками. Независимо от того, как осуществляется доступ к этим каталогам, я хотел бы убедиться, что:

  1. все файлы в общем каталоге всегда доступны для чтения и записи всем пользователям в группе «файловый сервер» (моральный эквивалент g+rw)
  2. все каталоги в общем каталоге всегда доступный для всех пользователей в группе "файловый сервер" (моральный эквивалент g+x)
  3. все файлы в общем каталоге никогда исполняемый кем угодно (моральный эквивалент g-x)

Я смутно помню, что делал это раньше с setfacl но я не знаю как.

Самое близкое, что я пришел сюда, это:

$ chown fileserver:fileserver . -R
$ find . -type f -print -exec chmod a-x '{}' ';'
$ find . -type d -print -exec chmod u+x '{}' ';'
$ find . -type d -print -exec chmod g+xs '{}' ';'
$ cat facls
user::rwx
group::rwx
other::r-x
default:user::rwx
default:user:fileserver:rwx
default:group::rwx
default:group:fileserver:rwx
default:mask::rwx
default:other::r-x
$ setfacl -M facls -R .

и, похоже, он поступает правильно в отношении случайно слишком строгих umasks для процессов, записывающих в этот каталог, но он все же дает пользователям возможность chmod файлы, которые они создали, и тем самым ограничивают их права доступа.

Ключевая проблема этого решения заключается в том, что файлы по-прежнему принадлежат тому, кто их создал, а владелец файла имеет безотзывное разрешение на изменение разрешений. В системах, основанных на BSD, кажется, вы можете исправить это с помощью setuid каталог (что приводит к тому, что все файлы, созданные в этом каталоге, принадлежат владельцу каталога); однако Linux имеет такое поведение только для setgid.