Открыть сервис

SFTP

SFTP (от англ. SSH File Transfer Protocol) — это сетевой протокол прикладного уровня, предназначенный для передачи, управления и доступа к файлам на удалённом сервере через защищённое соединение. В отличие от FTPS (FTP over SSL/TLS), SFTP работает поверх протокола SSH (Secure Shell), обычно используя порт 22, и не требует отдельного порта для управления и передачи данных. Протокол обеспечивает шифрование как команд, так и передаваемых данных, что делает его одним из стандартных средств для безопасной передачи файлов в корпоративных и серверных средах.

История и разработка

SFTP был разработан в 1997 году как часть протокола SSH-2.0. Изначально он не являлся отдельным протоколом, а был расширением SSH, предложенным рабочей группой IETF (Internet Engineering Task Force). Первая спецификация (draft-ietf-secsh-filexfer) была опубликована в 2000 году, но окончательный стандарт так и не был утверждён. Несмотря на это, SFTP получил широкое распространение, и его реализация стала обязательной в большинстве SSH-клиентов и серверов.

Основные версии протокола:

  • SFTP версия 3 — самая распространённая, поддерживается большинством современных реализаций (OpenSSH, PuTTY, FileZilla).
  • SFTP версии 4–6 — расширенные версии с поддержкой атрибутов файлов (POSIX ACL, расширенные права доступа), но они менее распространены.

В 2006 году IETF прекратила работу над стандартизацией SFTP, сосредоточившись на протоколе SSH. Тем не менее, протокол остаётся де-факто стандартом в Unix-подобных системах и активно используется в Windows через сторонние реализации (например, WinSCP, Bitvise SSH Server).

Архитектура и принцип работы

SFTP работает в рамках сессии SSH, используя её каналы для передачи данных. В отличие от FTP, который использует два отдельных соединения (командное и данных), SFTP использует одно мультиплексированное соединение, что упрощает настройку брандмауэров и NAT.

Основные компоненты:

  • SSH-сервер (например, OpenSSH) — принимает соединения и управляет аутентификацией.
  • SSH-клиент (например, sftp, FileZilla) — инициирует соединение и отправляет команды.
  • Канал SFTP — логический поток внутри SSH-сессии, по которому передаются команды и данные.

Этапы соединения:

  1. Установка TCP-соединения на порт 22 (по умолчанию).
  2. Аутентификация через SSH (пароль, ключи, GSSAPI, Kerberos).
  3. Инициализация SFTP-сессии: клиент отправляет запрос SSH_FXP_INIT, сервер отвечает SSH_FXP_VERSION.
  4. Выполнение файловых операций (чтение, запись, удаление, переименование, получение списка каталогов).
  5. Завершение сессии (закрытие SSH-канала).

Типы сообщений:

  • SSH_FXP_OPEN — открытие файла.
  • SSH_FXP_READ — чтение данных.
  • SSH_FXP_WRITE — запись данных.
  • SSH_FXP_REMOVE — удаление файла.
  • SSH_FXP_MKDIR — создание каталога.
  • SSH_FXP_RMDIR — удаление каталога.
  • SSH_FXP_STAT — получение атрибутов файла.
  • SSH_FXP_READDIR — чтение содержимого каталога.

Каждое сообщение содержит уникальный идентификатор (ID), позволяющий серверу и клиенту сопоставлять запросы и ответы.

Отличия от других протоколов

SFTP vs FTPS

ХарактеристикаSFTPFTPS
Базовый протоколSSHSSL/TLS
Порты22 (один порт)21 (командный) + динамические (данные)
ШифрованиеВстроенное (SSH)Опциональное (через SSL)
АутентификацияПароль, ключи, GSSAPIПароль, сертификаты
Прокси-совместимостьПростая (один порт)Сложная (из-за двух портов)
Поддержка в WindowsЧерез сторонние клиентыВстроенная (IIS FTP)

SFTP vs SCP

SCP (Secure Copy) — более старый протокол, также работающий поверх SSH. Он проще, но менее функционален: не поддерживает список каталогов, возобновление прерванных передач, управление правами доступа. SFTP, в отличие от SCP, является полноценным протоколом для управления файлами.

SFTP vs WebDAV

