Различия

Показаны различия между двумя версиями страницы.


Предыдущая версия
sftp [2025/07/06 12:39] (текущий) – внешнее изменение 127.0.0.1
Строка 1: Строка 1:
 +====== SFTP ======
  
 +~~Title: SSH File Transfer Protocol (SFTP) настройка под хостинг Apache ~~
 +{{htmlmetatags>
 +metatag-keywords=(SFTP)
 +metatag-description=(SFTP (SSH File Transfer Protocol) заменяет FTP на хостингах как более безопасный протокол.)
 +}}
 +
 +{{ ::sftp-01.png?nolink&200 |}}
 +
 +
 +**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.
 +
 +Читайте также: [[montirovanie_udaljonnoj_papki#kak_primontirovat_papku_po_sftp_sshfs|Как примонтировать папку по sftp]]
 +
 +===== Настройка сервера SFTP  =====
 +
 +**Сервер SFTP** встроен в OpenSSH. Он реализуется с помощью программы sftp-server. Для того чтобы включить sftp-server в sshd, необходимо указать его в конфигурационном файле sshd_config в качестве подсистемы:
 +<file bash>
 +Subsystem sftp /usr/lib/openssh/sftp-server
 +</file>
 +Как правило, это строка уже указана в конфигурационном файле sshd по умолчанию, так что SFTP работает сразу и не требует никаких дополнительных действий для включения.
 +
 +**Настройка ChrootDirectory в SFTP**
 +
 +  * Для начала, создадим группу sftpusers. Настроим ChrootDirectory только для пользователей входящих в эту группу:<file bash>
 +addgroup --system sftpusers
 +</file>
 +  * Далее заменим подсистему sftp в /etc/ssh/sshd_config:<file bash>
 +#Subsystem sftp /usr/lib/openssh/sftp-server
 +Subsystem sftp internal-sftp
 +</file>
 +  * Напишем нужные нам ограничения в самый конец файла sshd_config<file bash>
 +Match Group sftpusers
 +   ChrootDirectory %h
 +#   ChrootDirectory /home
 +   ForceCommand internal-sftp
 +# установленный umask 007, соответствующий 0660 для файлов и 0770 для каталогов
 +   ForceCommand internal-sftp -u 0007
 +   AllowTcpForwarding no
 +   X11Forwarding no
 +</file>
 +<note tip>Для Apache, если вы меняли umask для SFTP, также его нужно изменить. Делается это путём добавления в /etc/apache2/envvars строчки: umask 007</note>
 +
 +
 +  * При создании пользователя не надо указывать ему [[shell]], так как он все равно не сможет им воспользоваться (Опция "ForceCommand internal-sftp" разрешает пользователю использовать только sftp, встроенный в sshd). Поэтому указываем в качестве шелла /bin/false. Домашняя папка (точнее папка, которую мы указали в ChrootDirectory) обязательно должна иметь владельцем пользователя root. Иначе будем получать ошибку:<file bash>
 +fatal: bad ownership or modes for chroot directory "/home/%username%"
 +</file>А вот группу-владельца 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. 
 +<file bash>
 +useradd -d /var/www/mysite.com -s /bin/false -g www-data ftpjoo
 +</file>
 +
 +В самый конец файла sshd_config напишем:
 +<file bash>
 +Match Group www-data
 +   ChrootDirectory %h
 +   ForceCommand internal-sftp -u 0007
 +   AllowTcpForwarding no
 +   X11Forwarding no
 +</file>
 +Зададим права для директорий, выполнив файл<file bash 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;
 +</file>
 +====== Клиент sftp ======
 +
 +Форма вызова команды:
 +<file>
 +    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
 +</file>
 +<note>Ключ -r для рекурсии.</note>
 +  * В первой форме sftp подключается к удалённому серверу SFTP хост и переходит в интерактивный режим работы.
 +  * Во втором случае sftp скачивает файл1 с сервера и записывает его в текущий каталог с под именем файл1 (или файл2, если это имя указано). Например, скачать файл mytestfile.sql:<file>
 +$ sftp user@mb.test.net:/home/backups_mbill_sql/mytestfile.sql
 +</file>Скачать все файлы соответствующие шаблону *.sql<file>
 +$ sftp user@mb.test.net:/home/backups_mbill_sql/*.sql
 +</file>
 +  * Третья форма, также как и первая, переводит sftp в интерактивный режим; с той только разницей, что работа на удалённом сервере начинается с определённого каталога.
 +  * В четвёртой форме после подключения к серверу выполняется batchfile, содержащий команды sftp. В качестве имени файла может быть указан символ -, в этом случае batchfile читается со стандартного потока ввода.
 +
 +<panel type="primary" title="Читайте также">
 +  * [[Правила iptables для FTP]]
 +  * [[proftpd#nastrojka_proftpd_dlja_ispolzovanija_sftp|Настройка ProFTPd для использования SFTP]]
 +</panel>

📌 Удобный подбор VPS по параметрам доступен на DIEGfinder.com - официальном инструменте проекта DIEG. Это часть единой экосистемы, созданной для того, чтобы помочь быстро найти подходящий VPS/VDS сервер для любых задач хостинга.

📌 Для тестирования скриптов, установщиков VPN и Python-ботов рекомендуем использовать надежные VPS на короткий срок. Подробнее о быстрой аренде VPS для экспериментов - читайте здесь.

💥 Подпишись в Телеграм 💥 и задай вопрос по сайтам и хостингам бесплатно!