
У меня есть пользователь myuser, которому разрешено подключаться к ssh только через sftp. Я бы хотел, чтобы этот пользователь всегда создавал файлы с правами rwx-rwx-rx и всегда принадлежал группе apache. Я пытался выполнить часть прав доступа к файлам с помощью umask, но в umask файлы и каталоги получают разные права доступа для одного и того же umask. Помощь приветствуется.
решение1
Фон
Это вечная проблема sftp
и совместного использования файлов. Это происходит из-за того, что результирующие разрешения основаны на исходном разрешении файла на стороне пользователя, а -u
аргумент umask() не принудительно устанавливает такие разрешения, а только удаляет нежелательные разрешения. Это означает, что только если пользователь пытается загрузить файл с разрешением 0777
, оно применяется и удаляется до 0775
. В противном случае он просто остается таким, каким был. Например, если у пользователя есть файл, сохраненный в его файловой системе с разрешением 0700
, он также появится после загрузки как 0700
.
Решение
Недавно мы решили эту проблему в Fedora, применив патч, который принудительно устанавливает точное разрешение для новых загружаемых файлов с помощью -m
switch to sftp-server
. Он основан на этой ошибке upstrem:
https://bugzilla.mindrot.org/show_bug.cgi?id=1844
Это доступно в текущемCentOS 7.2. Из журнала изменений:
- Add sftp option to force mode of created files (#1197989)
Обходной путь
Нет другого элегантного решения, кроме какого-то периодического запуска скрипта (из cron
), который исправляет неправильные разрешения. Это была бы какая-то однострочная команда в bash, но я думаю, вы можете придумать что-то еще. Я могу рассказать об этом подробнее, если вам интересно.
Или вы можете использовать inotify
, чтобы «перехватить» изменения раньше.
Группа должна быть унаследована от родительского каталога, не так ли?