Создание FTPS сервера на Linux

В этой статье я покажу как создать FTPS сервер на Linux (Debian 11) с отдельными каталогами для разных пользователей.















Реализуемая схема




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




SFTP сервер на Linux с отдельными каталогами для разных пользователей
FTPS сервер




Установка и настройка FTP сервера




Я буду использовать Very Secure FTP Daemon (vsftpd), устанавливаем пакет:




# apt install vsftpd




После установки, у вас появится новая служба — vsftpd.service:




# systemctl status vsftpd.service
● vsftpd.service - vsftpd FTP server
     Loaded: loaded (/lib/systemd/system/vsftpd.service; enabled; vendor preset: enabled)
     Active: active (running) since Fri 2022-12-09 13:14:31 MSK; 26s ago
    Process: 1135 ExecStartPre=/bin/mkdir -p /var/run/vsftpd/empty (code=exited, status=0/SUCCESS)
   Main PID: 1136 (vsftpd)
      Tasks: 1 (limit: 4915)
     Memory: 1.0M
     CGroup: /system.slice/vsftpd.service
             └─1136 /usr/sbin/vsftpd /etc/vsftpd.conf




Перед настройками сервера, сделаем резервную копию конфига:




# cp /etc/vsftpd.conf /etc/vsftpd.conf.orig




Отредактируем конфиг:




# nano /etc/vsftpd.conf
anonymous_enable=NO # запрещаем вход анонимных пользователей
local_enable=YES # разрешаем вход по ftp для локальных пользователей
write_enable=YES # разрешаем писать на ftp (загружать или удалять файлы)
local_umask=077 # маска для вновь создаваемых файлов
xferlog_enable=YES # записывать в лог файл все транзакции по передаче файлов
xferlog_std_format=YES # использовать стандартный формат лога
xferlog_file=/var/log/vsftpd.log # файл лога
connect_from_port_20=YES # исходящие с сервера FTP-соединения по 20 порту вместо случайного
listen=YES # ожидать входящие соединения
listen_ipv6=NO # для ipv6 не ожидать входящие соединения
pam_service_name=vsftpd # использовать PAM библиотеки
userlist_enable=YES # разрешим вход только для перечисленных пользователей
userlist_file=/etc/vsftpd.userlist # перечислим пользователей в этом файле
userlist_deny=NO # пользователи, которые есть в списке не будут отбрасываться
chroot_local_user=YES # пользователи ограничены только своей домашней папкой




Различные опции хорошо описаны здесь, на русском языке.




После настройки перезапустим службу:




# systemctl restart vsftpd.service




По желанию, проверим слушает ли наш ftp сервер входящие соединения:




# ss -ltupn | grep vsftpd
tcp  LISTEN 0     32     0.0.0.0:21     0.0.0.0:*    users:(("vsftpd",pid=1273,fd=3))




Создание FTP-пользователей




Создадим первого и второго пользователя и запишем их в userlist. Все остальные, локальные пользователи, не смогут подключаться по протоколу FTP:




# adduser ftp_user1
# adduser ftp_user2

# nano /etc/vsftpd.userlist
ftp_user1
ftp_user2





Включение TLS




Сейчас уже можно подключиться к нашему FTP-серверу, но логины и пароли, при этом, будут передаваться открытым текстом. Чтобы этого избежать включим поддержку TLS, превратив FTP-сервер в FTPS-сервер.




Создадим самоподписанный ssl сертификат на 10 лет:




# openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout /etc/ssl/private/vsftpd.pem -out /etc/ssl/private/vsftpd.pem




И добавим опции в конфиг:




# nano /etc/vsftpd.conf
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




Затем перезапустим службу:




# systemctl restart vsftpd.service




Подключение к серверу (FTP-клиенты)




Для подключения можно использовать FileZilla, WinSCP, или обычный Windows Проводник.




Я покажу как подключиться к FTP серверу с помощью приложения FileZilla. После запуска приложения вы увидите такое окно:




Внешний вид приложения FileZilla
FileZilla




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




FileZilla - создание сайта
FileZilla — создание сайта




Дальше, используя созданные сайты, вы сможете подключаться к различным FTP серверам.




Формат логов




Далее я подключился с помощью FileZilla к своему FTP серверу. И выполнил некоторые действия:




  • Скачал текстовый файл.



  • Загрузил бинарный файл.



  • Загрузил текстовый файл.




В журнале (/var/log/vsftpd.log) появились следующие записи:




Mon Dec 12 15:06:29 2022 1 192.168.0.5 6 /user2/test.txt a _ o r ftp_user2 ftp 0 * c
Mon Dec 12 15:25:39 2022 1 192.168.0.5 7254 /user2/report.json b _ i r ftp_user2 ftp 0 * c
Mon Dec 12 15:27:53 2022 1 192.168.0.5 6 /user2/test.txt a _ i r ftp_user2 ftp 0 * c




Здесь видна следующая информация:




  • дата и время транзакции, а также ip-адрес клиента (Mon Dec 12 15:06:29 2022 1 192.168.0.5);



  • размер файла в байтах и сам файл (7254 /user2/report.json);



  • режим передачи: (a — ASCII, b — двоичный), символ (_) — означает, что не было произведено никаких специальных операций, и направление передачи (o — файл скачали, i — файл загрузили) — (a _ o) или (b _ i);



  • символ (r) — означает что пользователь был зарегистрирован в системе, дальше идёт имя пользователя (r ftp_user2).




Логирование желательно включать, чтобы в случае чего знать, кто и что делал с файлами по FTP.









Итог




Из статьи вы узнали как подготовить FTPS сервер на Linux. Я все действия выполнял на системе Debian 11, но на Ubuntu 22.04 всё делается аналогично. Показал как защитить сервер с помощью TLS протокола, как использовать userlist, для создания списка разрешённых пользователей.



2022-12-13T12:51:09
Сервера Linux