Гид по технологиям

Установка и защита VSFTPD на CentOS 8 с TLS

• 7 min read • Серверы • Обновлено 28 Nov 2025
VSFTPD на CentOS 8: установка и защита TLS
VSFTPD на CentOS 8: установка и защита TLS

Введение

FTP — широко используемый протокол для передачи файлов между сервером и клиентом. Среди популярных серверов — vsftpd, proftpd, pure-ftpd и другие. vsftpd (Very Secure FTP Daemon) считается быстрым и безопасным FTP-сервером и поддерживает IPv6, явный (explicit) и явный/неявный FTPS, а также интеграцию с SSL/TLS.

В этом руководстве пошагово показано, как установить и настроить vsftpd на CentOS 8, включить шифрование TLS, открыть нужные порты в firewalld и учесть правила SELinux. В конце — чек-листы, тесты, рекомендации по безопасности и варианты альтернатив.

Предварительные условия

  • Сервер с CentOS 8 (локальный или облачный). При необходимости замените на совместимый дистрибутив (Rocky Linux / AlmaLinux) при окончании срока поддержки CentOS 8.
  • root-доступ или пользователь с sudo.
  • Базовые знания командной строки Linux.

Быстрый план действий

  1. Установить пакет vsftpd.
  2. Запустить и включить сервис.
  3. Создать FTP-пользователя.
  4. Отредактировать /etc/vsftpd/vsftpd.conf.
  5. Настроить SELinux и firewalld.
  6. Сгенерировать SSL-сертификат и включить TLS в конфиге.
  7. Протестировать подключение через клиент, поддерживающий TLS (например, FileZilla).

Установка VSFTPD

VSFTPD доступен в репозитории CentOS 8. Выполните установку следующей командой:

dnf install vsftpd -y

После установки запустите сервис и включите автозапуск:

systemctl start vsftpd
systemctl enable vsftpd

Теперь сервер vsftpd установлен и работает.

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

Рекомендуется создавать отдельного локального пользователя для доступа по FTP. Пример создания пользователя vyom:

adduser vyom

Установите пароль для него:

passwd vyom

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

Начальная конфигурация vsftpd

Откройте основной конфигурационный файл:

nano /etc/vsftpd/vsftpd.conf

Найдите и измените (или добавьте) следующие параметры:

anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=NO
listen_ipv6=YES
pam_service_name=vsftpd
userlist_enable=NO

Сохраните файл и перезапустите сервис:

systemctl restart vsftpd
systemctl status vsftpd

Ожидаемый вывод сервиса примерно такой (перевод см. далее):

? vsftpd.service - Vsftpd ftp daemon
   Loaded: loaded (/usr/lib/systemd/system/vsftpd.service; disabled; vendor preset: disabled)
   Active: active (running) since Fri 2020-02-21 00:43:57 EST; 6s ago
  Process: 2698 ExecStart=/usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf (code=exited, status=0/SUCCESS)
 Main PID: 2699 (vsftpd)
    Tasks: 1 (limit: 6102)
   Memory: 1020.0K
   CGroup: /system.slice/vsftpd.service
           ??2699 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf

Feb 21 00:43:57 centos8 systemd[1]: Stopped Vsftpd ftp daemon.
Feb 21 00:43:57 centos8 systemd[1]: Starting Vsftpd ftp daemon...
Feb 21 00:43:57 centos8 systemd[1]: Started Vsftpd ftp daemon.

Если сервис не запускается — посмотрите журналы через journalctl -u vsftpd.

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

CentOS 8 использует SELinux по умолчанию. Разрешите полный доступ для ftpd (сохранится между перезагрузками):

setsebool -P allow_ftpd_full_access=1

Откройте сервис FTP в firewalld:

firewall-cmd --zone=public --permanent --add-service=ftp
firewall-cmd --reload

Если вы используете пассивный режим FTP, дополнительно откройте диапазон пассивных портов в конфигурации и в firewalld — см. раздел ниже.

Подключение к серверу VSFTPD (проверка работы без TLS)

С клиентской машины можно попробовать подключиться через стандартный ftp-клиент:

ftp 172.20.10.3

Пример сессии:

Connected to 172.20.10.3.
220 (vsFTPd 3.0.3)
Name (172.20.10.3:root): vyom
331 Please specify the password.
Password:
230 Login successful.

В режиме без шифрования передача паролей незашифрована — поэтому далее мы включим TLS.

Подключение через TLS (FTPS): подготовка сертификата

Для шифрования соединений с FTP-сервером используйте SSL/TLS. Для тестов можно сгенерировать самоподписанный сертификат.

