sadrix logoSadriX
Минцифры готовит обязательную регистрацию IMEI смартфонов, купленных за границей
Гайды

Как безопасно передавать файлы по SFTP вместо FTP: полное руководство

Пошаговая инструкция по миграции с FTP на SFTP с настройкой сервера, клиентов и автоматизации

09 769 просмотров6 мин
0
Поделиться:TelegramVK

Введение

Протокол FTP (File Transfer Protocol) был разработан в 1970-х годах, когда безопасность не была приоритетом. Сегодня его использование для передачи файлов через интернет — прямой риск: логины, пароли и содержимое файлов передаются в открытом виде. Злоумышленник в той же сети (например, в публичном Wi-Fi) может перехватить данные с помощью сниффера трафика. SFTP (SSH File Transfer Protocol) решает эту проблему: весь трафик шифруется, а аутентификация происходит поверх защищённого SSH-соединения. В этом руководстве мы разберём, как перейти с FTP на SFTP, настроить сервер и клиенты, автоматизировать передачу и избежать типичных ошибок.

Чем SFTP отличается от FTP и почему это важно

FTP использует два канала: управляющий (порт 21) и канал данных (динамические порты). Оба канала не шифруются. Даже если вы используете FTPS (FTP over SSL/TLS), это лишь надстройка, которая не всегда корректно настраивается и часто блокируется файрволами. SFTP — это принципиально другой протокол, работающий поверх SSH (обычно порт 22). Он обеспечивает:

  • Шифрование всего трафика, включая пароли и команды.

  • Целостность данных — защита от подмены.

  • Аутентификацию по паролю или ключам SSH.

  • Единый порт, что упрощает настройку файрвола.

SFTP не является простым расширением FTP — это отдельный протокол, но для пользователя он выглядит как обычный файловый менеджер.

Требования и подготовка

Прежде чем начать, убедитесь, что у вас есть:

  • Сервер (VPS или выделенный) с Linux (Ubuntu, Debian, CentOS) и root-доступом.

  • Клиентская машина с Windows, macOS или Linux.

  • Базовые навыки работы с командной строкой.

  • Установленный SSH-сервер на сервере (обычно OpenSSH).

Если вы используете хостинг, уточните, поддерживает ли он SFTP. Большинство современных хостингов предоставляют SFTP по умолчанию, но иногда требуется включить его в панели управления.

Шаг 1: Проверка и установка SSH-сервера

SFTP работает через SSH, поэтому на сервере должен быть установлен и запущен OpenSSH. Проверьте это командой:

ssh -V

Если SSH не установлен, установите его:

  • Для Ubuntu/Debian: sudo apt update && sudo apt install openssh-server

  • Для CentOS/RHEL: sudo yum install openssh-server

После установки запустите службу и добавьте в автозагрузку:

sudo systemctl enable --now ssh

Убедитесь, что SSH слушает порт 22 (или другой, если вы его изменили):

sudo ss -tlnp | grep ssh

Шаг 2: Создание отдельного пользователя для SFTP

Не рекомендуется использовать root или основного пользователя для передачи файлов. Создайте отдельного пользователя, например sftpuser:

sudo adduser sftpuser

Задайте надёжный пароль. Если вы планируете использовать аутентификацию по ключам, пароль можно не задавать, но для первичной настройки он пригодится.

Шаг 3: Настройка изоляции (chroot) для пользователя SFTP

Чтобы пользователь не мог выйти за пределы своей домашней директории, настроим chroot. Откройте конфигурационный файл SSH:

sudo nano /etc/ssh/sshd_config

Найдите или добавьте в конец файла следующие строки:

Match User sftpuser
    ChrootDirectory /home/sftpuser
    ForceCommand internal-sftp
    AllowTcpForwarding no
    X11Forwarding no

Важно: ChrootDirectory должен принадлежать root и не быть доступным для записи другими пользователями. Установите правильные права:

sudo chown root:root /home/sftpuser
sudo chmod 755 /home/sftpuser

Создайте поддиректорию для загрузки файлов, доступную для записи:

sudo mkdir /home/sftpuser/upload
sudo chown sftpuser:sftpuser /home/sftpuser/upload

Перезапустите SSH:

sudo systemctl restart ssh

Теперь пользователь sftpuser при подключении по SFTP будет видеть только свою домашнюю директорию.

Шаг 4: Настройка аутентификации по ключам SSH (рекомендуется)

Пароли можно подобрать или перехватить, поэтому лучше использовать ключи. Сгенерируйте пару ключей на клиенте:

ssh-keygen -t ed25519 -C "sftp-client"

Скопируйте публичный ключ на сервер. Если у вас есть доступ по SSH, используйте ssh-copy-id:

ssh-copy-id sftpuser@your-server

Если доступ только по SFTP, добавьте содержимое файла ~/.ssh/id_ed25519.pub в файл /home/sftpuser/.ssh/authorized_keys на сервере вручную. Убедитесь, что права доступа корректны:

sudo mkdir -p /home/sftpuser/.ssh
sudo chmod 700 /home/sftpuser/.ssh
sudo touch /home/sftpuser/.ssh/authorized_keys
sudo chmod 600 /home/sftpuser/.ssh/authorized_keys
sudo chown -R sftpuser:sftpuser /home/sftpuser/.ssh

Теперь можно отключить аутентификацию по паролю для этого пользователя (опционально), добавив в sshd_config в блок Match:

PasswordAuthentication no

Шаг 5: Подключение к SFTP из командной строки

Самый простой способ — использовать встроенный клиент sftp. Синтаксис:

sftp sftpuser@your-server

Если вы изменили порт SSH, укажите его через -P:

sftp -P 2222 sftpuser@your-server

