Задача: Адаптировать установку и настройку сервиса ProFTPd на LTS системе Ubuntu 22.04 Server, т.к. нужно знать нюансы ведь новые сервисы в компании появляются, а значит функционал доступа по FTP будет снова задействован. Да есть доступ к серверу через scp, но для выкладывания с последующим скачиванием для других, лучше просто выложить на FTP и пусть скачиваю либо, как у нас клиент 1C 7.7 связывается с сайтом и взаимодействует с файлами обмена. Ранее я для боевых сайтов расписывал, как для Ubuntu 18.04 использовать/настраивать сервис ProFTPD:

Сейчас адаптирую все под Ubuntu 22.04 LTS Server с учетом своих наработок.

Шаг №1: Подготавливаю систему к последующему использованию:

ekzorchik@srv-ftp:~$ sudo nano /etc/update-manager/release-upgrades
[DEFAULT]
Prompt=never

После нажимаем Ctrl + O, Enter - Ctrl + X (для выхода из редактора)

ekzorchik@srv-ftp:~$ sudo rm -Rf /var/lib/apt/lists
ekzorchik@srv-ftp:~$ sudo apt-get update && sudo apt-get upgrade -y && sudo apt-get dist-upgrade -y
ekzorchik@srv-ftp:~$ sudo reboot
ekzorchik@srv-ftp:~$ uname -a && lsb_release -a
Linux srv-ftp 5.15.0-89-generic #99-Ubuntu SMP Mon Oct 30 20:42:41 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 22.04.3 LTS
Release:        22.04
Codename:       jammy
ekzorchik@srv-ftp:~$

Шаг №2: Устанавливаю приложение ProFTPd на Ubuntu 22.04 Server через дефолтные репозитарии:

