У меня есть файловый сервер Linux с некоторыми общими каталогами. К этим каталогам иногда обращаются через SFTP, а иногда и пользователи с оболочками. Независимо от того, как осуществляется доступ к этим каталогам, я хотел бы убедиться, что:
g+rw
)g+x
)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
.