Проблема
Вам нужно организовать обмен файлами с партнёрами или между отделами компании. Протокол FTP простой и распространённый способ передачи файлов, но стандартный FTP передаёт логин, пароль и сами файлы в открытом виде. Это неприемлемо, если данные чувствительны или передаются через интернет.
Можно использовать SCP или SFTP (через SSH), но не все клиенты их поддерживают. Некоторые партнёры привыкли работать именно с FTP, а во внутренней сети офиса шифрование не всегда требуется. Нужен FTP сервер, который будет быстрым, надёжным, а при необходимости поддерживающим шифрование.
Решение
vsftpd (Very Secure FTP Daemon) это FTP сервер, разработанный с акцентом на безопасность, производительность и стабильность. Он является стандартным FTP сервером в большинстве дистрибутивов Linux (RHEL, CentOS, Fedora, Ubuntu).
Ключевые особенности vsftpd. Поддержка анонимного и локального доступа. Возможность изоляции пользователей в их домашних директориях (chroot). Поддержка FTPS (FTP over SSL/TLS) для шифрования канала. Настройка прав на загрузку, скачивание и создание каталогов. Гибкое управление списками пользователей. Высокая производительность даже при большом количестве соединений.
Мы настроим vsftpd на Ubuntu Server. Инструкции с небольшими изменениями подойдут для Debian, CentOS, RHEL. Пройдём от установки до создания защищённого FTPS сервера.
Пошаговая инструкция
Шаг 1. Установка vsftpd
Ubuntu, Debian.
text
sudo apt update
sudo apt install vsftpd -y
CentOS, RHEL.
text
sudo yum install vsftpd -y
После установки служба запускается автоматически. Проверьте статус.
text
sudo systemctl status vsftpd
Если не запущена, запустите и добавьте в автозагрузку.
text
sudo systemctl start vsftpd
sudo systemctl enable vsftpd
Шаг 2. Базовая конфигурация
Основной конфигурационный файл vsftpd.
Ubuntu, Debian: /etc/vsftpd.conf
CentOS, RHEL: /etc/vsftpd/vsftpd.conf
Сделайте резервную копию исходного конфига.
text
sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.bak # Ubuntu/Debian
sudo cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak # CentOS/RHEL
Откройте файл для редактирования.
text
sudo nano /etc/vsftpd.conf # Ubuntu/Debian
sudo nano /etc/vsftpd/vsftpd.conf # CentOS/RHEL
Базовая конфигурация для локальной сети (с поддержкой локальных пользователей и возможностью записи).
text
# Базовая конфигурация vsftpd
listen=YES
listen_ipv6=NO
# Анонимный доступ (отключаем, если не нужен)
anonymous_enable=NO
# Доступ локальных пользователей системы
local_enable=YES
# Разрешить запись
write_enable=YES
# Маска прав для новых файлов (022 = права 755 для папок, 644 для файлов)
local_umask=022
# Включить логирование
xferlog_enable=YES
xferlog_file=/var/log/vsftpd.log
xferlog_std_format=YES
# Баннер приветствия
ftpd_banner=Welcome to FTP server.
# Пассивный режим (важно для работы через NAT или брандмауэр)
pasv_enable=YES
pasv_min_port=30000
pasv_max_port=31000
Шаг 3. Настройка анонимного доступа (если нужен)
Если требуется предоставить публичный доступ без аутентификации, измените параметры.
text
anonymous_enable=YES
anon_upload_enable=YES # разрешить анонимную загрузку
anon_mkdir_write_enable=YES # разрешить создание папок
anon_root=/srv/ftp # корневая папка для анонимов
По умолчанию анонимный пользователь работает в директории /srv/ftp (или /var/ftp в CentOS, RHEL). Создайте эту папку и настройте права.
text
sudo mkdir -p /srv/ftp/upload
sudo chmod 755 /srv/ftp
sudo chown ftp:ftp /srv/ftp/upload
Для анонимной загрузки может потребоваться дополнительная настройка SELinux (на CentOS, RHEL).
text
sudo setsebool -P allow_ftpd_anon_write on
Шаг 4. Изоляция пользователей (chroot)
Чтобы ограничить локальных пользователей их домашними директориями и не дать им видеть остальную файловую систему, включите chroot.
text
chroot_local_user=YES
При включённом chroot домашняя директория пользователя становится корнем FTP. Однако в новых версиях vsftpd требуется, чтобы домашняя папка не была доступна на запись для самого пользователя (иначе возникает ошибка 500). Решение: создать внутри домашней папки поддиректорию для загрузок или включить опцию.
text
allow_writeable_chroot=YES
Если нужно изолировать только некоторых пользователей, используйте список.
text
chroot_local_user=NO
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd.chroot_list
Затем добавьте в файл /etc/vsftpd.chroot_list имена пользователей, которых нужно изолировать.
Шаг 5. Ограничение доступа по списку пользователей
vsftpd позволяет контролировать, какие пользователи могут входить.
text
userlist_enable=YES
userlist_deny=NO
userlist_file=/etc/vsftpd.user_list
userlist_deny=NO разрешает вход только пользователям из списка.
userlist_deny=YES запрещает вход пользователям из списка.
Создайте файл и добавьте в него разрешённых пользователей (по одному на строку).
text
echo "username" | sudo tee -a /etc/vsftpd.user_list
Для дополнительной безопасности можно запретить доступ системным пользователям через файл /etc/ftpusers (формат: один пользователь на строку).
Шаг 6. Настройка пассивного режима и брандмауэра
Для работы FTP через NAT (домашний роутер, облачный сервер) обязательно включите пассивный режим и укажите диапазон портов.
text
pasv_enable=YES
pasv_min_port=30000
pasv_max_port=31000
Откройте порты в брандмауэре.
Ubuntu, Debian (ufw).
text
sudo ufw allow 21/tcp
sudo ufw allow 30000:31000/tcp
sudo ufw reload
CentOS, RHEL (firewalld).
text
sudo firewall-cmd --permanent --add-service=ftp
sudo firewall-cmd --permanent --add-port=30000-31000/tcp
sudo firewall-cmd --reload
Шаг 7. Применение конфигурации
После внесения изменений проверьте конфигурацию и перезапустите службу.
text
sudo systemctl restart vsftpd
Проверьте, что служба запустилась без ошибок.
text
sudo systemctl status vsftpd
Логи vsftpd пишутся в файл, указанный в xferlog_file (по умолчанию /var/log/vsftpd.log). Для отладки можно посмотреть логи в реальном времени.
text
sudo tail -f /var/log/vsftpd.log
Шаг 8. Настройка FTPS (FTP over SSL/TLS)
Для шифрования передаваемых данных и паролей необходимо настроить FTPS. Сначала создайте самоподписанный сертификат.
Ubuntu, Debian.
text
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
-keyout /etc/ssl/private/vsftpd.key \
-out /etc/ssl/certs/vsftpd.pem
CentOS, RHEL.
text
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
-keyout /etc/pki/tls/private/vsftpd.key \
-out /etc/pki/tls/certs/vsftpd.pem
Затем добавьте в конфигурационный файл vsftpd.
text
# Включить SSL
ssl_enable=YES
# Пути к сертификату и ключу
rsa_cert_file=/etc/ssl/certs/vsftpd.pem
rsa_private_key_file=/etc/ssl/private/vsftpd.key
# Разрешить SSL для анонимов
allow_anon_ssl=NO
# Требовать SSL для локальных пользователей
force_local_logins_ssl=YES
force_local_data_ssl=YES
# Разрешить TLS (рекомендуется, TLS безопаснее SSL)
ssl_tlsv1=YES
ssl_sslv2=NO
ssl_sslv3=NO
# Отключить требование сертификата от клиента (для простоты)
require_ssl_reuse=NO
После перезапуска vsftpd сервер будет принимать только защищённые соединения. Клиенты должны использовать Explicit FTPS (порт 21) с включённым TLS или SSL.
Шаг 9. Создание пользователя для FTP
Если нужно создать выделенного пользователя только для FTP (без возможности входа в систему через SSH).
text
sudo useradd -m -s /bin/false ftpuser
sudo passwd ftpuser
Добавьте /bin/false в список разрешённых оболочек, чтобы PAM не блокировал вход.
text
echo /bin/false | sudo tee -a /etc/shells
Если вы используете список разрешённых пользователей (userlist_deny=NO), добавьте ftpuser в файл /etc/vsftpd.user_list.
Шаг 10. Проверка работы
Тестирование через командную строку.
text
ftp localhost
Для FTPS используйте lftp.
text
lftp -u ftpuser,password ftp://localhost
Тестирование через FileZilla (Windows или Linux).
Протокол: FTP – File Transfer Protocol
Шифрование: Требовать явное FTP over TLS (для FTPS)
Хост: IP адрес сервера
Логин и пароль: созданные учётные данные
Если всё настроено правильно, вы сможете подключаться, загружать и скачивать файлы.
Устранение распространённых проблем
ПроблемаПричинаРешениеОшибка 500 «OOPS: cannot change directory»SELinux блокирует доступsudo setsebool -P ftpd_full_access onОшибка 530 «Login incorrect»Пользователь не в списке разрешённых или неверный парольПроверьте userlist_enable и userlist_deny, добавьте пользователя в списокОшибка 500 после включения chrootДомашняя папка доступна на записьВключите allow_writeable_chroot=YES или измените права папкиПассивный режим не работаетНе открыты порты в брандмауэреОткройте порты pasv_min_port – pasv_max_portFTPS не подключаетсяКлиент использует не тот тип шифрованияИспользуйте Explicit FTPS (порт 21), не ImplicitПользователь с /bin/false не может войти/bin/false отсутствует в /etc/shellsДобавьте оболочку в /etc/shells
vsftpd это надёжный, безопасный и высокопроизводительный FTP сервер. Он подходит как для простых внутренних задач, так и для защищённой передачи данных через интернет. Благодаря гибкой системе конфигурации вы можете тонко настроить права доступа, изоляцию пользователей и шифрование канала.