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

Установка и настройка vSFTPd на Ubuntu 22.04

• 8 min read • Серверы • Обновлено 23 Nov 2025
Установка vSFTPd на Ubuntu 22.04
Установка vSFTPd на Ubuntu 22.04

vSFTPd — быстрый и лёгкий FTP-демон для Unix-подобных систем. В этой инструкции показано, как установить vsftpd на Ubuntu 22.04, включить TLS/SSL, настроить виртуальных пользователей и chroot, открыть порты в UFW и провести базовую проверку доступа. В конце — чек-листы, тесты и рекомендации по повышению безопасности.

Краткое содержание

  • Что делает этот гайд: установка, генерация самоподписанного сертификата, конфигурация vsftpd, настройка UFW, создание FTP-пользователя в chroot и проверка подключения.
  • Опытный уровень: подойдёт для системных администраторов и инженеров DevOps с базовым знанием Linux.

Что такое vSFTPd

vSFTPd (Very Secure FTP Daemon) — свободный FTP-сервер для Unix-подобных систем под лицензией GNU GPL. Он оптимизирован по ресурсам, поддерживает PAM и SSL/TLS, IPv6, виртуальные пользователи, виртуальные IP и работу как отдельный демон или через inetd. vSFTPd часто применяется в корпоративных окружениях благодаря стабильности и зрелости проекта.

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

  • Сервер с Ubuntu 22.04.
  • Неразовый пользователь с правами sudo.
  • FTP-клиент на локальной машине (например, FileZilla) для проверки.

Что вы получите после выполнения гайда

  • Рабочий FTP-сервер на vsftpd с TLS/SSL (самоподписанный сертификат).
  • Ограниченный chroot‑каталог для каждого FTP-пользователя.
  • Открытые порты в UFW для управляющих и пассивных соединений.
  • Набор тестов и чек-листов для приёмки.

логотип vsftpd

Установка пакета vsftpd

Перед установкой обновите индекс пакетов:

sudo apt update

Установите пакет vsftpd:

sudo apt install vsftpd

процесс установки vsftpd

Проверьте статус сервиса и его автозапуск:

sudo systemctl is-enabled vsftpd
sudo systemctl status vsftpd

Ожидаемый результат: сервис включён (enabled) и активен (running).

проверка статуса сервиса vsftpd

Генерация SSL/TLS сертификата и базовая конфигурация

Для безопасного подключения рекомендуем включить TLS/SSL. В демонстрации используется самоподписанный сертификат, хранящийся в /etc/ssl/private/vsftpd.pem.

Создайте сертификат:

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

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

генерация самоподписанного сертификата

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

sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.orig
sudo nano /etc/vsftpd.conf

Основные настройки, которые необходимо установить или раскомментировать:

anonymous_enable=NO
local_enable=YES
write_enable=YES
chroot_local_users=YES

user_sub_token=$USER
local_root=/home/$USER/chroot

pasv_min_port=40000
pasv_max_port=50000

userlist_enable=YES
userlist_file=/etc/vsftpd.userlist
userlist_deny=NO

rsa_cert_file=/etc/ssl/private/vsftpd.pem
rsa_private_key_file=/etc/ssl/private/vsftpd.pem
ssl_enable=YES
force_local_data_ssl=YES
force_local_logins_ssl=YES
ssl_tlsv1=YES
ssl_sslv2=NO
ssl_sslv3=NO
require_ssl_reuse=NO
ssl_ciphers=HIGH

Пояснения ключевых параметров:

  • anonymous_enable=NO — отключает анонимный доступ.
  • local_enable=YES и write_enable=YES — позволяют локальным пользователям входить и загружать файлы.
  • chroot_local_users=YES — помещает пользователя в его домашний каталог (jail) после входа.
  • user_sub_token и local_root — шаблон для размещения каждого пользователя в /home/имя/chroot.
  • pasv_min_port/pasv_max_port — диапазон портов для пассивных соединений (PASV).
  • userlist_* — позволяет ограничить список пользователей, которые могут логиниться.
  • ssl_* — включение TLS и запрет небезопасных версий протокола.

После сохранения файла создайте файл со списком разрешённых пользователей:

sudo touch /etc/vsftpd.userlist

Примените изменения:

sudo systemctl restart vsftpd
sudo systemctl status vsftpd

применение конфигурации vsftpd

Настройка UFW для FTP

vsftpd использует управляющий порт 21 (и 20 для активного режима), а для пассивного режима — настроенный диапазон портов (в примере 40000–50000). Если сервер за NAT, перенаправьте порт 21 и диапазон пассивных портов на внешний IP.

Проверьте статус UFW:

sudo ufw status

Если UFW не активен, разрешите SSH и включите брандмауэр:

sudo ufw allow "OpenSSH"
sudo ufw enable

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

sudo ufw allow 20:21/tcp
sudo ufw allow 40000:50000/tcp
sudo ufw reload
sudo ufw status

конфигурация UFW для vsftpd

