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


23

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

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

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

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

Ответы:


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.

это мило!! Я посмотрю как можно скорее и
сообщу

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 г.) это работает отлично!


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

2

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

ForceCommand internal-sftp -u 0022   

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 или пользовательских патчей.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.