Установите OpenSSL, если он не установлен:

dnf install openssl -y

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

mkdir -p /etc/ssl/private
chmod 700 /etc/ssl/private

Сгенерируйте самоподписанный сертификат RSA 2048 бит:

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

Вы увидите приглашения для ввода данных сертификата (Country, State, Common Name и т.д.). В поле Common Name укажите имя сервера (или FQDN).

Включение TLS в конфигурации vsftpd

Откройте конфигурацию:

nano /etc/vsftpd/vsftpd.conf

Добавьте в конец файла следующие строки, чтобы включить шифрование:

# Path of the SSL certificate
rsa_cert_file=/etc/ssl/private/vsftpd.crt
rsa_private_key_file=/etc/ssl/private/vsftpd.key
# Enable the SSL/TLS
ssl_enable=YES
allow_anon_ssl=NO
force_local_data_ssl=YES
force_local_logins_ssl=YES
# TSL/SSL versions: включаем TLSv1.2 как минимум
ssl_tlsv1=YES
ssl_sslv2=NO
ssl_sslv3=NO
require_ssl_reuse=NO
ssl_ciphers=HIGH
# Enable SSL debugging
debug_ssl=YES

Примечание: параметр require_ssl_reuse=NO нужен для некоторых клиентов, но может снизить безопасность повторного использования сессий. Оцените требования к безопасности вашей инфраструктуры.

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

systemctl restart vsftpd

Проверка TLS-подключения

Проба подключиться через стандартный ftp-клиент покажет ошибку, так как он не поддерживает FTPS:

ftp 172.20.10.3

Ожидаемый вывод:

Connected to 172.20.10.3.
220 (vsFTPd 3.0.2)
Name (172.20.10.3:root): vyom
530 Non-anonymous sessions must use encryption.
Login failed.
421 Service not available, remote server has closed connection
ftp>

Используйте FTP-клиент с поддержкой FTPS, например FileZilla.

Клиент FileZilla с подключением к FTP-серверу

Откройте Site Manager в FileZilla и создайте новый сайт. Укажите IP, протокол FTP и выберите Use explicit FTP over TLS. Попросите запрашивать пароль и укажите пользователя vyom.

Окно менеджера сайтов FileZilla

Добавление данных FTP-сервера в FileZilla

При подключении FileZilla покажет диалог проверки сертификата — подтвердите и сохраните, если сертификат приемлем.

Ввод пароля в FileZilla

Подтверждение SSL-сертификата в FileZilla

Успешное подключение к FTP-серверу

Важные дополнительные настройки (пассивный режим, chroot, ограничения)

FTP использует два канала: управляющий (порт 21) и канал передачи данных (порт 20 или динамический для пассивного режима). Для стабильной работы в пассивном режиме укажите диапазон пассивных портов и пробросьте их через брандмауэр.

Пример настроек для пассивного диапазона в /etc/vsftpd/vsftpd.conf:

pasv_enable=YES
pasv_min_port=30000
pasv_max_port=30100
pasv_address=YOUR.PUBLIC.IP.OR.FQDN

Откройте диапазон пассивных портов в firewalld:

firewall-cmd --permanent --add-port=30000-30100/tcp
firewall-cmd --reload

Чтобы ограничить пользователей их домашними директориями, включите chroot:

chroot_local_user=YES
allow_writeable_chroot=YES

Если вы используете SELinux, убедитесь, что метки для директорий заданы корректно и ftpd имеет доступ:

semanage fcontext -a -t public_content_t "/home/vyom(/.*)?"
restorecon -Rv /home/vyom

(Если отсутствует semanage, установите пакет policycoreutils-python-utils.)

Рекомендации по безопасности

  • Используйте TLS 1.2 или выше, отключите SSLv2/SSLv3.
  • По возможности используйте сертификат от доверенного центра (Let’s Encrypt). Для FTPS с публичным FQDN можно получить сертификат и указать пути rsa_cert_file/rsa_private_key_file.
  • Отключите анонимный доступ (anonymous_enable=NO).
  • Включите chroot для локальных пользователей (chroot_local_user=YES).
  • Разрешите только сильные шифры (ssl_ciphers) и протестируйте совместимость с клиентами.
  • Рассмотрите использование fail2ban для блокировки повторных неудачных попыток входа.
  • Логи: включите xferlog и debug_ssl для отладки, затем анализируйте /var/log/messages или /var/log/xferlog.

