Назад | Перейти на главную страницу

Как указать права доступа к файлу при помещении файла с помощью команды OpenSSH sftp

Я использую различные клиенты 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:

Я считаю, что sftp-сервер будет использовать umask профиля пользователя по умолчанию, если он не был запущен с явным umask (man 8 sftp-server для подробностей).