Настройка FTP-сервера в РЕД ОС

Ошибка 530 Login incorrect или обрыв соединения при подключении к FTP в РЕД ОС чаще всего означает, что служба vsftpd установлена, но не настроены права доступа, файрвол или контексты SELinux. РЕД ОС построена на RPM-пакетной базе и использует привычные инструменты семейства: пакетный менеджер dnf, брандмауэр firewalld и принудительный контроль доступа SELinux, поэтому настройка FTP во многом повторяет подход CentOS и Fedora, но с учётом репозиториев самой РЕД ОС.

В этой статье разберём полный цикл: установку сервера vsftpd, базовую конфигурацию, открытие портов, настройку SELinux и типичные ошибки при подключении клиентов. Команды приведены для актуальных версий РЕД ОС 7.x; если у вас иная версия, сверяйте названия пакетов с официальной документацией дистрибутива.

Установка FTP-сервера vsftpd в РЕД ОС

Наиболее распространённый FTP-сервер для Linux-систем — vsftpd (Very Secure FTP Daemon). Он доступен в стандартных репозиториях РЕД ОС. Перед установкой убедитесь, что система имеет доступ к репозиториям: локальным или сетевым, в зависимости от того, как развёрнута ваша инфраструктура.

Установка выполняется одной командой из терминала с правами root:

sudo dnf install vsftpd

После установки службу необходимо запустить и добавить в автозагрузку. Без этого сервер не стартует после перезагрузки системы, что часто становится причиной «внезапно пропавшего» FTP-доступа:

sudo systemctl enable --now vsftpd

sudo systemctl status vsftpd

Вторая команда покажет состояние службы. Статус active (running) означает, что сервер работает. Если служба не стартует, смотрите журнал командой journalctl -u vsftpd — там будет указана конкретная причина, чаще всего синтаксическая ошибка в конфигурационном файле.

Базовая конфигурация vsftpd

Основной файл настроек — /etc/vsftpd/vsftpd.conf. Откройте его в любом текстовом редакторе с правами root, например sudo nano /etc/vsftpd/vsftpd.conf. Ниже — ключевые параметры, которые стоит проверить в первую очередь.

  • 🔒 anonymous_enable=NO — отключает анонимный вход; для рабочего сервера это обязательный минимум безопасности.
  • 👤 local_enable=YES — разрешает вход локальным пользователям системы.
  • ✍️ write_enable=YES — разрешает загрузку и изменение файлов.
  • 🏠 chroot_local_user=YES — ограничивает пользователя его домашним каталогом, не давая «гулять» по файловой системе.
  • 📢 ftpd_banner=... — приветственное сообщение при подключении.
⚠️ Внимание: при включённом chroot_local_user=YES vsftpd может отказывать в подключении, если домашний каталог пользователя доступен на запись ему самому. Возможное решение — добавить параметр allow_writeable_chroot=YES либо снять право записи с корня домашнего каталога, оставив запись во вложенных папках.

После любого изменения конфигурации перезапустите службу:

sudo systemctl restart vsftpd

☑️ Минимальная проверка после настройки vsftpd

Выполнено: 0 / 5

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

Для входа по FTP используются обычные системные учётные записи. Создайте отдельного пользователя, не давая ему лишних прав:

sudo useradd -m ftpuser

sudo passwd ftpuser

Ключ -m создаёт домашний каталог — именно в него попадёт пользователь после входа (при включённом chroot). Если пользователю не нужен вход в систему через терминал, можно назначить ему оболочку /sbin/nologin, но тогда проверьте, что эта оболочка перечислена в файле /etc/shells — иначе vsftpd отклонит вход с ошибкой аутентификации.

Права на каталоги настраиваются стандартными средствами: chmod и chown. Например, чтобы пользователь мог загружать файлы только в подкаталог upload, создайте его внутри домашней папки и назначьте владельцем именно этот подкаталог.

📊 Для каких задач вы настраиваете FTP в РЕД ОС
Обмен файлами в локальной сети
Загрузка файлов на сайт
Резервное копирование
Миграция с Windows-сервера

Настройка firewalld и SELinux

Даже при корректно настроенном vsftpd подключение извне может не проходить из-за брандмауэра. В РЕД ОС по умолчанию используется firewalld. Откройте службу FTP постоянно:

sudo firewall-cmd --permanent --add-service=ftp

sudo firewall-cmd --reload

Проверить результат можно командой sudo firewall-cmd --list-services — в списке должен появиться ftp. Если планируется пассивный режим FTP (а большинство клиентов используют именно его), дополнительно задайте диапазон пассивных портов в vsftpd.conf параметрами pasv_min_port и pasv_max_port и откройте этот же диапазон в firewalld.

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

getsebool -a | grep ftp

Для разрешения полного доступа FTP к домашним каталогам обычно требуется включить соответствующий булев параметр, например:

sudo setsebool -P ftpd_full_access on
⚠️ Внимание: не отключайте SELinux полностью ради FTP — это резко снижает защищённость системы. Настройте нужные булевы параметры и контексты файлов; точный набор зависит от версии РЕД ОС и политики, действующей в вашей организации.

Пассивный и активный режимы: что выбрать

FTP исторически использует два соединения: управляющее (порт 21) и соединение данных. В активном режиме сервер сам инициирует подключение к клиенту, что почти всегда ломается о NAT и клиентские файрволы. В пассивном режиме клиент сам открывает второе соединение на порт из согласованного диапазона — поэтому пассивный режим является стандартом де-факто.

Для пассивного режима добавьте в конфигурацию строки вида:

pasv_enable=YES

pasv_min_port=40000

pasv_max_port=40100

Конкретный диапазон выбирайте произвольно из свободных портов и откройте его в firewalld командой sudo firewall-cmd --permanent --add-port=40000-40100/tcp с последующей перезагрузкой правил. Если сервер находится за NAT и имеет внешний IP, может понадобиться параметр pasv_address с внешним адресом — иначе клиент получит внутренний адрес и не сможет установить соединение данных.

СимптомВероятная причинаЧто проверить
Connection refusedСлужба не запущена или закрыт порт 21systemctl status vsftpd, firewall-cmd --list-services
530 Login incorrectНеверный пароль, оболочка не в /etc/shells, запрет в vsftpd.confЖурнал journalctl -u vsftpd, файл /etc/shells
Вход успешен, но пустой каталогОграничения SELinuxgetsebool -a | grep ftp, журнал audit
Обрыв на команде LIST/MLSDНе открыт диапазон пассивных портовpasv_min_port/pasv_max_port и правила firewalld
500 OOPS: vsftpd: refusing to run with writable rootChroot с записываемым домашним каталогомallow_writeable_chroot=YES или права на каталог
Почему обычный FTP считается небезопасным и что делать

Протокол FTP передаёт логин, пароль и данные в открытом виде — их можно перехватить в сети. Если сервер доступен за пределами доверенной локальной сети, рассмотрите альтернативы: SFTP поверх SSH (работает из коробки при установленном openssh-server и не требует vsftpd) либо FTPS — FTP с TLS-шифрованием, которое vsftpd тоже поддерживает через параметры ssl_enable, rsa_cert_file и rsa_private_key_file. Для внутреннего использования в изолированном контуре открытый FTP допустим, но с отключённым анонимным доступом и строгими правами.

Проверка работоспособности и тестовое подключение

Сначала проверьте сервер локально, с самой машины РЕД ОС. Это отсекает проблемы сети и брандмауэра:

ftp localhost

Если локальный вход проходит, а внешний — нет, проблема почти наверняка в firewalld или сетевом оборудовании между клиентом и сервером. Проверить доступность порта с другой машины можно командой telnet IP_сервера 21 или через клиент FileZilla, который наглядно показывает, на каком этапе рвётся соединение.

Полезно наблюдать журнал в реальном времени во время попытки подключения:

sudo journalctl -u vsftpd -f

Так вы увидите точную причину отказа: ошибку пароля, запрет SELinux или проблему с каталогом. Диагностика по журналу занимает минуты, тогда как перебор настроек вслепую — часы.

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

Чем FTP отличается от SFTP в РЕД ОС?

FTP — отдельный протокол со службой vsftpd и портом 21, данные передаются без шифрования. SFTP работает поверх SSH (порт 22), шифрует трафик и не требует установки FTP-сервера — достаточно работающего openssh-server. Для доступа извне предпочтителен SFTP.

Как ограничить пользователя только одним каталогом?

Включите chroot_local_user=YES в /etc/vsftpd/vsftpd.conf — пользователь окажется «заперт» в своём домашнем каталоге. Если после этого вход перестал работать, добавьте allow_writeable_chroot=YES или уберите право записи с корня домашнего каталога.

Клиент подключается, но не видит список файлов. Что делать?

Классический признак проблемы с соединением данных в пассивном режиме. Проверьте, что диапазон pasv_min_portpasv_max_port задан в конфигурации и открыт в firewalld. Если сервер за NAT — укажите pasv_address с внешним IP. Дополнительно проверьте булевы параметры SELinux.

Как разрешить анонимный доступ только на чтение?

Установите anonymous_enable=YES и убедитесь, что write_enable=NO или отсутствуют параметры anon_upload_enable и anon_mkdir_write_enable. Анонимные файлы обычно размещаются в каталоге /var/ftp. Такой режим допустим только в доверенной сети.

Где смотреть логи FTP-сервера?

Основной источник — журнал systemd: sudo journalctl -u vsftpd. Также vsftpd ведёт собственный журнал /var/log/vsftpd.log, если в конфигурации включён параметр xferlog_enable=YES и задан путь к файлу журнала.