WebDAV (Web Distributed Authoring and Versioning) — протокол на основе HTTP, поддерживающий блокировку файлов и версионирование. Он удобен для работы с файлами через веб-интерфейс, но менее безопасен (требует настройки HTTPS) и менее эффективен для больших файлов.

Реализации

Серверные реализации:

  • OpenSSH (встроенный sftp-server) — стандартная реализация в Linux и macOS. Поддерживает SFTP версии 3.
  • Bitvise SSH Server — коммерческая реализация для Windows с графическим интерфейсом.
  • Cerberus FTP Server — поддерживает SFTP, FTPS и HTTPS.
  • ProFTPD — FTP-сервер с модулем mod_sftp.
  • vsftpd — через внешнюю утилиту (ограниченная поддержка).

Клиентские реализации:

  • sftp (встроенный в OpenSSH) — консольный клиент.
  • FileZilla — графический клиент с поддержкой SFTP (через библиотеку PuTTY).
  • WinSCP — популярный клиент для Windows.
  • PuTTY (PSFTP) — консольный клиент.
  • Cyberduck — клиент для macOS и Windows.
  • libssh2 — библиотека для разработчиков (используется в Git, rsync).

Применение

SFTP широко используется в следующих сценариях:

  • Администрирование серверов — загрузка конфигурационных файлов, резервное копирование, обновление веб-сайтов.
  • Автоматизация развёртывания — передача артефактов сборки на серверы (CI/CD, например, Jenkins, GitLab CI).
  • Обмен данными между организациями — безопасная передача отчётов, финансовых документов, медицинских записей.
  • Хостинг веб-сайтов — загрузка файлов на сервер (провайдеры, такие как HostGator, Bluehost, поддерживают SFTP).
  • Облачные хранилища — некоторые облачные сервисы (например, Google Cloud Storage, AWS Transfer Family) поддерживают SFTP для доступа к объектным хранилищам.

Безопасность

SFTP считается одним из самых безопасных протоколов для передачи файлов благодаря следующим особенностям:

  • Шифрование трафика — все данные, включая пароли, передаются в зашифрованном виде.
  • Аутентификация по ключам — использование SSH-ключей (RSA, ECDSA, Ed25519) исключает передачу паролей.
  • Целостность данных — HMAC (Hash-based Message Authentication Code) защищает от модификации.
  • Ограничение доступа — настройка chroot-окружения (изоляция пользователя в определённом каталоге) и списков контроля доступа (ACL).

Уязвимости и ограничения:

  • Отсутствие встроенного аудита — SFTP не ведёт журнал операций на уровне протокола (требуется логирование на сервере).
  • Зависимость от SSH — уязвимости в SSH (например, CVE-2023-38408) могут скомпрометировать SFTP.
  • Ограниченная поддержка версий — большинство реализаций поддерживают только версию 3, что ограничивает функциональность (например, отсутствие расширенных атрибутов).
  • Проблемы с производительностью — шифрование увеличивает задержки, особенно на медленных соединениях.

Альтернативы и конкуренты

  • FTPS — для сред, где требуется совместимость с FTP-клиентами.
  • WebDAV — для интеграции с веб-приложениями.
  • Rsync — для синхронизации больших объёмов данных (работает поверх SSH).
  • SCP — для простых одноразовых передач.
  • AS2/AS3 — для обмена данными в B2B-среде (EDI).

Интересные факты

  • SFTP часто путают с FTPS, но они несовместимы: клиент SFTP не может подключиться к серверу FTPS и наоборот.
  • В OpenSSH 9.0 (2022) была добавлена поддержка протокола SFTP версии 3 с расширениями (например, posix-rename).
  • Протокол SFTP не имеет официального номера RFC, но его спецификация (draft-ietf-secsh-filexfer) широко цитируется.
  • Некоторые облачные провайдеры (например, Amazon S3 через AWS Transfer Family) используют SFTP как интерфейс доступа к объектным хранилищам, эмулируя файловую систему.

Источники

  1. IETF Draft: SSH File Transfer Protocol (draft-ietf-secsh-filexfer-13).
  2. OpenSSH Manual: sftp(1) и sftp-server(8).
  3. Bitvise SSH Server Documentation: SFTP Protocol Specifications.
  4. RFC 4251: The Secure Shell (SSH) Protocol Architecture.
  5. FileZilla Wiki: SFTP vs FTPS.
  6. WinSCP Documentation: SFTP Protocol Support.

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →