Установка и настройка FTPS сервера — vsftpd
Реализуемая схема
В этой статье я покажу процесс подготовки FTPS сервера на Linux, при этом каждый пользователь будет видеть только свой каталог.

Установка и настройка FTP сервера
Я буду использовать Very Secure FTP Daemon (vsftpd), устанавливаем пакет:
sudo apt update && \
sudo apt install vsftpd
Перед настройками сервера, сделаем резервную копию конфига:
sudo mv /etc/vsftpd.conf \
/etc/vsftpd.conf.orig
Отредактируем конфиг:
sudo nano /etc/vsftpd.conf
# connection
listen=YES
listen_ipv6=NO
pasv_enable=YES
pasv_min_port=40000
pasv_max_port=50000
idle_session_timeout=600
data_connection_timeout=120
# authorization
anonymous_enable=NO
local_enable=YES
pam_service_name=vsftpd
userlist_enable=YES
userlist_file=/etc/vsftpd.userlist
userlist_deny=NO
# chroot
write_enable=YES
local_umask=077
chroot_local_user=YES
user_sub_token=$USER
local_root=/home/$USER/files
allow_writeable_chroot=YES
# logging
xferlog_enable=YES
xferlog_std_format=YES
xferlog_file=/var/log/vsftpd.log
После настройки перезапустим службу:
sudo systemctl restart vsftpd
Проверим слушает ли наш ftp сервер входящие соединения:
sudo ss -ltupn | grep vsftpd
- Про утилиту
ssя писал здесь . Должны получить примерно такой вывод:
tcp LISTEN 0 32 0.0.0.0:21 0.0.0.0:* users:(("vsftpd",pid=25215,fd=3))
Разбираем конфиг
Различные опции хорошо описаны здесь , на русском языке. В своём конфиге я использовал следующие опции:
- connection
listen=YES— ожидать входящие соединения;listen_ipv6=NO— для ipv6 не ожидать входящие соединения;pasv_enable=YES— у нас будет пассивный FTP сервер;pasv_min_port=40000иpasv_max_port=50000— порты для передачи данных;idle_session_timeout=600— таймаут управляющего соединения (порт 21);data_connection_timeout=120— таймаут соединения передачи данных (PASV порт);
- authorization
anonymous_enable=NO— запрещаем вход анонимных пользователей;local_enable=YES— разрешаем вход по ftp для локальных пользователей;pam_service_name=vsftpd— использовать PAM библиотеки;userlist_enable=YES— разрешим вход только для перечисленных пользователей;userlist_file=/etc/vsftpd.userlist— перечислим пользователей в этом файле;userlist_deny=NO— пользователи, которые есть в списке не будут отбрасываться;
- chroot
write_enable=YES— разрешаем писать на ftp (загружать или удалять файлы);local_umask=077— маска для вновь создаваемых файлов;chroot_local_user=YES— пользователи ограничены только своей домашней папкой;user_sub_token=$USER— для правильной подстановки имени пользователя;local_root=/home/$USER/files— при входе пользователь попадает в каталог files в домашнем каталоге;allow_writeable_chroot=YES— разрешаем писать в chroot каталоге;
- logging
xferlog_enable=YES— записывать в лог файл все транзакции по передаче файлов;xferlog_std_format=YES— использовать стандартный формат лога;xferlog_file=/var/log/vsftpd.log— файл лога.
Создание FTP-пользователей
Создадим пользователей:
sudo useradd -m ftp_user1; sudo passwd ftp_user1
sudo useradd -m ftp_user2; sudo passwd ftp_user2
Создадим для них ftp каталоги:
sudo mkdir -p /home/ftp_user{1,2}/files && \
sudo chown ftp_user1:ftp_user1 /home/ftp_user1/files && \
sudo chown ftp_user2:ftp_user2 /home/ftp_user2/files
И запишем их в vsftpd.userlist, все остальные пользователи, не смогут подключаться по FTP:
sudo nano /etc/vsftpd.userlist
ftp_user1
ftp_user2
Включение TLS
Сейчас уже можно подключиться к нашему FTP-серверу, но логины и пароли, при этом, будут передаваться открытым текстом. Чтобы этого избежать включим поддержку TLS, превратив FTP-сервер в FTPS-сервер.
Создадим самоподписанный ssl сертификат на 10 лет:
sudo openssl req -x509 -nodes -days 3650 -newkey rsa:2048 \
-keyout /etc/ssl/private/vsftpd.pem \
-out /etc/ssl/private/vsftpd.pem
И добавим в конфиг опции связанные с SSL:
sudo nano /etc/vsftpd.conf
# SSL
ssl_enable=YES
rsa_cert_file=/etc/ssl/private/vsftpd.pem
rsa_private_key_file=/etc/ssl/private/vsftpd.pem
allow_anon_ssl=NO
force_local_data_ssl=YES
force_local_logins_ssl=YES
ssl_tlsv1=YES
ssl_sslv2=NO
ssl_sslv3=NO
Использованные опции:
ssl_enable=YES— включим ssl;rsa_cert_file=/etc/ssl/private/vsftpd.pem— путь к файлу ключа;rsa_private_key_file=/etc/ssl/private/vsftpd.pem— путь к файлу сертификата;allow_anon_ssl=NO— запретим анонимные подключения по ssl;force_local_data_ssl=YES— разрешим передачу данных только по ssl;force_local_logins_ssl=YES— разрешим подключаться только по ssl;ssl_tlsv1=YES— разрешим алгоритм tlsv1;ssl_sslv2=NO— запретим устаревший sslv2;ssl_sslv3=NO— запретим устаревший sslv3.
Затем перезапустим службу:
sudo systemctl restart vsftpd
Подключение к серверу (FTP-клиенты)
Для подключения можно использовать:
- FileZilla,
- WinSCP.
Обычный Windows Проводник не получится использовать с нашим сервером, так как он не умеет подключаться по FTPS, только по FTP без SSL.
Я покажу как подключиться к FTP серверу с помощью приложения FileZilla. После запуска приложения вы увидите такое окно:

