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-сессии, по которому передаются команды и данные.
Этапы соединения:
- Установка TCP-соединения на порт 22 (по умолчанию).
- Аутентификация через SSH (пароль, ключи, GSSAPI, Kerberos).
- Инициализация SFTP-сессии: клиент отправляет запрос
SSH_FXP_INIT, сервер отвечаетSSH_FXP_VERSION. - Выполнение файловых операций (чтение, запись, удаление, переименование, получение списка каталогов).
- Завершение сессии (закрытие 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
| Характеристика | SFTP | FTPS |
|---|---|---|
| Базовый протокол | SSH | SSL/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 как интерфейс доступа к объектным хранилищам, эмулируя файловую систему.
Источники
- IETF Draft: SSH File Transfer Protocol (draft-ietf-secsh-filexfer-13).
- OpenSSH Manual:
sftp(1)иsftp-server(8). - Bitvise SSH Server Documentation: SFTP Protocol Specifications.
- RFC 4251: The Secure Shell (SSH) Protocol Architecture.
- FileZilla Wiki: SFTP vs FTPS.
- WinSCP Documentation: SFTP Protocol Support.
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →