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 # установленный umask 007, соответствующий 0660 для файлов и 0770 для каталогов ForceCommand internal-sftp -u 0007 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-папки можно задать любую.
Расшифровка параметров sshd_config
- Match User позволяет серверу SSH применять следующие команды только к указанному пользователю
- ForceCommand internal-sftp:сервер SSH будет запускать SFTP во время логина без доступа к оболочке.
- PasswordAuthentication yes включает поддержку парольной аутентификации.
- ChrootDirectory %h блокирует пользователю доступ ко всем каталогам, кроме домашней директории пользователя.
- AllowAgentForwarding no, AllowTcpForwarding no и X11Forwarding no отключают форвардинг, туннелирование и X11 для указанного пользователя.
SFTP доступ
Для каждого сайта создадим системного пользователя ftpjoo для доступа по протоколу SFTP с группой www-data, от которой работает Apache.
useradd -d /var/www/mysite.com -s /bin/false -g www-data ftpjoo
В самый конец файла sshd_config напишем:
Match Group www-data ChrootDirectory %h ForceCommand internal-sftp -u 0007 AllowTcpForwarding no X11Forwarding no
Зададим права для директорий, выполнив файл
- permission_commands
#!/bin/bash find /var/www/mysite.com -type f -exec chmod 660 {} \; find /var/www/mysite.com -type d -exec chmod 770 {} \; chown -R ftpjoo:www-data /var/www/mysite.com; chmod 755 /var/www/mysite.com; chown root:root /var/www/mysite.com;
Клиент 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
- В первой форме 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 читается со стандартного потока ввода.
Крупнейшая в Европе школа английского языка
Промокоды, акции и подарки, чтобы Ваше обучение было не только интересным, но и выгодным. Закажите пробный урок уже сейчас!
skyeng.ru
Онлайн школа английского языка
Английский по скайпу от 680р за урок, без заучивания правил. Эффективно! Удобно! Выгодно! Начните обучение прямо сейчас.
melene.ru
Школа английского языка по Skype
Персональные занятия по разумным ценам. Бесплатные ресурсы для студентов: разговорные клубы, блог, вебинары, книги, тест на определение уровня английского. Пробный урок бесплатно!
englex.ru