Более того, об этом было в теме xinetd + systemd, но ... это было в непрофильной теме + это было в 2012 году11 Службы с активацией в стиле inetd
сокетная автивация серверов
Модераторы: Olej, bellic, vikos
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
сокетная автивация серверов
Этот метод (запуска снрверов) описан в документации systemd для администраторов, стр. 46:
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
сокетная автивация серверов
Точно так же, как и с кэширующим сервером DNS, разработчики systemd (Lennart Poettering с сотоварищи) не могли пройти мимо 40-летней истории успеха суперсерверов и запуска сервисов по сетевым запросам. В systemd этот способ запуска серверов получил название сокет-активации и его описание занимает в документации целую большую главу.
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
сокетная автивация серверов
В каталоге сервисов systemd есть несколько сценариев запуска сокетной активации. В принципе, мы могли бы рассматривать и использовать сценарии для SSH:
(Здесь 1-й сценарий ssh.service — это традиционный сценарий запуска SSH сервера, а вот 2 следующих: ssh@.service и ssh.socket — именно относятся к сокетной активации.)
Но для чистоты эксперимента мы создадим схему сокетной активации совсем другого сервера, которого не по умолчанию под управлением systemd, а именно — сервера протокола FTP.
Код: Выделить всё
$ pwd
/usr/lib/systemd/system
$ ls ssh*
ssh.service ssh@.service ssh.socket
Но для чистоты эксперимента мы создадим схему сокетной активации совсем другого сервера, которого не по умолчанию под управлением systemd, а именно — сервера протокола FTP.
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
сокетная автивация серверов
О признанной популярности протокола FTP говорит хотя бы просто перечень пакетов в репозиториях дистрибутивов:
Код: Выделить всё
$ aptitude search ftpd | grep -v tftp
p ftpd - FTP-сервер
p ftpd-ssl - FTP-сервер с поддержкой SSL
p fusiondirectory-plugin-pureftpd - pureftpd plugin for FusionDirectory
p fusiondirectory-plugin-pureftpd-schema - LDAP schema for FusionDirectory pureftpd plugin
p gosa-plugin-pureftpd - pureftpd plugin for GOsa²
p gosa-plugin-pureftpd-schema - LDAP schema for GOsa² pureftpd plugin
p inetutils-ftpd - Сервер FTP
p inetutils-ftpd:i386 - Сервер FTP
p mysqmail-pure-ftpd-logger - real-time logging system in MySQL - Pure-FTPd traffic-logger
p nordugrid-arc-gridftpd - ARC GridFTP server
p owftpd - FTP daemon providing access to 1-Wire networks
v proftpd -
v proftpd-abi-1.3.7c -
p proftpd-basic - Transitional dummy package for ProFTPD
p proftpd-core - Versatile, virtual-hosting FTP daemon - binaries
p proftpd-dev - Versatile, virtual-hosting FTP daemon - development files
p proftpd-doc - Versatile, virtual-hosting FTP daemon - documentation
p proftpd-mod-autohost - ProFTPD module mod_autohost
p proftpd-mod-case - ProFTPD module mod_case
p proftpd-mod-clamav - ProFTPD module mod_clamav
p proftpd-mod-counter - ProFTPD module mod_counter
p proftpd-mod-crypto - Versatile, virtual-hosting FTP daemon - TLS/SSL/SFTP modules
v proftpd-mod-dnsbl -
p proftpd-mod-fsync - ProFTPD module mod_fsync
p proftpd-mod-geoip - Versatile, virtual-hosting FTP daemon - GeoIP module
p proftpd-mod-geoip2 - ProFTPD module mod_geoip2
p proftpd-mod-ldap - Versatile, virtual-hosting FTP daemon - LDAP module
p proftpd-mod-msg - ProFTPD module mod_msg
p proftpd-mod-mysql - Versatile, virtual-hosting FTP daemon - MySQL module
p proftpd-mod-odbc - Versatile, virtual-hosting FTP daemon - ODBC module
p proftpd-mod-pgsql - Versatile, virtual-hosting FTP daemon - PostgreSQL module
p proftpd-mod-proxy - ProFTPD module mod_proxy
p proftpd-mod-snmp - Versatile, virtual-hosting FTP daemon - SNMP module
p proftpd-mod-sqlite - Versatile, virtual-hosting FTP daemon - SQLite3 module
p proftpd-mod-statsd - ProFTPD module mod_statsd
p proftpd-mod-tar - ProFTPD module mod_tar
p proftpd-mod-vroot - ProFTPD module mod_vroot
p proftpd-mod-wrap - Versatile, virtual-hosting FTP daemon - tcpwrapper module
p pure-ftpd - защищённый и эффективный FTP сервер
p pure-ftpd-common - Pure-FTPd FTP server (Common Files)
p pure-ftpd-ldap - защищённый и эффективный FTP-сервер с идентификацией пользователей через LDAP
p pure-ftpd-mysql - Secure and efficient FTP server with MySQL user authentication
p pure-ftpd-postgresql - Secure and efficient FTP server with PostgreSQL user authentication
p python-pyftpdlib-doc - documentation for Python FTP server library
p python3-pyftpdlib - Python FTP server library (Python 3)
p twoftpd - простой и защищённый FTP-сервер (программы)
p twoftpd-run - a simple secure efficient FTP server
p vsftpd - легковесный, эффективный FTP-сервер, написанный с упором на безопасность
p vsftpd-dbg - lightweight, efficient FTP server written for security (debug)
Код: Выделить всё
$ sudo apt install pure-ftpd
Чтение списков пакетов… Готово
Построение дерева зависимостей… Готово
Чтение информации о состоянии… Готово
Следующие пакеты устанавливались автоматически и больше не требуются:
libhiredis0.14 libmemcached11 libmemcachedutil2 proftpd-doc
Для их удаления используйте «sudo apt autoremove».
Будут установлены следующие дополнительные пакеты:
openbsd-inetd pure-ftpd-common tcpd
Следующие пакеты будут УДАЛЕНЫ:
proftpd-core
Следующие НОВЫЕ пакеты будут установлены:
openbsd-inetd pure-ftpd pure-ftpd-common tcpd
...
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
сокетная автивация серверов
Для организации сокетной активации этого сервера создадим 2 файла в каталоге сценариев systemd (всё это делаем с правами root):
И заполняем их следующим содержимым (сервис proftpd сам устанавливает при инсталляции свои сценарии сокетной активации, поэтому можете их взять за основу):
Собственно, на этом всё!
Код: Выделить всё
# pwd
/usr/lib/systemd/system
# touch pure-ftpd.socket
# touch pure-ftpd@.service
Код: Выделить всё
$ cat /usr/lib/systemd/system/pure-ftpd.socket
[Unit]
Description=pure-ftp FTP Server Activation Socket
Conflicts=pure-ftpd.service
[Socket]
ListenStream=21
Accept=true
[Install]
WantedBy=sockets.target
Код: Выделить всё
$ cat /usr/lib/systemd/system/pure-ftpd@.service
[Unit]
Description=pure-ftpd FTP Server
After=network-online.target
[Service]
ExecStart=-/usr/sbin/pure-ftpd
StandardInput=socket
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
сокетная автивация серверов
Но для таких экспериментов, или тестирования результатов своей работы, нужно тщательно убедиться, что никакой другой сервер FTP статически не конфигурирован в системе:
Код: Выделить всё
# systemctl status pure-ftpd
● pure-ftpd.service
Loaded: loaded (/etc/init.d/pure-ftpd; generated)
Active: active (exited) since Fri 2023-04-28 15:36:57 EEST; 1h 32min ago
Docs: man:systemd-sysv-generator(8)
Process: 19009 ExecStart=/etc/init.d/pure-ftpd start (code=exited, status=0/SUCCESS)
CPU: 59ms
апр 28 15:36:57 R420 systemd[1]: Starting pure-ftpd.service...
апр 28 15:36:57 R420 pure-ftpd[19009]: Starting ftp server:
апр 28 15:36:57 R420 pure-ftpd[19019]: Running: /usr/sbin/pure-ftpd -l pam -E -J HIGH -u 1000 -O clf:/var/log/pure-ftpd/transfer.log -B
апр 28 15:36:57 R420 systemd[1]: Started pure-ftpd.service.
апр 28 15:36:57 R420 pure-ftpd[19020]: (?@?) [ERROR] Unable to start a standalone server: [Address already in use]
Код: Выделить всё
# systemctl stop pure-ftpd
# systemctl status pure-ftpd
○ pure-ftpd.service
Loaded: loaded (/etc/init.d/pure-ftpd; generated)
Active: inactive (dead) since Fri 2023-04-28 17:10:20 EEST; 2s ago
Docs: man:systemd-sysv-generator(8)
Process: 19009 ExecStart=/etc/init.d/pure-ftpd start (code=exited, status=0/SUCCESS)
Process: 22165 ExecStop=/etc/init.d/pure-ftpd stop (code=exited, status=0/SUCCESS)
CPU: 26ms
...
Код: Выделить всё
$ ls -l /etc/init.d/ | grep ftp
-rwxr-xr-x 1 root root 5322 сен 19 2021 proftpd
-rwxr-xr-x 1 root root 3172 янв 31 2022 pure-ftpd
Код: Выделить всё
# systemctl status inetd
● inetd.service - Internet superserver
Loaded: loaded (/lib/systemd/system/inetd.service; enabled; vendor preset: enabled)
Active: active (running) since Fri 2023-04-28 15:36:56 EEST; 1h 38min ago
Docs: man:inetd(8)
Main PID: 18954 (inetd)
Tasks: 1 (limit: 115786)
Memory: 548.0K
CPU: 401ms
CGroup: /system.slice/inetd.service
└─18954 /usr/sbin/inetd
апр 28 15:36:56 R420 systemd[1]: Starting Internet superserver...
апр 28 15:36:56 R420 systemd[1]: Started Internet superserver.
Код: Выделить всё
# systemctl stop inetd
Код: Выделить всё
# systemctl status inetd
○ inetd.service - Internet superserver
Loaded: loaded (/lib/systemd/system/inetd.service; enabled; vendor preset: enabled)
Active: inactive (dead) since Fri 2023-04-28 17:15:25 EEST; 1s ago
Docs: man:inetd(8)
Process: 18954 ExecStart=/usr/sbin/inetd (code=exited, status=0/SUCCESS)
Main PID: 18954 (code=exited, status=0/SUCCESS)
CPU: 402ms
...
Код: Выделить всё
# systemctl --full | grep ftp
# ps -A | grep ftp
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
сокетная автивация серверов
Теперь запускаем свой cконфигурированный для FTP сервис (сокетной активации):
Всё! Сервер FTP в готовности и ожидании. Что мы и проверим с любого иного хоста LAN:
Здесь показана полная FTP-сессия в режиме диалога, от её начала до конца, как она происходила на клиентском компьютере. А на сервере во время этой сессии посмотрим:
Код: Выделить всё
# systemctl start pure-ftpd.socket
# systemctl status pure-ftpd.socket
● pure-ftpd.socket - pure-ftp FTP Server Activation Socket
Loaded: loaded (/lib/systemd/system/pure-ftpd.socket; disabled; vendor preset: enabled)
Active: active (listening) since Fri 2023-04-28 17:14:27 EEST; 5s ago
Listen: [::]:21 (Stream)
Accepted: 0; Connected: 0;
Tasks: 0 (limit: 115786)
Memory: 8.0K
CPU: 845us
CGroup: /system.slice/pure-ftpd.socket
апр 28 17:14:27 R420 systemd[1]: Listening on pure-ftp FTP Server Activation Socket.
Всё! Сервер FTP в готовности и ожидании. Что мы и проверим с любого иного хоста LAN:
Код: Выделить всё
$ ftp 192.168.1.13
Connected to 192.168.1.13.
220---------- Welcome to Pure-FTPd [privsep] [TLS] ----------
220-You are user number 1 of 50 allowed.
220-Local time is now 17:19. Server port: 21.
220-IPv6 connections are also welcome on this server.
220 You will be disconnected after 15 minutes of inactivity.
Name (192.168.1.13:olej): olej
331 User olej OK. Password required
Password:
230 OK. Current directory is /home/olej
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> pwd
257 "/home/olej" is your current location
ftp> system
215 UNIX Type: L8
ftp> exit
221-Goodbye. You uploaded 0 and downloaded 0 kbytes.
221 Logout.
Код: Выделить всё
$ systemctl --full | grep ftp
pure-ftpd@0-192.168.1.13:21-192.168.1.241:48136.service loaded active running pure-ftpd FTP Server (192.168.1.241:48136)
system-pure\x2dftpd.slice loaded active active Slice /system/pure-ftpd
pure-ftpd.socket loaded active listening pure-ftp FTP Server Activation Socket
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
сокетная автивация серверов
И наконец … «как вишенка на торте», я зайду по SSH на сервер linux-ru.ru, базирующийся за тысячи километров в Казахстане … как легко видеть, это арендуемый виртуальный сервер крупного регионального провайдера:
Это вот ping ICMPv6 к хосту локальной сети на которой я веду отработку FTP (через тысячи километров, местного провайдера Интернет, роутер-шлюз выхода из локальной сети в Интернет — это к вопросу грядущей «прозрачности» IPv6):
А вот клиентская сессия FTP в IPv6 из этого удалённого хоста к только что созданному серверу FTP с сокетной активацией:
Код: Выделить всё
$ sudo inxi -Mxxx
Machine: Type: Kvm System: QEMU product: Standard PC (i440FX + PIIX, 1996) v: pc-i440fx-bionic serial: N/A Chassis: type: 1
v: pc-i440fx-bionic serial: N/A
Mobo: N/A model: N/A serial: N/A BIOS: SeaBIOS v: 1.13.0-1ubuntu1.1 date: 04/01/2014
$ ip -6 a s dev tun0
3: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 53049 state UNKNOWN qlen 500
inet6 221:58c9:9a6:99be:f3d:c1ac:2b5b:9771/7 scope global
valid_lft forever preferred_lft forever
inet6 fe80::d86f:9577:d828:cb4d/64 scope link stable-privacy
valid_lft forever preferred_lft forever
Код: Выделить всё
$ ping -c3 21d:8a7c:aafa:f346:8115:14aa:9ca4:cd7f
PING 21d:8a7c:aafa:f346:8115:14aa:9ca4:cd7f(21d:8a7c:aafa:f346:8115:14aa:9ca4:cd7f) 56 data bytes
64 bytes from 21d:8a7c:aafa:f346:8115:14aa:9ca4:cd7f: icmp_seq=1 ttl=64 time=426 ms
64 bytes from 21d:8a7c:aafa:f346:8115:14aa:9ca4:cd7f: icmp_seq=2 ttl=64 time=118 ms
64 bytes from 21d:8a7c:aafa:f346:8115:14aa:9ca4:cd7f: icmp_seq=3 ttl=64 time=118 ms
--- 21d:8a7c:aafa:f346:8115:14aa:9ca4:cd7f ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 3ms
rtt min/avg/max/mdev = 117.950/220.699/426.072/145.220 ms
Код: Выделить всё
$ ftp 21d:8a7c:aafa:f346:8115:14aa:9ca4:cd7f
Connected to 21d:8a7c:aafa:f346:8115:14aa:9ca4:cd7f.
220---------- Welcome to Pure-FTPd [privsep] [TLS] ----------
220-You are user number 1 of 50 allowed.
220-Local time is now 18:30. Server port: 21.
220 You will be disconnected after 15 minutes of inactivity.
Name (21d:8a7c:aafa:f346:8115:14aa:9ca4:cd7f:olej): olej
331 User olej OK. Password required
Password:
230 OK. Current directory is /home/olej
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> exit
221-Goodbye. You uploaded 0 and downloaded 0 kbytes.
221 Logout.
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 5 гостей