hostprofi.ru
Подобрать хостинг
Термин·буква S

SFTP

краткое определение

SFTP (SSH File Transfer Protocol) — безопасный протокол передачи файлов, работающий поверх SSH-соединения. Заменил устаревший FTP, шифрует весь трафик и аутентификационные данные.

SFTP (SSH File Transfer Protocol) — протокол безопасной передачи файлов, работающий поверх SSH. Несмотря на схожесть с FTP в названии, SFTP — отдельный протокол, не связанный с FTP технически. Все данные, включая имена файлов, содержимое и команды, передаются в зашифрованном SSH-туннеле. Стандартный порт — 22 (тот же, что у SSH).

Как работает SFTP

SFTP — подсистема SSH, запускаемая сервером при подключении клиента: ssh user@server -s sftp. Клиент отправляет бинарные команды (SSH_FXP_OPEN, SSH_FXP_READ, SSH_FXP_WRITE), сервер отвечает через тот же шифрованный канал. Не нужен отдельный порт для данных — это упрощает прохождение через файрвол по сравнению с FTP active/passive mode.

SFTP vs FTP vs FTPS vs SCP

ПараметрSFTPFTPFTPSSCP
ШифрованиеSSHНетTLSSSH
Порт данныхОдин (22)20+21 или random21+random22
Файловые операцииПолные (mv, rm, mkdir)ПолныеПолныеТолько копирование
Прокси/NATПростоСложноСложноПросто

Настройка SFTP на сервере

SFTP включён по умолчанию в OpenSSH. Для ограниченного SFTP-доступа (только файлы, без shell) в /etc/ssh/sshd_config:

Match User ftpuser
  ForceCommand internal-sftp
  PasswordAuthentication yes
  ChrootDirectory /var/www/sites/%u
  AllowTcpForwarding no
  X11Forwarding no

ChrootDirectory ограничивает пользователя указанной директорией — он не видит остальную файловую систему. Важно: директория chroot должна принадлежать root (не пользователю).

История

SFTP разработан командой SSH Communications Security как часть SSH-2 протокола в 1997–1999 годах. Стандартизирован IETF как SSH File Transfer Protocol (draft-ietf-secsh-filexfer). Версии: SFTP v3 (наиболее распространённая) — OpenSSH, версии 4–6 расширяют возможности. OpenSSH — наиболее распространённая реализация, предустановлена на большинстве Linux-дистрибутивов.

Клиенты SFTP

Графические: FileZilla (кросс-платформенный, бесплатный), WinSCP (Windows), Cyberduck (macOS/Windows). CLI: sftp user@server (встроен в OpenSSH), RSYNC через SSH (rsync -avz -e ssh). Программные библиотеки: paramiko (Python), JSCH (Java), libssh2 (C). На хостинге SFTP-доступ предоставляется почти везде — в отличие от SSH, который на shared-хостинге часто отсутствует.

История SFTP

SFTP разработан как расширение протокола SSH 2.0 в конце 1990-х годов. Первоначально описан в Internet Draft IETF (draft-ietf-secsh-filexfer) в 1998–2006 годах; официальный RFC так и не был опубликован, но SFTP версии 3 (OpenSSH) стал де-факто стандартом. OpenSSH включает SFTP-сервер (sftp-server) начиная с версии 2.5.0 (2001). До SFTP безопасная передача файлов требовала SCP (Secure Copy, 1995) или FTP поверх SSH-туннеля.

SFTP vs SCP vs FTP vs FTPS

ПротоколШифрованиеВозобновлениеУправление файламиПорт
SFTPSSH (полное)ДаПолное (mkdir, rm, chmod)22
SCPSSH (полное)НетТолько копирование22
FTPНетДа (RETR REST)Полное21
FTPSTLS/SSLДаПолное21/990

На что обращать внимание

SFTP работает на стандартном порту 22 SSH. Для чруt-изоляции SFTP-пользователей (ограничение домашней директорией без доступа к системе) настройте в /etc/ssh/sshd_config:

Match Group sftponly
  ChrootDirectory /var/www/%u
  ForceCommand internal-sftp
  X11Forwarding no
  AllowTcpForwarding no

Это позволяет веб-разработчикам загружать файлы через SFTP без доступа к командной строке сервера. SFTP-клиенты: FileZilla, WinSCP, Cyberduck. Программные клиенты: paramiko (Python), JSch (Java), Net::SFTP (Perl).

Другие термины