MAATRIX / Блог / Как установить и настроить FTP-сервер на VPS

Как установить и настроить FTP-сервер на VPS

Как установить и настроить FTP-сервер на VPS

MAATRIX

FTP-сервер на VPS нужен, когда файлы надо отдавать клиентам, принимать бэкапы с других машин или дать подрядчику доступ к каталогу без полного входа в систему. Разберём, как установить и настроить FTP-сервер на VPS на базе vsftpd — самого проверенного демона под Linux, с изоляцией пользователей, пассивным режимом и обязательным TLS-шифрованием, чтобы пароли не летели по сети открытым текстом.

Обсудить статью, задать вопрос или начать новую тему

Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.

Перейти в сообщество →

Когда FTP оправдан, а когда лучше SFTP

Честно проговорим главное: классический FTP — протокол старый и по умолчанию небезопасный. Логин и пароль передаются в открытом виде, а данные идут отдельным соединением, что плохо дружит с фаерволами и NAT. Поэтому голый FTP в 2026 году использовать нельзя — только FTPS, то есть FTP поверх TLS.

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

Установка vsftpd и первый запуск

На Ubuntu или Debian установка занимает одну команду. Сразу после установки демон запускается с настройками по умолчанию, которые нас не устраивают, поэтому конфиг мы перепишем.

apt update
apt install -y vsftpd
systemctl enable --now vsftpd
systemctl status vsftpd

Основной конфиг лежит в /etc/vsftpd.conf. Перед правкой сохраните оригинал, чтобы было к чему вернуться. Дальше мы отключим анонимный вход, разрешим локальным пользователям загрузку, включим изоляцию в домашнем каталоге и подготовим пассивный режим. Каждый параметр важен, поэтому не копируйте чужие конфиги вслепую — понимайте, что включаете.

cp /etc/vsftpd.conf /etc/vsftpd.conf.bak

Нужен сервер под эту задачу?

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США и РФ. Оплата картой РФ и по СБП.

Арендовать VPS

Базовая конфигурация без анонимного доступа

Откройте /etc/vsftpd.conf и приведите ключевые параметры к безопасному виду. Анонимный вход выключаем, локальным пользователям разрешаем работу и запись, каждого запираем в его домашнем каталоге, чтобы он не бродил по всей файловой системе.

anonymous_enable=NO
local_enable=YES
write_enable=YES
chroot_local_user=YES
allow_writeable_chroot=YES
user_sub_token=$USER
local_root=/home/$USER/ftp

Параметр chroot_local_user=YES — ключевой для безопасности: он не даёт пользователю выйти за пределы своего каталога и увидеть чужие файлы или системные пути. Директива allow_writeable_chroot=YES нужна потому, что vsftpd из соображений безопасности отказывается запирать пользователя в каталог, куда тот может писать, и без этого параметра выдаст ошибку 500. После правки конфига перезапустите демон и проверьте статус.

systemctl restart vsftpd

Создание изолированного FTP-пользователя

Не давайте FTP-доступ системным аккаунтам, тем более root. Заведите отдельного пользователя специально под FTP, задайте ему структуру каталогов и права. Хитрость с chroot в том, что корневой каталог, в который запирается пользователь, не должен быть доступен ему на запись — писать он должен в подкаталог внутри.

adduser ftpuser
mkdir -p /home/ftpuser/ftp/files
chown nobody:nogroup /home/ftpuser/ftp
chmod a-w /home/ftpuser/ftp
chown ftpuser:ftpuser /home/ftpuser/ftp/files

Такая раскладка решает распространённую проблему: сам каталог-тюрьма закрыт на запись, поэтому vsftpd спокойно в него запирает, а весь обмен файлами идёт через подкаталог files, куда у пользователя полные права. Если хотите ограничить круг тех, кому вообще разрешён FTP, заведите список разрешённых пользователей и включите проверку по нему — тогда даже наличие системного аккаунта не даст человеку зайти по FTP без явного разрешения.

Пассивный режим и работа за фаерволом

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

pasv_enable=YES
pasv_min_port=40000
pasv_max_port=40100
pasv_address=ВАШ_ВНЕШНИЙ_IP

