Я использую различные клиенты SFTP для загрузки файлов на сервер SFTP, и у меня проблема с разрешением по умолчанию, используемым при размещении файлов.
При запросе на размещение файла SFTP-клиент, такой как WinSCP или Filezilla, отправит команду SSH_OPEN без запроса какого-либо явного разрешения файла.
С другой стороны, похоже, что команда OpenSSH sftp в Linux (Red Hat и Ubuntu) ожидает выполнения команды SSH_OPEN вместе с режимом «640».
Как я могу настроить команду OpenSSH, чтобы не устанавливать явно файловый режим или как я могу настроить ее для отправки режима, отличного от 640?
Большое спасибо!
Обновить:
Я проверил исходный код клиента OpenSSH sftp, и похоже, что OpenSSH sftp всегда пытается сохранить файловый режим, даже если -P не установлен: http://www.koders.com/c/fidD3B20680F615B33ACCB42398FAAFEE1C007DF942.aspx?s=rsa#L986
Для решения этой проблемы я использовал SFTP-клиент Putty.
Сервер sftp создаст новый файл с umask пользователя по умолчанию. Это можно изменить с помощью -u umask
опция к sftp-серверу
SFTP-SERVER(8)
-u umask
Sets an explicit umask(2) to be applied to newly-created files
and directories, instead of the user's default mask.
Клиент (OpenSSH sftp) может выбрать сохранение локального разрешения с помощью -p
опция, которая отправит файл, а затем fchmod его соответствующим образом.
SFTP(1)
-p Preserves modification times, access times, and modes from the
original files transferred.
Если вы строго спрашиваете, как установить обязательный файловый режим с помощью клиента sftp; вы не можете (по крайней мере, с openssh sftp-client). Вам нужно будет отправить chmod после отправки файла.
Если SFTP-клиент не указывает разрешения для загруженных файлов, SFTP-сервер OpenSSH назначает разрешения 0664 для вновь созданных файлов. Это для маски umask 0002 по умолчанию, которую вы можете изменить с помощью -u
переключатель, как показывает ответ @JimB.
Если клиент SFTP указывает разрешения, сервер OpenSSH использует указанные разрешения (маска umask не применяется).
Обзор некоторых популярных клиентов SFTP:
PSFTP: не позволяет устанавливать разрешения для загружаемых файлов. (Но версия Unix сохраняет файлы исходного локального файла)
OpenSSH sftp
: Не позволяет устанавливать разрешения для загружаемых файлов. Сохраняет файлы исходного локального файла. Подробнее о -P
переключатель, см Использует ли SFTP-сервер OpenSSH umask или сохраняет ли разрешения на стороне клиента после команды put (chrooted среда)?
WinSCP: вы можете установить разрешения для загруженных файлов
Видеть https://winscp.net/eng/docs/ui_transfer_custom
(Я автор WinSCP)
FileZilla: не позволяет устанавливать разрешения для загружаемых файлов. Применяется сервер по умолчанию (umask).
Я считаю, что sftp-сервер будет использовать umask профиля пользователя по умолчанию, если он не был запущен с явным umask (man 8 sftp-server для подробностей).