Альтернативы и когда FTPS не подходит

  • SFTP (SSH File Transfer Protocol) — передача файлов по SSH. Работает на порту 22, прост в настройке (openssh), лучше интегрируется с механизмами авторизации Unix и обычно проще в настройке NAT/пассивных портов. Используйте SFTP вместо FTPS если вам не требуется совместимость с устаревшими FTP-клиентами.
  • WebDAV поверх HTTPS — если требуется доступ к файлам через веб и браузеры.

Когда FTPS предпочтителен:

  • Необходима совместимость с существующими FTP-интеграциями и клиентами, которые поддерживают FTPS.

Когда FTPS не подходит:

  • Среда с сложным NAT, где управление пассивными портами затруднено.

Отладка и распространённые проблемы

  1. Проблема: клиент не может подключиться в пассивном режиме.
    • Проверьте, открыт ли диапазон пассивных портов в firewalld.
    • Укажите pasv_address публичный IP сервера (или FQDN).
  2. Проблема: ошибка “530 Non-anonymous sessions must use encryption” при попытке через обычный ftp-клиент.
    • Означает, что сервер требует TLS; используйте FTPS-клиент.
  3. Проблема: SELinux блокирует доступ.
    • Посмотрите AVC-повреждения в audit.log: ausearch -m avc -ts recent или journalctl -t setroubleshoot.
    • Настройте boolean allow_ftpd_full_access=1 или метки файлов.
  4. Проблема: сертификат самоподписан — клиент предупреждает.
    • Для продуктивной среды используйте сертификат от CA или настройте доверие клиентских приложений.

Чек-лист для роли администратора

  • Установлен пакет vsftpd и запущен сервис.
  • Создан FTP-пользователь с ограниченной домашней директорией.
  • Отключён анонимный доступ.
  • Включён chroot для локальных пользователей.
  • Настроен пассивный диапазон портов и проброшен в firewall.
  • SELinux настроен, либо поправлены контексты и boolean-переменные.
  • Настроено шифрование TLS и доступен сертификат.
  • Протестировано подключение через FileZilla (explicit FTP over TLS).
  • Включен логирование и установлены средства обнаружения аномалий (fail2ban).

Критерии приёмки

  1. Пользователь может подключиться по FTPS (explicit FTP over TLS) и передать файл (UPLOAD/DOWNLOAD) без ошибок.
  2. При подключении по обычному FTP (без TLS) не удаётся войти, если требуется шифрование.
  3. Сертификат корректно отдаются сервером и клиент видит TLS-сессию (версия TLS ≥ 1.2).
  4. Передача данных работает в пассивном и активном режимах (если требуется).
  5. Логи фиксируют успешный логин и операции передачи; нет критических ошибок SELinux.

Мини-методология развертывания (SOP)

  1. Подготовка сервера: обновление, резервная копия конфигураций.
  2. Установка vsftpd и OpenSSL.
  3. Создание пользователей и домашней структуры.
  4. Настройка конфигурации vsftpd (chroot, pasv, логирование).
  5. Генерация/установка сертификата и включение TLS.
  6. Настройка firewalld и SELinux.
  7. Тестирование: FileZilla, transfer sanity checks, мониторинг логов.
  8. Документирование и включение alert/backup процедур.

Тестовые сценарии и приёмочные тесты

  • Тест 1: Успешный вход по FTPS, передача файла 1 МБ.
  • Тест 2: Попытка входа без TLS возвращает ошибку 530.
  • Тест 3: Передача в пассивном режиме через NAT работает корректно.
  • Тест 4: Повторная неудачная аутентификация блокируется fail2ban (если настроено).

Миграция и совместимость

CentOS 8 имеет жизненный цикл; при окончании поддержки рассмотрите миграцию на Rocky Linux или AlmaLinux. Конфигурация vsftpd переносится редактированием /etc/vsftpd/vsftpd.conf и копированием сертификатов и ключей.

Заключение

В руководстве показаны шаги по установке vsftpd на CentOS 8, созданию пользователя, базовой конфигурации, настройке firewalld и SELinux, генерации сертификата и включению TLS/FTPS. Дополнительно приведены рекомендации по безопасности, чек-листы и тесты приёмки.

Если нужна помощь с конкретной конфигурацией (например, интеграция с LDAP, настройка SFTP вместо FTPS, или получение сертификата от Let’s Encrypt для FTPS), опишите окружение — подскажу точные команды и последовательность действий.

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


Факто-бокс: ключевые порты и параметры

  • Управляющий порт FTP: 21/TCP
  • Активный режим передачи данных: порт 20/TCP
  • Пасcивный диапазон: настраивается (например, 30000-30100)
  • Рекомендуемая версия TLS: TLSv1.2 и выше
Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро