vsftpd и FTPS: установка и защита

Быстрые ссылки
- Что такое FTP?
- Установка vsftpd
- Настройка FTPS
Что такое FTP?
FTP (File Transfer Protocol) — стандартный протокол для передачи файлов между клиентом и удалённым сервером. Он проще в использовании, чем некоторые командные альтернативы, например:
scpи часто применяется вместе с графическими клиентами вроде FileZilla, где файлы перетаскиваются мышкой между локальной и удалённой папкой.

FTP исторически использовался для публичного обмена файлами. Сегодня его чаще применяют для административных задач и автоматизации. Важно помнить: стандартный FTP передаёт данные в открытом виде — поэтому для безопасности нужно применять FTPS (FTP поверх TLS) или использовать SFTP (FTP через SSH), в зависимости от сценария.
Важно: если пользователи входят в систему через FTP с использованием своих локальных учётных записей, они будут иметь те же права доступа, что и эти учётные записи. Планируйте права и изоляцию заранее.
Установка vsftpd
Ниже приведены шаги для Debian/Ubuntu-подобных систем; для других дистрибутивов используйте соответствующий пакетный менеджер (yum/dnf/pacman).
- Установка пакета:
sudo apt-get install vsftpd- Запуск службы и включение автозапуска:
systemctl start vsftpdsystemctl enable vsftpd- Аутентификация: основные варианты
- Анонимный FTP — любой может войти без пароля. Используется для публичной раздачи файлов. По умолчанию отключён.
- Вход локальных пользователей — любой пользователь из /etc/passwd может подключаться по имени и паролю.
Рекомендация: включайте локальную аутентификацию и держите анонимный доступ выключенным, если это не требуется для публичных загрузок.
- Базовая конфигурация
Откройте конфигурационный файл /etc/vsftpd.conf в любимом редакторе и измените или добавьте следующие строки:
local_enable=YESЕсли нужно разрешить загрузку файлов через FTP, включите запись:
write_enable=YESПосле изменения конфигурации перезапустите сервис:
systemctl restart vsftpd- Ограничение доступа по списку пользователей
Если хотите разрешать FTP только определённым аккаунтам, используйте userlist. Создайте файл /etc/vsftpd.userlist и добавьте по одной строке имя каждого разрешённого пользователя:
nano /etc/vsftpd.userlistА затем включите следующие опции в /etc/vsftpd.conf:
userlist_enable=YES
userlist_file=/etc/vsftpd.userlist
userlist_deny=NOЭто позволит вход только пользователям из списка и запретит всем остальным.
- Ограничение домашним каталогом (chroot)
Чтобы предотвратить доступ пользователей к верхним директориям файловой системы, включите chroot:
chroot_local_user=YESПерезапустите vsftpd, чтобы изменения вступили в силу:
systemctl restart vsftpdНастройка FTPS (TLS)
Стандартный FTP — незашифрованный. Настройка TLS защищает авторизацию и передаваемые данные.
- Генерация ключа и запроса на подпись (CSR)
openssl genrsa -des3 -out FTP.keyopenssl req -new -key FTP.key -out certificate.csr- Удаление пароля из ключа (vsftpd требует ключ без пароля)
cp FTP.key FTP.key.origopenssl rsa -in FTP.key.orig -out ftp.key- Создание самоподписанного сертификата (для тестов/внутреннего использования):
openssl x509 -req -days 365 -in certificate.csr -signkey ftp.key -out mycertificate.crt- Копирование ключа и сертификата в системную директорию сертификатов (пример для систем с /etc/pki):
cp ftp.key /etc/pki/tls/certs/cp mycertificate.crt /etc/pki/tls/certs- Включение TLS в /etc/vsftpd.conf — добавьте или отредактируйте эти строки:
ssl_enable=YES
allow_anon_ssl=YES
ssl_tlsv1=YES
ssl_sslv2=NO
ssl_sslv3=NO
rsa_cert_file=/etc/pki/tls/certs/mycertificate.crt
rsa_private_key_file=/etc/pki/tls/certs/ftp.key
ssl_ciphers=HIGH
require_ssl_reuse=NOПосле изменений перезапустите:
systemctl restart vsftpdВажно: самоподписанный сертификат вызовет предупреждение в клиентах. Для публичных сервисов используйте сертификаты от доверенного центра сертификации или внутреннего PKI.
Безопасность и жёсткая настройка
- Отключите анонимный доступ, если он не нужен (anonymous_enable=NO).
- Используйте chroot для всех локальных пользователей (chroot_local_user=YES) и не давайте chroot пользователям с повышенными правами.
- Ограничьте набор шифров через ssl_ciphers и запретите устаревшие протоколы (SSLv2/SSLv3).
- Логи: настройте ротацию логов и мониторинг /var/log/vsftpd.log.
- Принудительная проверка паролей: используйте PAM и политики сложности паролей.
- Альтернатива: если у вас уже настроен SSH, рассмотрите SFTP (более простой и безопасный вариант для большинства задач).
Кому доверить FTPS:
- Только администраторам — доступ root должен быть запрещён для FTP.
- Пользователи без прав администратора — в chroot и с минимальными правами.
Когда FTPS не подходит
- Если нужен доступ по ключам (SSH) и тот же набор пользователей уже в SSH — используйте SFTP.
- Для интеграции с современными веб-приложениями часто удобнее HTTPS+WebDAV или API с авторизацией.
Чек-листы
Чек-лист администратора при запуске сервера
- Установлен vsftpd и включён в автозапуск
- local_enable=YES, write_enable при необходимости
- Анонимный доступ отключён (anonymous_enable=NO)
- chroot_local_user=YES для ограничения пользователей
- Настроен userlist для белого списка, если требуется
- TLS включён и сертификаты доступны по путям в конфиге
- Логирование включено и настраивается ротация
- Правила файрвола разрешают только нужные порты (обычно 21 и диапазон пассивных портов)
Чек-лист пользователя (что ожидать)
- Получил имя пользователя и пароль
- Получил адрес сервера и порт
- Понял, что используется FTPS — клиент должен поддерживать TLS
- При подключении клиент может попросить подтвердить сертификат (если самоподписанный)
Методика быстрой диагностики
- Проверить статус сервиса: systemctl status vsftpd
- Посмотреть логи: tail -n 200 /var/log/vsftpd.log или /var/log/syslog
- Попробовать подключиться с локальной машины: ftp localhost или FileZilla
- Проверить открытые порты: ss -lnp | grep vsftpd
- Если FTPS не подключается — убедиться, что клиент использует «explicit FTP over TLS», и открыты пассивные порты в файрволе.
Роли и ответственность
- Системный администратор: установка, конфигурация, управление сертификатами, мониторинг логов.
- Владелец данных: определение прав доступа и политики хранения файлов.
- Аудитор/безопасник: проверка шифров, политик доступа, логирования и ротации.
Небольшой словарь (1 строка)
- FTPS — FTP поверх TLS (шифрует канал); SFTP — FTP через SSH (альтернативный протокол).
Критерии приёмки
- Успешный вход по локальной учётной записи через FTPS
- Передача файла как от клиента к серверу, так и обратно
- Записи о сессиях присутствуют в логах
- Пользователь ограничен своим домашним каталогом (chroot)
Частые ошибки и их исправление
- Ошибка: клиент не может установить TLS-соединение. Проверьте rsa_cert_file и rsa_private_key_file, убедитесь, что ключ не зашифрован паролем.
- Ошибка: невозможно загрузить/скачать файлы в chroot. Убедитесь, что права файлов и директорий корректны и что vsftpd не запускается с привилегиями, мешающими chroot.
- Ошибка: пассивные соединения не устанавливаются. Проверьте диапазон пассивных портов и правила файрвола.
Короткое резюме
vsftpd — простой и надёжный FTP-сервер. Для безопасной работы используйте FTPS (TLS), запрещайте анонимный доступ, ограничивайте пользователей chroot и следите за логами.
FAQ
Нужно ли мне использовать FTPS или лучше SFTP?
FTPS хорош для совместимости с существующими FTP-клиентами и инфраструктурой. SFTP (через SSH) обычно проще в настройке и безопаснее по умолчанию. Выбор зависит от совместимости и требований к управлению ключами/сертификатами.
Что делать, если клиент жалуется на самоподписанный сертификат?
Для внутренних сервисов добавьте ваш CA/сертификат в доверенные хранилища клиентов. Для публичных сервисов используйте сертификат от доверенного центра сертификации.
Какие порты нужно открыть в файрволе?
Обычно порт 21 для командного канала и диапазон пассивных портов (настраивается в vsftpd.conf через pasv_min_port и pasv_max_port). Не забудьте также разрешить исходящие подключения для клиентов.
Похожие материалы
Как сохранить мотивацию к тренировкам зимой
Больше фильтров, линз и стикеров для Snapchat
Версии фото в Adobe Lightroom: просмотр, создание, удаление
Панель анимации PowerPoint: руководство
Kodi + Amazon Echo: голосовое управление