Инструменты пользователя

Инструменты сайта


Боковая панель

Связь

sftp

SFTP

SFTP (SSH File Transfer Protocol) — протокол прикладного уровня, предназначенный для копирования и выполнения других операций с файлами поверх SSH.

Существует заблуждение, что SFTP это просто обычный FTP, работающий поверх SSH. В действительности SFTP — это новый протокол, разработанный с нуля. Иногда его путают с Simple File Transfer Protocol.

Сам по себе протокол SFTP не обеспечивает безопасность работы; это делает нижележащий протокол. Как правило, SFTP используется в сочетании с протоколом SSH2 (он даже был разработан той же рабочей группой). Можно использовать SFTP и с другими протоколами, например SSH1, но это сопряжено с дополнительными трудностями.

Программа sftp использует в качестве транспорта ssh, и Аутентификация на удалённом сервер выполняется средствами ssh. Если есть необходимость вместо ssh использовать другую программу, это можно сделать указав её имя в опции -S sftp.

В качестве SFTP-клиента для Windows может использоваться WinSCP, PSFTP из пакета PuTTY или кросс-платформенный ftp -клиент Filezilla.

Сервер SFTP

Сервер SFTP встроен в OpenSSH. Он реализуется с помощью программы sftp-server. Для того чтобы включить sftp-server в sshd, необходимо указать его в конфигурационном файле sshd_config в качестве подсистемы:

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

Как правило, это строка уже указана в конфигурационном файле sshd по умолчанию, так что SFTP работает сразу и не требует никаких дополнительных действий для включения.

Настройка ChrootDirectory в SFTP для пользователей корпоративного Website Hosting (веб хостинг).

  • Для начала, создадим группу sftpusers. Настроим ChrootDirectory только для пользователей входящих в эту группу:
    addgroup --system sftpusers
  • Далее заменим подсистему sftp в /etc/ssh/sshd_config:
    #Subsystem sftp /usr/lib/openssh/sftp-server
    Subsystem sftp internal-sftp
  • Напишем нужные нам ограничения в самый конец файла sshd_config
    Match Group sftpusers
       ChrootDirectory %h
    #   ChrootDirectory /home
       ForceCommand internal-sftp
    #   ForceCommand internal-sftp -u 0027
       AllowTcpForwarding no
       X11Forwarding no
  • При создании пользователя не надо указывать ему shell, так как он все равно не сможет им воспользоваться (Опция "ForceCommand internal-sftp" разрешает пользователю использовать только sftp, встроенный в sshd). Поэтому указываем в качестве шелла /bin/false. Домашняя папка (точнее папка, которую мы указали в ChrootDirectory) обязательно должна иметь владельцем пользователя root. Иначе будем получать ошибку:
    fatal: bad ownership or modes for chroot directory "/home/%username%"

    А вот группу-владельца chroot-папки можно задать любую.

Клиент sftp

Форма вызова команды:

    sftp [-1Cv] [-B buffer_size] [-b batchfile] [-F ssh_config]
         [-o ssh_option] [-P sftp_server_path] [-R num_requests] [-S program]
         [-s subsystem | sftp_server] хост
    sftp [[user@]host[:файл1 [файл2]]]
    sftp [[user@]host[:dir[/]]]
    sftp -b batchfile [user@]host
Ключ -r для рекурсии.
  • В первой форме sftp подключается к удалённому серверу SFTP хост и переходит в интерактивный режим работы.
  • Во втором случае sftp скачивает файл1 с сервера и записывает его в текущий каталог с под именем файл1 (или файл2, если это имя указано). Например, скачать файл mytestfile.sql:
    $ sftp user@mb.test.net:/home/backups_mbill_sql/mytestfile.sql

    Скачать все файлы соответствующие шаблону *.sql

    $ sftp user@mb.test.net:/home/backups_mbill_sql/*.sql
  • Третья форма, также как и первая, переводит sftp в интерактивный режим; с той только разницей, что работа на удалённом сервере начинается с определённого каталога.
  • В четвёртой форме после подключения к серверу выполняется batchfile, содержащий команды sftp. В качестве имени файла может быть указан символ -, в этом случае batchfile читается со стандартного потока ввода.



sftp.txt · Последние изменения: 2017/01/24 04:32 (внешнее изменение)