Как безопасно передавать файлы по SFTP вместо FTP: пошаговый гайд
Полное руководство по переходу с FTP на SFTP: настройка сервера, клиенты, ключи, автоматизация и безопасность
Введение
Протокол FTP (File Transfer Protocol) появился в 1971 году и до сих пор используется во многих системах. Однако у него есть фатальный недостаток: весь трафик, включая логины, пароли и содержимое файлов, передаётся в открытом виде. Любой, кто находится в той же сети (например, в кафе или офисе), может перехватить данные с помощью сниффера пакетов. SFTP (SSH File Transfer Protocol) решает эту проблему: он работает поверх SSH и шифрует весь обмен данными. В этом гайде мы разберём, как настроить SFTP-сервер, подключиться к нему, автоматизировать передачу файлов и избежать типичных ошибок.
Требования
Linux-сервер (Ubuntu 20.04/22.04, Debian 11/12, CentOS 7/8, Rocky Linux 8/9) с доступом по SSH.
Права sudo или root.
Базовые навыки работы в командной строке.
Клиент SFTP: встроенный в OpenSSH (команда
sftp), FileZilla, WinSCP или Cyberduck.Открытый порт 22 (или другой порт SSH) на сервере.
Шаг 1. Проверьте, установлен ли SSH-сервер
SFTP работает через SSH, поэтому на сервере должен быть установлен и запущен OpenSSH. Проверьте статус:
sudo systemctl status sshЕсли служба не найдена, установите её:
Для Debian/Ubuntu:
sudo apt install openssh-serverДля CentOS/Rocky:
sudo dnf install openssh-server
Убедитесь, что служба запущена и добавлена в автозагрузку:
sudo systemctl enable --now sshШаг 2. Создайте отдельного пользователя для SFTP
Не используйте root для передачи файлов. Создайте пользователя, который будет иметь доступ только к SFTP и не сможет зайти в shell:
sudo useradd -m -s /usr/sbin/nologin sftpuser
sudo passwd sftpuserЗдесь -m создаёт домашний каталог, а -s /usr/sbin/nologin запрещает интерактивный вход. Пользователь сможет только передавать файлы.
Шаг 3. Настройте каталог для файлов
По умолчанию SFTP-пользователь получает доступ к своему домашнему каталогу. Создайте внутри него папку для загрузки и установите правильные права:
sudo mkdir -p /home/sftpuser/upload
sudo chown sftpuser:sftpuser /home/sftpuser/upload
sudo chmod 755 /home/sftpuser/uploadЕсли нужно ограничить пользователя только этой папкой, используйте ChrootDirectory в конфиге SSH (см. шаг 4).
Шаг 4. Настройте SSH для SFTP (опционально)
Откройте файл /etc/ssh/sshd_config:
sudo nano /etc/ssh/sshd_configДобавьте в конец секцию для группы sftp (создайте группу, если её нет):
Match Group sftp
ChrootDirectory /home/%u
ForceCommand internal-sftp
AllowTcpForwarding no
X11Forwarding noСоздайте группу и добавьте пользователя:
sudo groupadd sftp
sudo usermod -aG sftp sftpuserВажно: ChrootDirectory должен принадлежать root и не быть доступным для записи другим пользователям. Проверьте права:
sudo chown root:root /home/sftpuser
sudo chmod 755 /home/sftpuserПерезапустите SSH:
sudo systemctl restart sshТеперь пользователь sftpuser при подключении попадёт в свой домашний каталог и не сможет выйти за его пределы.
Шаг 5. Подключитесь к SFTP-серверу
Используйте встроенный клиент sftp:
sftp sftpuser@your_server_ipВведите пароль. После успешного входа вы увидите приглашение sftp>. Основные команды:
ls— список файлов на сервере.lls— список файлов на локальной машине.cd— перейти в каталог на сервере.lcd— перейти в локальный каталог.put file.txt— загрузить файл на сервер.get file.txt— скачать файл с сервера.mkdir— создать каталог.rm— удалить файл.exit— выйти.
Пример загрузки файла:
sftp> put /home/user/document.pdfШаг 6. Настройте аутентификацию по ключам
Пароли можно подобрать, поэтому используйте SSH-ключи. Сгенерируйте пару на локальной машине:
ssh-keygen -t ed25519 -C "sftp-client"Скопируйте публичный ключ на сервер:
ssh-copy-id -i ~/.ssh/id_ed25519.pub sftpuser@your_server_ipТеперь можно подключаться без пароля. Проверьте:
sftp sftpuser@your_server_ipЕсли вход выполнен без запроса пароля — всё работает.
Шаг 7. Ограничьте доступ по IP и порту
Для повышения безопасности измените стандартный порт SSH (например, на 2222) и разрешите подключения только с доверенных IP. В /etc/ssh/sshd_config:
Port 2222
AllowUsers sftpuser@192.168.1.100Не забудьте открыть новый порт в фаерволе:
sudo ufw allow 2222/tcp
sudo ufw delete allow 22/tcp
sudo systemctl restart sshШаг 8. Настройте FileZilla или WinSCP
Для графического интерфейса используйте FileZilla (кроссплатформенный) или WinSCP (Windows).
FileZilla: 1. Откройте «Файл» → «Менеджер сайтов» → «Новый сайт». 2. Протокол: SFTP — SSH File Transfer Protocol. 3. Хост: IP-адрес сервера, порт: 22 (или ваш). 4. Тип входа: «Ключевой файл» — укажите путь к приватному ключу. 5. Нажмите «Соединиться».
WinSCP: 1. В окне входа выберите «Новый сайт». 2. Протокол: SFTP. 3. Имя хоста, порт, имя пользователя. 4. В разделе «Аутентификация» выберите файл приватного ключа. 5. Сохраните и подключитесь.
Шаг 9. Автоматизируйте передачу файлов
Для регулярной передачи используйте scp или rsync поверх SSH. Пример с rsync:
rsync -avz -e "ssh -p 2222" /local/path/ sftpuser@your_server_ip:/home/sftpuser/upload/Для автоматизации без ввода пароля используйте ключи (шаг 6). Можно добавить задание в cron:
0 3 * * * rsync -avz -e "ssh -p 2222" /backup/ sftpuser@server:/home/sftpuser/upload/Шаг 10. Проверьте логи и мониторинг
Следите за подключениями в /var/log/auth.log (Debian/Ubuntu) или /var/log/secure (CentOS/Rocky):
sudo tail -f /var/log/auth.log | grep sftpНастройте fail2ban для блокировки подозрительных попыток входа:
sudo apt install fail2ban
sudo systemctl enable --now fail2banТипичные ошибки
1. Использование root для SFTP. Это даёт полный доступ к системе. Всегда создавайте отдельного пользователя. 2. Неправильные права на ChrootDirectory. Если каталог принадлежит пользователю или доступен для записи, SSH не запустится. Владелец — root, права 755. 3. Забыли перезапустить SSH после изменения конфига. Всегда выполняйте sudo systemctl restart ssh. 4. Игнорирование ключей. Пароли слабее ключей. Переходите на аутентификацию по ключам. 5. Открытый порт 22 для всех. Ограничьте доступ по IP или измените порт. 6. Использование устаревших алгоритмов. В /etc/ssh/sshd_config можно указать современные шифры: Ciphers aes256-gcm@openssh.com,chacha20-poly1305@openssh.com.
FAQ
Чем SFTP отличается от FTP? FTP передаёт данные в открытом виде, SFTP шифрует весь трафик через SSH. SFTP использует один порт (обычно 22), FTP — два (21 для команд и 20 для данных).
Можно ли использовать SFTP без SSH-сервера? Нет, SFTP работает только поверх SSH. Нужен OpenSSH или другой SSH-сервер.
Какой клиент лучше для Windows? WinSCP — популярный и функциональный. Также можно использовать FileZilla или встроенный sftp в Windows 10/11 (доступен через OpenSSH Client).
Как ограничить пользователя только его папкой? Используйте ChrootDirectory в sshd_config, как показано в шаге 4.
Безопасно ли использовать пароли? Пароли передаются по шифрованному каналу, но их можно подобрать. Ключи надёжнее.
Что делать, если SFTP не подключается? Проверьте статус SSH, логи (/var/log/auth.log), права на домашний каталог и настройки фаервола.
Итог
Переход с FTP на SFTP — необходимый шаг для безопасности данных. SFTP шифрует трафик, поддерживает аутентификацию по ключам и легко настраивается. Выполнив шаги из этого гайда, вы сможете безопасно передавать файлы, ограничить доступ пользователей и автоматизировать процессы. Помните: безопасность — это процесс, а не разовое действие. Регулярно обновляйте ПО, следите за логами и используйте сложные ключи.
Читайте также
Комментарии
Комментарии доступны только зарегистрированным пользователям. Войти
- Пока нет комментариев. Будьте первым.



