Проблема
Вам нужно организовать обмен файлами с партнёрами или между отделами компании. Протокол FTP простой и распространённый способ передачи файлов, но стандартный FTP передаёт логин, пароль и сами файлы в открытом виде. Это неприемлемо, если данные чувствительны или передаются через интернет.
Можно, конечно, использовать SCP или SFTP (через SSH), но не все клиенты их поддерживают. Некоторые партнёры привыкли работать именно с FTP, а во внутренней сети офиса шифрование не всегда требуется. Нужен FTP-сервер, который будет быстрым, надёжным, а при необходимости поддерживающим шифрование.
Кстати на винде можно плюс-минус тоже самое , смотрите ftp server на Windows .
Решение
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:
В терминале набираем:
sudo apt update
sudo apt install vsftpd -y
CentOS/RHEL:
Дальше все команды приведенные ниже в терминале Линукс.
sudo yum install vsftpd -y
После установки служба запускается автоматически. Проверьте статус:
sudo systemctl status vsftpd
Если не запущена, запустите и добавьте в автозагрузку:
sudo systemctl start vsftpd
sudo systemctl enable vsftpd
Шаг 2. Базовая конфигурация
Основной конфигурационный файл vsftpd:
-
Ubuntu/Debian:
/etc/vsftpd.conf -
CentOS/RHEL:
/etc/vsftpd/vsftpd.conf
Сделайте резервную копию исходного конфига:
sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.bak # Ubuntu/Debian
sudo cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak # CentOS/RHEL
Откройте файл для редактирования:
sudo nano /etc/vsftpd.conf # Ubuntu/Debian
sudo nano /etc/vsftpd/vsftpd.conf # CentOS/RHEL
Базовая конфигурация для локальной сети (с поддержкой локальных пользователей и возможностью записи):
# Базовая конфигурация 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
Подробное описание всех опций доступно в man-странице vsftpd.conf :
man vsftpd.conf
Шаг 3. Настройка анонимного доступа (если нужен)
Если требуется предоставить публичный доступ без аутентификации, измените параметры:
anonymous_enable=YES
anon_upload_enable=YES # разрешить анонимную загрузку
anon_mkdir_write_enable=YES # разрешить создание папок
anon_root=/srv/ftp # корневая папка для анонимов
По умолчанию анонимный пользователь работает в директории /srv/ftp (или /var/ftp в CentOS/RHEL) . Создайте эту папку и настройте права:
sudo mkdir -p /srv/ftp/upload
sudo chmod 755 /srv/ftp
sudo chown ftp:ftp /srv/ftp/upload
Для анонимной загрузки может потребоваться дополнительная настройка SELinux (на CentOS/RHEL) :
sudo setsebool -P allow_ftpd_anon_write on
Шаг 4. Изоляция пользователей (chroot)
Чтобы ограничить локальных пользователей их домашними директориями и не дать им видеть остальную файловую систему, включите chroot:
chroot_local_user=YES
При включённом chroot домашняя директория пользователя становится корнем FTP. Однако в новых версиях vsftpd требуется, чтобы домашняя папка не была доступна на запись для самого пользователя (иначе возникает ошибка 500) . Решение — создать внутри домашней папки поддиректорию для загрузок или включить опцию:
allow_writeable_chroot=YES
Если нужно изолировать только некоторых пользователей, используйте список:
chroot_local_user=NO
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd.chroot_list
Затем добавьте в файл /etc/vsftpd.chroot_list имена пользователей, которых нужно изолировать .
Шаг 5. Ограничение доступа по списку пользователей
vsftpd позволяет контролировать, какие пользователи могут входить:
userlist_enable=YES
userlist_deny=NO
userlist_file=/etc/vsftpd.user_list
-
userlist_deny=NO— разрешён вход только пользователям из списка. -
userlist_deny=YES— запрещён вход пользователям из списка.
Создайте файл и добавьте в него разрешённых пользователей (по одному на строку):
echo "username" | sudo tee -a /etc/vsftpd.user_list
Для дополнительной безопасности можно запретить доступ системным пользователям через файл /etc/ftpusers (формат — один пользователь на строку) .
Шаг 6. Настройка пассивного режима и брандмауэра
Для работы FTP через NAT (домашний роутер, облачный сервер) обязательно включите пассивный режим и укажите диапазон портов:
pasv_enable=YES
pasv_min_port=30000
pasv_max_port=31000
Откройте порты в брандмауэре:
Ubuntu/Debian (ufw):
sudo ufw allow 21/tcp
sudo ufw allow 30000:31000/tcp
sudo ufw reload
CentOS/RHEL (firewalld):
sudo firewall-cmd --permanent --add-service=ftp
sudo firewall-cmd --permanent --add-port=30000-31000/tcp
sudo firewall-cmd --reload
Подробнее о конфигурации пассивного режима можно прочитать в официальной документации RHEL .
Шаг 7. Применение конфигурации
После внесения изменений проверьте конфигурацию и перезапустите службу:
sudo systemctl restart vsftpd
Проверьте, что служба запустилась без ошибок:
sudo systemctl status vsftpd
Логи vsftpd пишутся в файл, указанный в xferlog_file (по умолчанию /var/log/vsftpd.log). Для отладки можно посмотреть логи в реальном времени:
sudo tail -f /var/log/vsftpd.log
Шаг 8. Настройка FTPS (FTP over SSL/TLS)
Для шифрования передаваемых данных и паролей необходимо настроить FTPS. Сначала создайте самоподписанный сертификат :
Ubuntu/Debian:
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
-keyout /etc/ssl/private/vsftpd.key \
-out /etc/ssl/certs/vsftpd.pem
CentOS/RHEL:
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:
# Включить 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 .
Полная документация по настройке SSL в vsftpd доступна в Red Hat Knowledgebase .
Шаг 9. Создание пользователя для FTP
Если нужно создать выделенного пользователя только для FTP (без возможности входа в систему через SSH):
sudo useradd -m -s /bin/false ftpuser
sudo passwd ftpuser
Добавьте /bin/false в список разрешённых оболочек, чтобы PAM не блокировал вход :
echo /bin/false | sudo tee -a /etc/shells
Если вы используете список разрешённых пользователей (userlist_deny=NO), добавьте ftpuser в файл /etc/vsftpd.user_list.
Шаг 10. Проверка работы
Тестирование через командную строку:
ftp localhost
# или для FTPS используйте lftp:
lftp -u ftpuser,password ftp://localhost
Тестирование через FileZilla (Windows/Linux):
- Протокол: FTP — File Transfer Protocol
- Шифрование: Требовать явное FTP over TLS (для FTPS)
- Хост: IP-адрес сервера
- Логин и пароль: созданные учётные данные
Если всё настроено правильно, вы сможете подключаться, загружать и скачивать файлы.
Устранение распространённых проблем
vsftpd это надёжный, безопасный и высокопроизводительный FTP-сервер, который подходит как для простых внутренних задач, так и для защищённой передачи данных через интернет. Благодаря гибкой системе конфигурации вы можете тонко настроить права доступа, изоляцию пользователей и шифрование канала.