ekzorchik@srv-ftp:~$ apt-cache show proftpd-basic | grep Version
Version: 1.3.7c+dfsg-1build1
ekzorchik@srv-ftp:~$ sudo apt-get install -y proftpd-basic
ekzorchik@srv-ftp:~$ sudo netstat -tulpn | grep proftpd
tcp6       0      0 :::21                   :::*                    LISTEN      1231/proftpd: (acce
ekzorchik@srv-ftp:~$

Шаг №3: Устанавливаю Webсервис Nginx:

ekzorchik@srv-ftp:~$ sudo apt-get install -y nginx
ekzorchik@srv-ftp:~$ sudo nano /etc/nginx/nginx.conf
#было
#server_tokens off;
#изменяю на
server_tokens off;

После нажимаем Ctrl + O, Enter - Ctrl + X (для выхода из редактора)

ekzorchik@srv-ftp:~$ sudo rm /etc/nginx/sites-available/default
ekzorchik@srv-ftp:~$ sudo rm /etc/nginx/sites-enabled/default
ekzorchik@srv-ftp:~$ sudo rm -f /usr/share/nginx/html/index.html
ekzorchik@srv-ftp:~$ sudo rm -f /var/www/html/index.nginx-debian.html
ekzorchik@srv-ftp:~$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
ekzorchik@srv-ftp:~$ sudo systemctl restart nginx

Шаг №4: Создаю свой конфигурационный файл на основе дефолтных настроек с учетом моих требований.

ekzorchik@srv-ftp:~$ sudo cp /etc/proftpd/proftpd.conf /etc/proftpd/proftpd.conf.backup
ekzorchik@srv-ftp:~$ sudo rm -f /etc/proftpd/proftpd.conf
ekzorchik@srv-ftp:~$ sudo nano /etc/proftpd/proftpd.conf
Include /etc/proftpd/modules.conf
# Отключаем использование протокола IPv6
UseIPv6 off
IdentLookups off
# Имя FTP-сервера
ServerName "srv-ftp"
# Режим запуска FTP-сервера
ServerType standalone
DeferWelcome off
MultilineRFC2228 on
DefaultServer on
ShowSymlinks on
# Таймаут на передачу: вошел и не начал передачу выраженное в мили секундах
TimeoutNoTransfer 600
# Подвисание во время передачи файлов выраженное в мили секундах
TimeoutStalled 600
# Таймаут бездействия после входа выраженное в мили секундах
TimeoutIdle 1200
DisplayLogin welcome.msg
DisplayChdir .message true
ListOptions "-l"
# Запретить закачивать файлы, начинающиеся на точку
DenyFilter \*.*/
DefaultRoot ~
AuthUserFile /etc/proftpd/ftpd.passwd
Port 21
# запрещаем подключаться от имени суперпользователя
RootLogin off
PassivePorts 49152 65534
<IfModule mod_dynmasq.c>
</IfModule>
# Максимальное количество дочерних процессов
MaxInstances 30
# Пользователь и группа, под которой работает демон
User proftpd
Group nogroup
# маска для ограничения создания директорий и файлов
Umask 022 022
# Разрешить перезаписывать существующие файлы
AllowOverwrite on
DebugLevel 10
TransferLog /var/log/proftpd/xfer.log
SystemLog /var/log/proftpd/proftpd.log
ExtendedLog /var/log/proftpd/auth.log AUTH auth
SetEnv TZ :/etc/localtime
<IfModule mod_quotatab.c>
QuotaEngine off
</IfModule>
<IfModule mod_ratio.c>
Ratios off
</IfModule>
<IfModule mod_delay.c>
DelayEngine on
</IfModule>
<IfModule mod_ctrls.c>
ControlsEngine off
ControlsMaxClients 2
ControlsLog /var/log/proftpd/controls.log
ControlsInterval 5
ControlsSocket /var/run/proftpd/proftpd.sock
</IfModule>
<IfModule mod_ctrls_admin.c>
AdminControlsEngine off
</IfModule>
Include /etc/proftpd/tls.conf
Include /etc/proftpd/conf.d/

После нажимаем Ctrl + O, Enter - Ctrl + X (для выхода из редактора)

Шаг №5: Перезапускаю сервис proftpd:

ekzorchik@srv-ftp:~$ sudo systemctl enable proftpd
Synchronizing state of proftpd.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install enable proftpd
ekzorchik@srv-ftp:~$ sudo systemctl restart proftpd.s
proftpd.service  proftpd.socket
ekzorchik@srv-ftp:~$ sudo systemctl restart proftpd.service
ekzorchik@srv-ftp:~$ sudo systemctl status proftpd.service
Job for proftpd.service failed because the control process exited with error code.
See "systemctl status proftpd.service" and "journalctl -xeu proftpd.service" for details.
ekzorchik@srv-ftp:~$
Dec 04 14:40:36 srv-ftp proftpd[2947]: 2023-12-04 14:40:36,176 srv-ftp proftpd[2947]: fatal: unknown configuration directive 'IdentLookups>

закомментировал #IdentLookups off в /etc/proftpd/proftpd.conf

ekzorchik@srv-ftp:~$ sudo systemctl restart proftpd.service

ekzorchik@srv-ftp:~$ sudo netstat -tulpn | grep proftpd

tcp        0      0 0.0.0.0:21              0.0.0.0:*               LISTEN      2993/proftpd: (acce

ekzorchik@srv-ftp:~$

Шаг №6: Создаю файл в котором будут указаны виртуальные учетные записи ftp и их пароли в зашифрованном виде:

ekzorchik@srv-ftp:~$ sudo touch /etc/proftpd/ftpd.passwd
ekzorchik@srv-ftp:~$ sudo chmod 440 /etc/proftpd/ftpd.passwd
ekzorchik@srv-ftp:~$ sudo chown proftpd.root /etc/proftpd/ftpd.passwd
ekzorchik@srv-ftp:~$ sudo ls -l /etc/proftpd/ftpd.passwd
-r--r----- 1 proftpd root 0 Dec  4 14:14 /etc/proftpd/ftpd.passwd
ekzorchik@srv-ftp:~$

Шаг №7: Добавляю в файле где перечислены оболочки консоли, которые можно назначать пользователям, что есть еще пустая (/bin/false), т.е. без доступа к интерпретатору команд:

ekzorchik@srv-ftp:~$ sudo nano /etc/shells
/bin/sh
/bin/bash
/usr/bin/bash
/bin/rbash
/usr/bin/rbash
/usr/bin/sh
/bin/dash
/usr/bin/dash
/usr/bin/tmux
/usr/bin/screen
/bin/false

После нажимаем Ctrl + O, Enter - Ctrl + X (для выхода из редактора)

Шаг №8: Получаю идентификатор учетной записи Webсервиса, т.е. www-data:

ekzorchik@srv-ftp:~$ id www-data
uid=33(www-data) gid=33(www-data) groups=33(www-data)
ekzorchik@srv-ftp:~$

Шаг №9: Определяю, какой ID пользователя самый последний в системе:

ekzorchik@srv-ftp:~$ cat /etc/passwd | tail -n1 | awk -F ":" '{print $3}'
115
ekzorchik@srv-ftp:~$

но лучше не после этого создавать, а к примеру, с 10000

Шаг №10: Создаю виртуального пользователя:

ekzorchik@srv-ftp:~$ sudo ftpasswd --passwd --file=/etc/proftpd/ftpd.passwd --name=ftp1 --shell=/bin/false --home=/var/www/html --uid=10000 --gid=33
ftpasswd: using alternate file: /etc/proftpd/ftpd.passwd
ftpasswd: creating passwd entry for user ftp1

Password: задаю пароль, к примеру Aa1234567aA
Re-type password: повторяю задаваемый пароль, т.е. Aa1234567aA

ftpasswd: entry created
ekzorchik@srv-ftp:~$

Шаг №11: Проверяю содержимое файла /etc/proftpd/ftpd.passwd:

ekzorchik@srv-ftp:~$ sudo bash -c "cat /etc/proftpd/ftpd.passwd"
ftp1:$1$gha1bzqF$flsTco5XWK6U51MAJafVU1:10000:33::/var/www/html:/bin/false
ekzorchik@srv-ftp:~$

Шаг №12: Теперь с учетом задания которое я поставил себе оформляя ее как заметку нужно дать виртуальным пользователем доступ на запись в указанный домашним каталогом:

ekzorchik@srv-ftp:~$ sudo chmod -R 770 /var/www/html/
ekzorchik@srv-ftp:~$ sudo chown -R www-data:www-data /var/www/html/

Шаг №13: Проверяю, что могу подключить к FTP с другой машины и в качестве авторизации указываю один из созданных виртуальных логинов со своим паролем (Login: ftp1 Pass: Aa1234567aA)

root@ekzorchik:~# ftp 172.33.33.117 21
Connected to 172.33.33.117.
220 ProFTPD Server (srv-ftp) [172.33.33.117]
Name (172.33.33.117:root): ftp1
331 Password required for ftp1
Password:
230 User ftp1 logged in
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> mkdir one
257 "/one" - Directory successfully created
ftp>
ftp> quit
221 Goodbye.
root@ekzorchik:~#
ekzorchik@srv-ftp:~$ sudo ls -l /var/www/html/
total 4
drwxr-xr-x 2 10000 www-data 4096 Dec  4 14:59 one
ekzorchik@srv-ftp:~$

Настройки подключения через winscp

  • File protocol: FTP
  • Encryption: No encryption
  • Host name: 172.33.33.117
  • Port number: 21
  • User name: ftp1
  • Password: Aa1234567aA

Настройки подключения к ProFTPd через WinSCP

Т.к. права 770, то успешно имею полные права в каталоге /var/www/html

Права 770, имею полные права под пользователем ftp1

Если нужно через консоль передать с локальной системы на удаленную:

ftp> put out.txt

Если нужно через консоль с текущей передать на удаленную:

ftp> get out.txt out1.txt

т.е. на локальной системе с которой я инициализировал подключение через FTP в каталоге откуда делал ftp IP-Address 21 будет файл out1.txt

ls -l out1.txt

-rw-r--r-- 1 ekzorchik ekzorchik 286104 апр 8 13:32 out1.txt

итого доступ в назначенный /var/www/html/ каталог для виртуального пользователя сервиса ftp1 работает. Права на чтение, запись, выполнение есть, т.е. я могу обновлять файлы сайта.

Итого заметка работоспособна. Если смотреть на нее и на нее же, но написанную ранее на базе Ubuntu 18.04 Server то ничего не изменилось, кроме одного единственного параметра в конфигурационном файле на который у меня пожаловался сервис при запуске. Это кстати хорошо, я за единство настройки конфигурационных файлов сервисов дабы проще было администрировать и понимать, что не так если что-то не работает. Ах да, я администрировать должен только я, а не множество людей.

На этом заметка завершена, с уважением автор блога Олло Александр aka ekzorchik.