К основному содержимому

SFTP и vsftpd: безопасная передача файлов на VDS

VDS / VPS серверы · 29.09.2026

Чем SFTP отличается от обычного FTP и vsftpd

SFTP (SSH File Transfer Protocol) — это передача файлов поверх обычного SSH-соединения на порту 22. Отдельный сервер для него не нужен: если SSH уже работает — см. статью про первое подключение к VDS по SSH — SFTP уже доступен. Весь трафик, включая логин и пароль, шифруется автоматически.

vsftpd — это отдельный сервер классического FTP, который по умолчанию передаёт данные и пароли в открытом виде. Чтобы получить шифрование, vsftpd настраивают явно на FTPS (FTP поверх TLS) — это другой протокол, со своими портами и особенностями пассивного режима. Без жёсткой привязки к старым FTP-клиентам для новых проектов проще и безопаснее сразу использовать SFTP.

SFTP через SSH: пользователь без shell-доступа

Для передачи файлов не обязательно давать пользователю полноценный доступ к командной строке. Создайте отдельного пользователя с оболочкой, ограниченной только SFTP:

useradd -m -s /usr/sbin/nologin sftpuser
passwd sftpuser

Оболочка nologin запрещает вход по SSH в обычном смысле, но не мешает SFTP-подсистеме, потому что она обрабатывается отдельно от командной оболочки на уровне конфигурации sshd.

Ограничение пользователя своей папкой (chroot)

Чтобы пользователь не мог выйти за пределы своей директории и увидеть остальную файловую систему, настройте chroot в /etc/ssh/sshd_config:

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

Для работы chroot директория /home/sftpuser и все родительские папки до неё обязаны принадлежать root и не иметь права записи для группы и остальных:

chown root:root /home/sftpuser
chmod 755 /home/sftpuser
mkdir /home/sftpuser/upload
chown sftpuser:sftpuser /home/sftpuser/upload

После правки конфигурации проверьте синтаксис и перезапустите SSH:

sshd -t
systemctl restart sshd

Подробнее про безопасную настройку самого sshd — в статье про SSH Hardening.

Установка и настройка vsftpd с TLS

Если классический FTP всё же требуется — скажем, для legacy-клиента — устанавливайте vsftpd и сразу включайте шифрование:

apt install vsftpd -y

В файле /etc/vsftpd.conf включите TLS и запретите анонимный доступ:

anonymous_enable=NO
ssl_enable=YES
rsa_cert_file=/etc/ssl/certs/vsftpd.pem
rsa_private_key_file=/etc/ssl/private/vsftpd.key
force_local_data_ssl=YES
force_local_logins_ssl=YES

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

Firewall и пассивный режим FTP

FTP использует два соединения: управляющее на порту 21 и отдельное для передачи данных. В пассивном режиме порт для данных выбирается из диапазона, который нужно явно открыть в файрволе. Задайте диапазон в конфиге:

pasv_min_port=40000
pasv_max_port=40100

И откройте порты 21 и 40000-40100 — как настроить правила файрвола на VDS, описано в статье про настройку UFW. Для SFTP отдельных портов открывать не нужно — используется тот же порт 22, что и для SSH.

Что выбрать: SFTP или vsftpd

Итоговый чек-лист:

  • Для нового проекта без привязки к старым FTP-клиентам используйте SFTP — меньше портов, встроенное шифрование, один сервис вместо двух.
  • Для SFTP-пользователей всегда настраивайте chroot, чтобы ограничить доступ их собственной папкой.
  • Если требуется именно vsftpd — обязательно включайте ssl_enable и запрещайте анонимный вход.
  • Для vsftpd откройте порт 21 и диапазон пассивных портов в файрволе, для SFTP хватает порта 22.
  • Периодически проверяйте список пользователей с SFTP/FTP-доступом и удаляйте неактуальных.
← Назад в базу знаний Задать вопрос поддержке