В этой статье я покажу как создать FTPS сервер на Linux (Debian 13) с отдельными каталогами для разных пользователей.
🕒 5 мин.
Реализуемая схема
В этой статье я покажу процесс подготовки 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
- Должны получить примерно такой вывод:
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 172.28.81.9 0 /test.txt a _ o r ftp_user1 ftp 0 * c Fri Mar 20 11:11:35 2026 1 172.28.81.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 172.28.81.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.