После подключения вы увидите приглашение sftp>. Основные команды:

  • ls — список файлов на сервере.

  • lls — список файлов на локальной машине.

  • cd — перейти в директорию на сервере.

  • lcd — перейти в локальную директорию.

  • put file.txt — загрузить файл на сервер.

  • get file.txt — скачать файл с сервера.

  • mkdir — создать директорию.

  • rm — удалить файл.

  • exit — выйти.

Пример загрузки файла:

sftp> lcd ~/Documents
sftp> cd upload
sftp> put report.pdf

Шаг 6: Использование графических клиентов (FileZilla, WinSCP)

Если командная строка неудобна, используйте графические клиенты. FileZilla (Windows, macOS, Linux) поддерживает SFTP. В настройках нового соединения выберите протокол SFTP, укажите хост, порт 22, имя пользователя и пароль (или ключ). WinSCP (Windows) также поддерживает SFTP и умеет работать с ключами PuTTY. В Cyberduck (macOS, Windows) выберите SFTP и введите данные.

Важно: не путайте SFTP с FTPS. В FileZilla это разные пункты в выпадающем списке протоколов. Выбирайте именно SFTP.

Шаг 7: Автоматизация передачи файлов с помощью скриптов

Для регулярной передачи файлов можно использовать sftp в пакетном режиме или scp. Создайте файл с командами, например upload.txt:

cd upload
put /local/path/file.zip
bye

Затем выполните:

sftp -b upload.txt sftpuser@your-server

Для аутентификации по ключу добавьте -i ~/.ssh/id_ed25519. Если ключ защищён паролем, используйте ssh-agent.

Альтернатива — scp:

scp -i ~/.ssh/id_ed25519 file.zip sftpuser@your-server:/home/sftpuser/upload/

Для синхронизации директорий удобен rsync поверх SSH:

rsync -avz -e "ssh -i ~/.ssh/id_ed25519" /local/dir/ sftpuser@your-server:/home/sftpuser/upload/

Шаг 8: Настройка файрвола и ограничение доступа

SFTP использует порт SSH (по умолчанию 22). Убедитесь, что файрвол разрешает подключения только с доверенных IP. Например, для UFW:

sudo ufw allow from 203.0.113.5 to any port 22 proto tcp
sudo ufw enable

Для iptables используйте соответствующие правила. Если вы изменили порт SSH, не забудьте обновить правила.

Шаг 9: Мониторинг и аудит SFTP-подключений

Ведите журнал подключений. Логи SSH обычно находятся в /var/log/auth.log (Debian/Ubuntu) или /var/log/secure (CentOS/RHEL). Можно настроить отдельный лог для SFTP, добавив в sshd_config:

Subsystem sftp internal-sftp -l INFO -f AUTH

Это позволит отслеживать, кто и когда передавал файлы. Для анализа используйте grep или специализированные утилиты.

Шаг 10: Тестирование и проверка безопасности

После настройки проверьте:

  • Подключение по SFTP с паролем и по ключу.

  • Что пользователь не может выйти за пределы chroot.

  • Что порт SSH доступен только с разрешённых IP.

  • Что в логах нет ошибок аутентификации.

Попробуйте подключиться по FTP — должно не получиться, если FTP-сервер отключён. Убедитесь, что старые FTP-скрипты заменены на SFTP.

Типичные ошибки

1. Использование FTPS вместо SFTP. FTPS — это FTP с TLS, он сложнее в настройке и часто блокируется. SFTP предпочтительнее. 2. Неправильные права на chroot-директорию. Если ChrootDirectory принадлежит не root или доступен для записи, SSH откажется запускать сессию. 3. Отключение пароля без настройки ключей. Если вы запретили пароли, но не добавили ключ, пользователь не сможет войти. 4. Игнорирование порта. Если SSH работает на нестандартном порту, укажите его в клиенте. 5. Забыли перезапустить SSH. После изменения sshd_config всегда выполняйте sudo systemctl restart ssh. 6. Использование root для SFTP. Это даёт злоумышленнику полный доступ к серверу в случае компрометации. 7. Отсутствие резервных копий. Перед изменением конфигурации сохраните оригинал sshd_config.

FAQ

Вопрос: Можно ли использовать SFTP на shared-хостинге? Да, многие хостинги предоставляют SFTP по умолчанию. Проверьте панель управления или обратитесь в поддержку.

Вопрос: Чем SFTP отличается от SCP? SCP — упрощённый протокол копирования, SFTP — полноценный файловый менеджер с возможностью навигации, удаления, переименования. Оба работают через SSH.

Вопрос: Нужно ли открывать дополнительные порты для SFTP? Нет, SFTP использует только порт SSH (обычно 22). Это одно из его преимуществ перед FTP.

Вопрос: Как передать файл по SFTP из Windows без сторонних программ? В Windows 10 и 11 есть встроенный клиент OpenSSH. Откройте PowerShell или cmd и используйте команду sftp.

Вопрос: Что делать, если соединение обрывается? Проверьте стабильность сети, настройки файрвола и лимиты SSH. Можно использовать rsync с опцией --partial для докачки.

Вопрос: Можно ли ограничить скорость передачи по SFTP? Да, в sshd_config можно использовать Match и директивы RateLimit или сторонние утилиты, но это требует дополнительной настройки.

Итог

Переход с FTP на SFTP — необходимый шаг для безопасности ваших данных. SFTP шифрует трафик, использует один порт и легко настраивается как на сервере, так и на клиенте. Следуя этому руководству, вы сможете настроить SFTP, создать изолированного пользователя, автоматизировать передачу и защитить сервер от типичных угроз. Не откладывайте миграцию: FTP устарел и небезопасен.

Читайте также

Комментарии

Комментарии доступны только зарегистрированным пользователям. Войти

  • Пока нет комментариев. Будьте первым.