Теперь откройте в фаерволе командный порт и весь пассивный диапазон. Если используете UFW, команды такие:

ufw allow 21/tcp
ufw allow 40000:40100/tcp
ufw reload

Диапазон в сто портов с запасом хватает даже для десятков одновременных подключений. Параметр pasv_address нужен, если ваш VPS за NAT и внешний адрес отличается от адреса интерфейса — тогда сервер сообщит клиенту правильный внешний IP. На обычном VPS с белым IP можно указать сам этот адрес.

Обязательное шифрование через TLS

Финальный и самый важный шаг — включить FTPS, чтобы логины, пароли и данные шли зашифрованными. Сгенерируйте сертификат или используйте уже имеющийся от Let's Encrypt, затем включите TLS в конфиге vsftpd.

openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
  -keyout /etc/ssl/private/vsftpd.pem \
  -out /etc/ssl/private/vsftpd.pem

Добавьте в конфиг директивы включения шифрования: они заставят демон требовать TLS для аутентификации и данных, а не оставлять это на усмотрение клиента.

ssl_enable=YES
force_local_data_ssl=YES
force_local_logins_ssl=YES
rsa_cert_file=/etc/ssl/private/vsftpd.pem
rsa_private_key_file=/etc/ssl/private/vsftpd.pem
ssl_ciphers=HIGH

После перезапуска в FileZilla или другом клиенте выбирайте явный FTP через TLS — и соединение станет защищённым. Для рабочего сервера лучше подставить сюда полноценный сертификат Let's Encrypt вместо самоподписанного, тогда клиенты не будут ругаться на недоверенный сертификат.

Стоит понимать разницу между явным и неявным FTPS. Явный режим начинает соединение как обычный FTP на порту 21 и командой AUTH TLS переключается на шифрование — это современный стандарт, который мы и настроили. Неявный режим сразу требует TLS на отдельном порту 990 и считается устаревшим, хотя некоторый старый софт умеет только его. Если ваш клиент настойчиво не подключается, сначала уточните, какой из режимов он ожидает, и лишь потом грешите на конфиг сервера.

Не забудьте про эксплуатацию. Раз в год самоподписанный сертификат истекает, и если вы его не обновите, клиенты внезапно перестанут подключаться — поэтому валидный сертификат Let's Encrypt с автопродлением избавляет от этой рутины. Полезно также ограничить число одновременных соединений с одного адреса и включить логирование передач, чтобы понимать, кто и что заливал. И держите отдельную резервную копию рабочего конфига: одна опечатка в директиве не даст демону стартовать, а сверка с копией сэкономит нервы.

Поднять FTP-сервер удобно на VPS у MAATRIX: белый IP под ваш диапазон пассивных портов, локация на выбор и оплата из России картой, СБП или криптой — сервер готов к работе за пару минут.

Нужен сервер под эту задачу?

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США и РФ. Оплата картой РФ и по СБП.

Арендовать VPS

Обсудить статью, задать вопрос или начать новую тему

Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.

Перейти в сообщество →

Частые вопросы

Чем FTP-сервер отличается от SFTP?

SFTP работает поверх SSH, шифруется по умолчанию и не требует отдельного демона. FTP — самостоятельный протокол, который безопасен только в варианте FTPS с TLS. Для простого доступа паре людей чаще удобнее SFTP.

Почему клиент подключается, но не видит файлы?

Почти всегда дело в пассивном режиме: диапазон портов не задан в конфиге или не открыт в фаерволе. Пропишите pasv_min_port/pasv_max_port и откройте этот диапазон в UFW.

Ошибка 500 OOPS: vsftpd: refusing to run with writable root — что делать?

Добавьте allow_writeable_chroot=YES или, правильнее, сделайте корневой каталог пользователя недоступным на запись, а обмен ведите через подкаталог с полными правами.

Нужен ли обязательно TLS для FTP-сервера на VPS?

Да. Без шифрования пароли и файлы передаются открытым текстом и легко перехватываются. Включите ssl_enable и force_local_logins_ssl, иначе поднимать FTP небезопасно.

Нужны сами нейросети для контента?

Генерируйте изображения, видео и озвучку нейросетями на falapi.io — десятки моделей в одном окне. Оплата картой РФ и по СБП.