Установка и настройка 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
Перед установкой обновите индекс пакетов:
sudo apt updateУстановите пакет vsftpd:
sudo apt install vsftpd
Проверьте статус сервиса и его автозапуск:
sudo systemctl is-enabled vsftpd
sudo systemctl status vsftpdОжидаемый результат: сервис включён (enabled) и активен (running).

Генерация 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
Настройка 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
Если сервер находится за оборудованием 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
Подключение и проверка через FTP-клиент
Откройте FileZilla или другой FTP-клиент, укажите хост/IP, логин alice и пароль, затем нажмите Quickconnect. При первом подключении вас попросят принять самоподписанный сертификат — выберите доверять и принять.
После входа вы должны увидеть только каталог chroot и подкаталоги data и upload. Загрузить файлы можно в data или upload, но не в корень chroot.


Критерии приёмки
- Сервер отвечает на порт 21 и принимает TLS-соединения.
- Паспортный (passive) диапазон портов открыт и доступен клиентам.
- Пользователь alice может залогиниться по FTP/TLS и видеть только /home/alice/chroot.
- Пользователь может загружать файлы в /home/alice/chroot/{data,upload} и не может записывать в корень chroot.
- Сервис перезапускается и сохраняет новую конфигурацию после перезагрузки ОС.
Тесты и контрольные проверки
- Проверка подключения по TLS:
openssl s_client -connect yourserver.example.com:21 -starttls ftpОжидается успешный TLS handshake и сертификат vsftpd.
- Проверка пассивных портов (пример на другом хосте):
nc -vz yourserver.example.com 40000
nc -vz yourserver.example.com 50000Функциональный тест с FileZilla: загрузить файл в upload, скачать его обратно.
Проверка прав файлов и владельцев:
ls -ld /home/alice/chroot
ls -ld /home/alice/chroot/{data,upload}Чек-лист администратора перед вводом в эксплуатацию
- Создан самоподписанный сертификат или установлен сертифиат от CA.
- Отключён anonymous access.
- Настроен безопасный диапазон пассивных портов и открыт в UFW/облачной безопасности.
- Установлены корректные права на chroot и подкаталоги.
- Список разрешённых пользователей заполнен.
- Выполнены тесты TLS и PASV.
- Настроен мониторинг и логирование доступа (syslog/rsyslog/ELK).
Устранение неполадок — распространённые ошибки и решения
«Не удаётся подключиться / соединение тайм-аутится»
- Проверьте, что сервер слушает порт 21:
sudo ss -tlnp | grep :21. - Убедитесь, что UFW и облачные security groups разрешают 21 и диапазон 40000–50000.
- Если сервер за NAT, настройте проброс портов.
- Проверьте, что сервер слушает порт 21:
«PASV соединение не устанавливается / список файлов пуст»
- Скорее всего, диапазон пассивных портов закрыт. Откройте его в UFW и на уровне сети провайдера.
- Проверьте параметр pasv_address в /etc/vsftpd.conf, если сервер за NAT, укажите внешний IP.
«Permission denied при попытке загрузки»
- Проверьте права и владельца каталогов: chroot не должен быть записываемым для пользователя.
- Проверьте, что пользователь входит через правильный shell (/bin/ftpdummy указан в /etc/shells).
«TLS handshake failed / certificate not trusted»
- Самоподписанный сертификат не будет доверен клиентом по умолчанию — вручную примите сертификат в клиенте или используйте CA-signed сертификат.
- Проверьте дату/время сервера — неверное время вызывает ошибки валидации сертификата.
«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.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента