Задача: Адаптировать установку и настройку сервиса 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
Т.к. права 770
, то успешно имею полные права в каталоге /var/www/html
Если нужно через консоль передать с локальной системы на удаленную:
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.