Добавить в корзинуПозвонить
Найти в Дзене

Настройка FTP сервера в Linux (vsftpd)

Проблема Вам нужно организовать обмен файлами с партнёрами или между отделами компании. Протокол 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)

Проблема

Вам нужно организовать обмен файлами с партнёрами или между отделами компании. Протокол 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 сервер. Он подходит как для простых внутренних задач, так и для защищённой передачи данных через интернет. Благодаря гибкой системе конфигурации вы можете тонко настроить права доступа, изоляцию пользователей и шифрование канала.

Настройка FTP-сервера в Linux (vsftpd) | Андрей Коровин | Сисадмин | IT-инженер