SFTP
SFTP (SSH File Transfer Protocol) — протокол прикладного уровня, предназначенный для копирования и выполнения других операций с файлами поверх Использование ssh, ssh-keygen, sshpass с примерами.
Существует заблуждение, что SFTP это просто обычный Раздел FTP: Протокол FTP, серверы, клиенты FTP для Linux и Windows, работающий поверх Использование ssh, ssh-keygen, sshpass с примерами. В действительности 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
Сервер SFTP встроен в OpenSSH. Он реализуется с помощью программы sftp-server. Для того чтобы включить sftp-server в sshd, необходимо указать его в конфигурационном файле sshd_config в качестве подсистемы:
Subsystem sftp /usr/lib/openssh/sftp-server
Как правило, это строка уже указана в конфигурационном файле sshd по умолчанию, так что SFTP работает сразу и не требует никаких дополнительных действий для включения.
Настройка ChrootDirectory в SFTP
- Для начала, создадим группу 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 читается со стандартного потока ввода.
📌 Для тестирования скриптов, установщиков VPN, Python ботов рекомендуем использовать надежные VPS на короткий срок. Если вам нужна помощь с более сложными задачами, вы можете найти фрилансера, который поможет с настройкой. Узнайте больше о быстрой аренде VPS для экспериментов и о фриланс-бирже для настройки VPS, WordPress. 📌
💥 Подпишись в Телеграм 💥 и задай вопрос по сайтам и хостингам бесплатно!
7 Самых Популярных Статей
- Как запустить скрипты и веб-приложения на Python
- Что такое страны TIER 1,2,3
- 7 способов сравнения файлов по содержимому в Windows или Linux
- Установка и тестирование веб-панели HestiaCP
- Китайский VPN Shadowsocks простая установка и настройка
- top, htop, atop определение загрузки ОС (Load average, LA)
- Использование rsync в примерах