Если сервер находится за оборудованием NAT (роутер/облачный LB), убедитесь, что порты проброшены наружу и в конфигурации vsftpd либо задан публичный IP для пассивного режима (параметр pasv_address), либо клиентам сообщается внешний IP вручную.

Совет: если сервер в облаке, проверьте также сетевые политики провайдера (Security Groups).

Создание FTP-пользователя и настройка chroot

vSFTPd по умолчанию использует PAM, поэтому у пользователя должен быть валидный shell. Если назначить /bin/false или /usr/sbin/nologin, вход через FTP не будет работать. Решение — добавить специальный dummy-shell, например /bin/ftpdummy.

Создайте dummy-shell и сделайте его исполняемым:

echo -e '#!/bin/sh
echo "Shell for FTP users only."' | sudo tee -a /bin/ftpdummy
sudo chmod a+x /bin/ftpdummy

Добавьте новый shell в /etc/shells:

sudo sh -c 'echo "/bin/ftpdummy" >> /etc/shells'

Создадим пользователя alice с этим shell:

sudo useradd -m -s /bin/ftpdummy alice
sudo passwd alice

Создайте структуру chroot и каталоги для данных:

mkdir -p /home/alice/chroot
mkdir -p /home/alice/chroot/{data,upload}

Установите владельца и права. ПРАВИЛО: каталог chroot не должен быть записываем для пользователя (чтобы vSFTPd позволил chroot). Обычно это разрешение 550 (r-xr-x—), а вложенные каталоги — 750, чтобы пользователь мог туда записывать файлы.

sudo chown -R alice: /home/alice/chroot
sudo chmod 550 /home/alice/chroot

sudo chown -R alice: /home/alice/chroot/{data,upload}
sudo chmod 750 /home/alice/chroot/{data,upload}

Добавьте alice в список разрешённых пользователей и перезапустите сервис:

echo "alice" | sudo tee -a /etc/vsftpd.userlist
sudo systemctl restart vsftpd

структура chroot и права для alice

Подключение и проверка через FTP-клиент

Откройте FileZilla или другой FTP-клиент, укажите хост/IP, логин alice и пароль, затем нажмите Quickconnect. При первом подключении вас попросят принять самоподписанный сертификат — выберите доверять и принять.

После входа вы должны увидеть только каталог chroot и подкаталоги data и upload. Загрузить файлы можно в data или upload, но не в корень chroot.

подтверждение сертификата в FileZilla

проверка загрузки файлов в upload

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

  • Сервер отвечает на порт 21 и принимает TLS-соединения.
  • Паспортный (passive) диапазон портов открыт и доступен клиентам.
  • Пользователь alice может залогиниться по FTP/TLS и видеть только /home/alice/chroot.
  • Пользователь может загружать файлы в /home/alice/chroot/{data,upload} и не может записывать в корень chroot.
  • Сервис перезапускается и сохраняет новую конфигурацию после перезагрузки ОС.

Тесты и контрольные проверки

  1. Проверка подключения по TLS:
openssl s_client -connect yourserver.example.com:21 -starttls ftp

Ожидается успешный TLS handshake и сертификат vsftpd.

  1. Проверка пассивных портов (пример на другом хосте):
nc -vz yourserver.example.com 40000
nc -vz yourserver.example.com 50000
  1. Функциональный тест с FileZilla: загрузить файл в upload, скачать его обратно.

  2. Проверка прав файлов и владельцев:

ls -ld /home/alice/chroot
ls -ld /home/alice/chroot/{data,upload}

Чек-лист администратора перед вводом в эксплуатацию

  • Создан самоподписанный сертификат или установлен сертифиат от CA.
  • Отключён anonymous access.
  • Настроен безопасный диапазон пассивных портов и открыт в UFW/облачной безопасности.
  • Установлены корректные права на chroot и подкаталоги.
  • Список разрешённых пользователей заполнен.
  • Выполнены тесты TLS и PASV.
  • Настроен мониторинг и логирование доступа (syslog/rsyslog/ELK).

Устранение неполадок — распространённые ошибки и решения

  1. «Не удаётся подключиться / соединение тайм-аутится»

    • Проверьте, что сервер слушает порт 21: sudo ss -tlnp | grep :21.
    • Убедитесь, что UFW и облачные security groups разрешают 21 и диапазон 40000–50000.
    • Если сервер за NAT, настройте проброс портов.
  2. «PASV соединение не устанавливается / список файлов пуст»

    • Скорее всего, диапазон пассивных портов закрыт. Откройте его в UFW и на уровне сети провайдера.
    • Проверьте параметр pasv_address в /etc/vsftpd.conf, если сервер за NAT, укажите внешний IP.
  3. «Permission denied при попытке загрузки»

    • Проверьте права и владельца каталогов: chroot не должен быть записываемым для пользователя.
    • Проверьте, что пользователь входит через правильный shell (/bin/ftpdummy указан в /etc/shells).
  4. «TLS handshake failed / certificate not trusted»

    • Самоподписанный сертификат не будет доверен клиентом по умолчанию — вручную примите сертификат в клиенте или используйте CA-signed сертификат.
    • Проверьте дату/время сервера — неверное время вызывает ошибки валидации сертификата.
  5. «vSFTPd не запускается после изменений конфигурации»

    • Просмотрите логи: sudo journalctl -u vsftpd -e и /var/log/syslog.
    • Верните резервную копию /etc/vsftpd.conf.orig при ошибке синтаксиса.

