FTP / SFTP
FTP — старый протокол передачи файлов без шифрования, SFTP — передача файлов внутри SSH-сессии на порту 22.
Что такое FTP / SFTP
FTP (File Transfer Protocol, «фтп») — протокол передачи файлов между клиентом и сервером, один из старейших в интернете. FTP-сервер — программа, которая раздаёт каталог по этому протоколу и пускает в него по логину и паролю: раньше именно так заливали сайты на хостинг.
Главная проблема FTP в том, что он передаёт логин, пароль и содержимое файлов открытым текстом. Любой узел на пути видит их целиком. Поэтому в чистом виде FTP сегодня использовать нельзя — его заменяют два разных протокола со схожими названиями.
FTP, FTPS и SFTP — не одно и то же
| FTP | FTPS | SFTP | |
|---|---|---|---|
| Что это | исходный протокол | FTP, обёрнутый в TLS | подсистема SSH |
| Шифрование | нет | да | да |
| Порты | 21 (команды), 20 (данные) | 21 explicit, 990 implicit | 22 |
| Соединений | два: управляющее и данных | два | одно |
| Дружит с NAT и файрволом | плохо | плохо | отлично |
| Отдельная настройка | своя служба | своя служба, сертификат | уже работает вместе с SSH |
SFTP — не «FTP поверх SSH», а самостоятельный протокол, живущий внутри SSH-соединения. Практический вывод: если на сервере уже настроен SSH, SFTP работает сразу, ничего ставить и открывать не нужно. Это и делает его выбором по умолчанию.
Почему FTP ломается за NAT
FTP использует два TCP-соединения — управляющее и для данных, и это источник почти всех проблем с ним.
Активный режим (PORT): сервер сам подключается к клиенту на его порт
→ блокируется файрволом и NAT клиента
Пассивный режим (PASV): клиент открывает оба соединения сам
→ работает, но сервер должен иметь открытый
диапазон портов для данных
Пассивный режим требует пробросить наружу целый диапазон портов (например, 49152–50000) и указать его в конфиге сервера. У SFTP всей этой конструкции нет: одно соединение, один порт 22.
Практика
$ sftp deploy@example.com
sftp> put ./build.tar.gz /var/www/releases/
sftp> get /var/log/app.log
sftp> ls -l
sftp> bye
# копирование одной командой
$ scp -r ./dist deploy@example.com:/var/www/html/
# зеркалирование каталога, только изменённые файлы
$ rsync -avz --delete ./dist/ deploy@example.com:/var/www/html/
rsync поверх SSH передаёт только различия и почти всегда быстрее и FTP, и SFTP на больших деревьях файлов — для деплоя и синхронизации бэкапов берите его.
Ограничить пользователя только файлами, без shell-доступа, можно штатными средствами sshd:
Match Group sftponly
ChrootDirectory /var/www
ForceCommand internal-sftp
PermitTunnel no
AllowTcpForwarding no
Когда FTP всё ещё встречается
Панели хостинга до сих пор предлагают FTP-доступ, его понимают все FTP-клиенты, и старое оборудование иногда умеет выгружать данные только по нему. Если отказаться нельзя — включайте хотя бы FTPS и не пускайте протокол в интернет без ограничения по IP.
Для собственного сервера правило простое: SFTP для ручной работы, rsync для автоматической, FTP — только при внешнем требовании совместимости. А для раздачи файлов пользователям вместо FTP-сервера сегодня берут object storage — он дешевле и не требует администрирования.
Связанные термины
- SSH — транспорт, внутри которого работает SFTP
- FTP-клиенты — FileZilla, WinSCP и другие
- Сетевые порты — 21, 22, 990 и диапазон для пассивного режима
- TLS — то, чем FTPS отличается от FTP
- NAT — причина, по которой FTP так капризен
- object storage — современная замена файловой раздаче
Готовы запустить GPU-задачу?
Запустить GPU-сервер