Слева будет локальная файловая система, а справа удалённая. Вы можете совершить быстрое подключение, указав: хост, имя пользователя, пароль и порт. Или можете сохранить подключение, чтобы использовать его в последующем несколько раз. Для того, чтобы сохранить подключение, откройте менеджер сайтов, выбрав в меню Файл / Менеджер сайтов. Каждый сайт — это сохранённое подключение. Создавая новый сайт вы можете указать ip-адрес, порт, логин и пароль и другое:

Дальше, используя созданные сайты, вы сможете подключаться к различным FTP серверам.
Формат логов
Далее я подключился с помощью FileZilla к своему FTP серверу. И выполнил некоторые действия:
- Скачал текстовый файл.
- Загрузил бинарный файл.
- Загрузил текстовый файл.
В журнале (/var/log/vsftpd.log) появились следующие записи:
Fri Mar 20 11:11:15 2026 1 192.168.1.9 0 /test.txt a _ o r ftp_user1 ftp 0 * c
Fri Mar 20 11:11:35 2026 1 192.168.1.9 719200 /licenceaddin-3.0.31-11018.amd64.deb b _ i r ftp_user1 ftp 0 * c
Fri Mar 20 11:12:04 2026 1 192.168.1.9 1448 /licenceserver.conf a _ i r ftp_user1 ftp 0 * c
Здесь видна следующая информация:
- дата и время транзакции, а также ip-адрес клиента;
- размер файла в байтах и сам файл;
- режим передачи:
a— ASCII (текстовый),b— двоичный,
- символ
_— означает, что не было произведено никаких специальных операций, - направление передачи
o— файл скачали,i— файл загрузили;
- символ
r— означает что пользователь был зарегистрирован в системе, - дальше идёт имя пользователя.
Логирование желательно включать, чтобы в случае чего знать, кто и что делал с файлами по FTP.
Итог
Из статьи вы узнали как подготовить FTPS сервер на Linux. Я все действия выполнял на системе Debian 13, возможно на других дистрибутивах что-то будет отличаться. Показал как защитить сервер с помощью TLS протокола, и как использовать userlist, для создания списка разрешённых пользователей.
Если понравилась статья, подпишись на мой канал в VK или Telegram .