Когда vSFTPd не подходит — альтернативы и ограничения

  • Нужен защищённый доступ с ключевой аутентификацией и шифрованием на уровне соединения? Рассмотрите SFTP (OpenSSH) — проще в настройке через SSH, не требует отдельных диапазонов пассивных портов.
  • Требуется передача больших объёмов и высокая производительность при одновременных соединениях — оцените nginx/FTP-решения или коммерческие SFTP-proxy.
  • Требуется интеграция с Windows AD/LDAP — возможна, но потребует дополнительной настройки PAM/SSSD.

Безопасность и жёсткое усиление

  • Используйте сертификат от доверенного CA для устранения предупреждений и исключения ручного принятия сертификата клиентами.
  • Отключите SSLv2/SSLv3 и, при возможности, TLSv1 (включайте TLS 1.2/1.3), замените параметр ssl_tlsv1 на поддержку современных версий, если ваша версия vsftpd/openssl это позволяет.
  • Включите логирование и централизованный сбор логов (rsyslog/ELK) для аудита подключений и действий.
  • Минимизируйте права на каталоги: chroot — только чтение/выполнение для корня, записи — только в специально отведённые подкаталоги.
  • Ограничьте входы по IP, если это возможно (UFW, fail2ban). Настройте fail2ban для блокировки множественных неудачных попыток входа.
  • Поддерживайте систему и пакеты в актуальном состоянии.

Приватность и соответствие (GDPR)

  • FTP передаёт имена файлов и метаданные в явном виде; TLS защищает трафик, но администратору следует задокументировать, какие персональные данные хранятся на сервере и кто имеет к ним доступ.
  • Храните логи в соответствии с политикой удержания данных и возможными требованиями GDPR: минимизируйте время хранения и контролируйте доступ к логам.
  • Используйте надёжные пароли и, по возможности, двухфакторную аутентификацию на уровне управления системой.

Тест-кейсы и критерии приёмки

  • TC1: Успешный TLS handshake на порту 21 с валидным сертификатом.
  • TC2: FTP-клиент подключается, отображает каталоги chroot и может загружать файл в /upload.
  • TC3: Попытка записи в корень chroot отклоняется с ошибкой прав.
  • TC4: Пассивное соединение открывает заданный порт из диапазона 40000–50000.
  • TC5: После перезагрузки сервера сервис vsftpd автоматически запускается и принимает соединения.

Таблица прав и портов (кратко)

  • Порт 21 TCP — управляющее соединение FTP (AUTH TLS, команды)
  • Порт 20 TCP — активный режим передачи данных (если используется)
  • Диапазон 40000–50000 TCP — пассивные (PASV) соединения данных
  • /home/USER/chroot — права 550 (не записываемый для пользователя)
  • /home/USER/chroot/{data,upload} — права 750 (записываемые пользователем)

Рекомендации по масштабированию и эксплуатации

  • Для большого количества пользователей рассмотрите разделение нагрузки через несколько инстансов и балансировщик.
  • Храните userdata и файлы на отдельных файловых хранилищах (NAS/SMB/NFS), убедившись в совместимости прав и безопасности chroot.
  • Автоматизируйте добавление пользователей через скрипт/Ansible, соблюдая шаблон прав и создание /etc/vsftpd.userlist.

Короткое объявление (для рассылки или внутреннего портала)

В рамках стандартной поддержки развернут FTP-сервер на базе vSFTPd на Ubuntu 22.04. Сервер использует TLS для защиты соединений, ограничивает доступ пользователей в chroot и настроен через UFW. Для тестирования доступна учётная запись alice. При необходимости предоставим инструкцию по добавлению пользователей или выдаче сертификата от CA.

Когда это ломается — галерея редких граничных случаев

  • Проблемы с chroot при использовании NFS: NFS-монтирование может ломать ожидания прав доступа. Решение — отказываться от chroot с NFS или корректно настраивать root_squash и права.
  • Клиенты, не поддерживающие TLS: старые устройства могут работать только по незащищённому FTP. Рекомендуется обновление клиентов или настройка отдельного окружения только для доверенных устройств (не рекомендуется).

Итог и дальнейшие шаги

vSFTPd остаётся хорошим выбором, если вам нужен традиционный FTP с поддержкой TLS, виртуальных пользователей и лёгкой конфигурацией. Для большего уровня безопасности рассмотрите SFTP (через OpenSSH) или внедрение сертификата от публичного CA. Настройте мониторинг и автоматизированные бэкапы, а также процедуру удаления/блокировки пользователей.

Ключевые шаги для внедрения в продакшн:

  • Заменить самоподписанный сертификат на CA-signed.
  • Настроить fail2ban или аналог для предотвращения брутфорса.
  • Добавить аудит доступа и мониторинг logs.
Поделиться: 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 быстро