Как поставить желаемый umask с SFTP?

23

У меня есть SFTP-сервер (openssh / sftp-сервер), и я хотел бы установить umask 002 для пользователей, использующих этот сервис. Я попытался установить PAM (pam.d / common-session) и .profile для каждого пользователя, но не повезло.

С SSH логином все нормально, но когда я пытаюсь с SFTP (с gFTP), у меня установлен 022 umask.

Я уже пытался использовать оболочку для sftp-сервера, который меняет umask перед вызовом sftp-сервера, не повезло.

Любая помощь? Большое спасибо!

mat_jack1
источник

Ответы:

25

Начиная с OpenSSH 5.4p1, я думаю, вы можете использовать опцию "-u", например:

Subsystem sftp /usr/lib/openssh/sftp-server -u 022

Со страницы руководства:

 -u umask
         Sets an explicit umask(2) to be applied to newly-created files
         and directories, instead of the user's default mask.
Weboide
источник
это мило!! Я посмотрю как можно скорее и
сообщу
5
Для тех, у кого нет опции -u, это работает:Subsystem sftp /bin/sh -c 'umask 0002; /usr/lib/openssh/sftp-server'
Стив Клэй,
1
Хорошее решение Это решает проблему с клиентскими оболочками и приложениями, такими как CyberDuck, которые устанавливают свои разрешения по умолчанию независимо от системного umask. Я нашел полезным убедиться, что каждое клиентское приложение будет устанавливать правильные разрешения, чтобы позволить моим пользователям работать вместе над групповыми файлами. Также может быть полезно добавить, что этот параметр не остановит пользователей от настройки прав доступа к файлам, если они того пожелают.
Герлос
И последнее, что нужно добавить: если вам нужна только функция sftp и вам не нужно предоставлять доступ пользователям к оболочке, вы можете также рассмотреть возможность использования rssh вместо bash для своих оболочек и установки для них значения по умолчанию umask в /etc/rssh.conf , Это может сделать ваш сервер более безопасным
Gerlos
7

Я надеюсь, что это может сэкономить кому-то еще часы разочарования ...

Если вы используете SFTP-приложение с графическим интерфейсом, проверьте его настройки для настройки разрешений при загрузке.

Я перепробовал все решения, описанные выше, и оказалось, что приложение просто переопределяло их.

Малькольм
источник
^^ Да, долгое время я устанавливал umask для соединения sftp, создавая сценарий, похожий на решение Weboide. Недавно я почесал голову, почему это не сработало так, как в прошлом. Похоже, что в какой-то момент обновление моего SFTP-клиента явным образом установило umask после соединения с ssh, так что давайте разберемся.
Джаред Кип
Это не просто графический интерфейс. Даже клиенты. Мне потребовалось слишком много времени, чтобы обнаружить, что загруженный мной тестовый файл имел 0600, который клиент (OpenSSH sftp) скопировал на удаленную сторону.
xebeche
Спасибо! Потратил так много времени на игры с разрешениями ни за что.
Таня Раскиа
2

После многих часов попыток применить различные хаки и исправления я нашел правильное решение!

Есть патч для SSH, который позволяет вам выбрать umask, который вы хотите для SFTP. Вы можете скачать его здесь: http://sftpfilecontrol.sourceforge.net/

Для меня (OpenSSH_5.2p1 + sftpfilecontrol-v1.3, OpenSSL 0.9.8g 19 октября 2007 г.) это работает отлично!

mat_jack1
источник
2
Просто заметьте, что опция '-u' для установки маски доступна в OpenSSH начиная с 5.4p1, смотрите мой ответ ниже.
Weboide
2

В конфигурационном файле ssh вы также можете использовать это для конкретной настройки режима файла (переопределяя любой chmod, который может попытаться установить клиент). Здесь я использую internal-sftp, но я думаю, что это будет то же самое для sftp-сервера:

ForceCommand internal-sftp -u 0022   
cloudranger
источник
0

Цитировать это сообщение :

Я все заработал, добавив строку «umask 007» в /etc/init.d/ssh.

Bash использует .profileдля интерактивного входа в систему оболочки. Я не думаю, что sftpсчитается одним. Возможно, вы сможете установить umask, /etc/bash.bashrcили, ~/.bashrcесли приведенный выше совет не работает, или вам нужен более детальный контроль.

Приостановлено до дальнейшего уведомления.
источник
2
спасибо за ответ, но у меня уже был ssh umask 002 (я пробовал также 0002), и он не работает :( также bashrc не учитывается, как с внешним клиентом SFTP, я не думаю, что используется bash. Если я захожу напрямую через ssh, то все в порядке. Моя проблема только с SFTP-клиентами. Спасибо!
mat_jack1
Ой, ты прав. Я не знаю, почему я думал об участии Баша.
Приостановлено до дальнейшего уведомления.
0

Обратитесь к этому вопросу, чтобы найти простое решение, которое не требует определенных версий openssh или пользовательских патчей.

Unode
источник