< Linux

Démonok

Szerző: Sallai András

Copyright © Sallai András, 2011, 2013, 2016, 2019

Licenc: GNU Free Documentation License 1.3

Web: http://szit.hu

Bevezetés

A démonok a háttérben futó olyan folyamatok, amelyek valamilyen szolgáltatást nyújtanak. Egy démonfolyamat jellemzője, hogy nincs terminálhoz kötve, ezért is mondjuk, hogy a háttérben fut. Angolul demon vagy daemon. A démont szót a MIT-n használták először programozók a MAC projekten belül. Az első démont ebben a projektben nevezték el „Maxwell's demon” néven.

A démonokat manapság szerverszolgáltatások biztosítására használjuk. A szerver szolgáltatások programjainak felesleges a folyamatos terminálkapcsolat, így ezeket démonként futtatjuk.

A démonokat néha mégis szeretnénk vezérelni, például leállítani, elindítani, újraindítani, a konfigurációs fájlokat újratölteni, státusz lekérni stb. Ezeket egy külön erre a célra létrehozott script segítségével tudjuk megtenni.

Démonok megtekintése

Nézzük meg milyen démonok futnak a háttérben.

ps ax

A kimenetben a TTY oszlopban, ha kérdőjelet látunk egy folyamatnál, akkor az adott folyamat nincs teletájphoz kötve, vagyis nincs interaktív felülete amelyen keresztül vezérelhetjük, akkor az egy démon.

A ps ax kimenetéből részlet:

PID TTY STAT TIME COMMAND
...
1684 ? Ss 0:00 /usr/sbin/apache2 -k start
1704 ? S 0:00 /usr/sbin/apache2 -k start
1705 ? S 0:00 /usr/sbin/apache2 -k start
...

A részletben az apache webszerver három példányát látjuk futni démonként. A STAT sorban a démonról informál minket. A Ss azt jelenti fő vezérlő démon, amely alfolyamatokat indít. A fő vezérlő démonok és gyermekfolyamataik kapcsolatát jól szemlélteti ha a ps ax parancshoz egy f kapcsolót is tesztünk:

ps axf

1862 ? Ss 0:00 /usr/lib/postfix/master
1874 ? S 0:00 \_ pickup -l -t unix -u -c
1875 ? S 0:00 \_ qmgr -l -t unix -u
1876 ? Ss 0:00 pure-ftpd (SERVER)
1966 ? Ss 0:00 /usr/sbin/apache2 -k start
2103 ? S 0:00 \_ /usr/sbin/apache2 -k start
2104 ? S 0:00 \_ /usr/sbin/apache2 -k start
2105 ? S 0:00 \_ /usr/sbin/apache2 -k start
2106 ? S 0:00 \_ /usr/sbin/apache2 -k start
2107 ? S 0:00 \_ /usr/sbin/apache2 -k start
2942 ? S 0:00 \_ /usr/sbin/apache2 -k start
2950 ? S 0:00 \_ /usr/sbin/apache2 -k start
2951 ? S 0:00 \_ /usr/sbin/apache2 -k start
2952 ? S 0:00 \_ /usr/sbin/apache2 -k start
2953 ? S 0:00 \_ /usr/sbin/apache2 -k start

A démonok között van egy, amely elsőként indul, ez az „init”. Minden újabb démont initből származtat a rendszer.

Több féle démon

Attól függetlenül, hogy egy szerverszolgáltatást nyújtó démonnak vannak-e gyermekfolyamatai, a démonokat két módon szokás futtatni:

egyedüli módban (standalone)

szuper démont futtatja (inetd)

Standalone

A programot elindítjuk, bekerül a memóriába, és végig ott marad amíg le nem állítjuk.

System V indítási mód

A System V típusú unix rendszerekben futási szintek vannak.

0 Leállítás

1 Egyfelhasználós mód

2-5 Bármire beállítható

6 Újraindítás

Futási szintek között az init paranccsal lehet váltani. A 1-es futási szintre például a következő paranccsal válthatunk:

init 1

Ezzel a rendszergazda mindenkit kizár a rendszerből.

Az aktuális futási szint:

runlevel

rendszergazdaként

who -r

felhasználóként is

who -r

Az alapértelmezett futási szint:

/etc/inittab

Az állományban egy ilyen beállítást találunk:

:initdefault:2

Indításuk:

/etc/init.d/pure-ftpd start

Inetd

A programot egy szuper démon indítja, amelyet inetd-enk hívunk. Az indításhoz be kell jegyeznünk a szerverünket az inetd konfigurációs állományába.

Az inetd csak akkor indítja el a szolgáltatást, ha kérés érkezik.

Ha egy szolgáltatást ritkán használunk, akkor érdemes beállítani.

Inet-ből futó démonok újraindítása

kill -SIGHUP pidszam

killall -HUP prognev

Az Inetd újraindítása

Újraindítás:

kill -1 `cat /var/run/inetd.pid`

Példa a démonokra

Postfix démon

A ps ax kimenetének részlete:

2165 ? Ss 0:00 /usr/lib/postfix/master
2184 ? S 0:00 pickup -l -t fifo -u -c
2185 ? S 0:00 qmgr -l -t fifo -u

A postfix egy levelezőszerver. Alapértelmezetten 3 folyamatot futtat:

master

pickup

qmgr

Apache

1369 ? Ss 0:00 /usr/sbin/apache2 -k start
...
1439 ? S 0:00 /usr/sbin/apache2 -k start
1440 ? S 0:00 /usr/sbin/apache2 -k start
1441 ? S 0:00 /usr/sbin/apache2 -k start
1442 ? S 0:00 /usr/sbin/apache2 -k start
1443 ? S 0:00 /usr/sbin/apache2 -k start

Az apache webszerver. Van egy elsődleges szál, amely körülbelül 5 gyermekfolyamatot futtat, amelyek fogadják a webszerver kéréseit.

Popa3d

1199 ? Ss 0:00 /usr/sbin/popa3d -D

A pope3d egy POP3 szerver.

atd démon

1320 ? Ss 0:00 /usr/sbin/atd

Parancsok időzített végrehajtását felügyeli.

SSH démon

2281 ? Ss 0:00 /usr/sbin/sshd

Pure-FTPd

2230 ? Ss 0:00 pure-ftpd (SERVER)

Samba

2255 ? Ss 0:00 /usr/sbin/nmbd -D
2266 ? Ss 0:00 /usr/sbin/smbd -D
2276 ? S 0:00 /usr/sbin/smbd -D

Bind

1348 ? Ssl 0:00 /usr/sbin/named -u bind

cron

1704 ? Ss 0:00 /usr/sbin/cron

cups

1727 ? Ss 0:00 /usr/sbin/cupsd -C /etc/cups/cupsd.conf

Az rpcbind

Az rpcbind egy különleges démon. Vannak olyan szerverszolgáltatások – például NFS, NIS, stb. –, amelyeknél nincs tisztázva milyen porton szolgáltatnak. Az rpcbind megkeresi milyen porton szolgáltatnak ezek a démonok.

Az rpcbind az 111 UDP és TCP porton várja a kéréseket.

D-Bus

A D-Bus vagy egyszerűen csak DBus egy szolgáltatás, amely lehetővé teszi több folyamat számára a belső kommunikációt (inter-process communication - IPC), illetve távoli eljáráshívást (remote procedure call - RPC) használatát.

Jelenleg a D-Bus a freedesktop.org projekt része. A D-BUS fejlesztését Havoc Pennington a Red Hat vállalatnál kezdte el.

Eredetileg azért hozták létre, hogy kiváltsák a CORBA-alapú megoldásokat.

Használják: Avahi, XChat, udev, gnome, HAL, pidgin, Skype stb.

A dbus-monitor parancs kiadásával egyszerűen monitorozható a dbus csatorna:

dbus-monitor

A kimenetben ehhez hasonló sorokat láthatunk:

signal time=1547026815.501068 sender=org.freedesktop.DBus -> destination=:1.26 serial=92 path=/org/freedesktop/DBus; interface=org.freedesktop.DBus; member=NameLost
string "org.freedesktop.ReserveDevice1.Audio1"

Üzenetküldés parancssorból:

dbus-send [--system | --session | --address=CÍM] <objektumútvonal> <interfézs.tag> [üzenet...]

Típus megadása:

--system

--session (alapértelmezés)

Udev

Az udev egy eszközkezelő. Az udev démon kezeli a /dev könyvtárat, dinamikusan. A könyvtár tartalmát eszközcsomópontnak is hívják.

Az első /dev könyvtár nem volt dinamikus. Minden lehetséges hardvereszközt felsoroltak, amely ilyen formán sok fölösleges helyet foglalt. Dinamikussá a devfs nevű démonnal vált a /dev könyvtár. Így már csak azok az eszközök szerepelnek a /dev könyvtárban, amelyek tényelegesen jelen vannak. Az udev leváltotta a devfst. Az udev lehetővé teszi szabályok meghatározását az egyes eszközök számára.

A devfs-t a 2.3 kerneltől használták. Az udev a 2.6-os kerneltől már a felhasználói térben működik a /dev könyvtár leképezése.

A 2.6-os kernel óta van egy sysfs nevű rendszer a Linuxban. A sysfs alapszintű információkat tartalmaz a csatlakozott információkról, az adatok a /sys könyvtárban tárolódnak. Az udev figyelembe veszi a sysfs információit is, amit összehasonlít a felhasználói szabálybeállításokkal. A felhasználóknak persze nem kötelező szabályokat megadni.

A szabályok lehetővé teszik az eszköznevek lecserélését. A szabályokat a /etc/udev/rules.d könyvtárban kell létrehozni, egy .rules kiterjesztésű fájlban. A szabályok alkalmazása ábécérendben történik. Ha több szabály is van, mindig az elsőként megtalált szabályt alkalmazza az udev.

Több információért érdemes megnézni az udev kézikönyvét:

man udev

Egyéb irodalom:

https://wiki.debian.org/udev

A hotplug-rendszer

A hotplug-rendszer vezérli az egyes eszközök előkészítését, inicializálását. Figyeli a rendszerbe futás vagy indulás során bekerült új eszközöket. Szorosan együttműködik a sysfs és udev démonnal.

NetworkManager

A network-manager egy hálózatkezelő keretrendszer (démon és felhasználói eszközök).

Telepítés:

apt install network-manager

A NetworkManager igyekszik a hálózati kapcsolatok megtartásáról gondoskodni.

A NetworkManager igyekszik a hálózati konfigurációt automatizálni, megkönnyíteni. Eredetileg asztali számítógépekre szánták, de néhány nem Debian rendszer, szerverre használja.

A NetworkManager részei:

root nevében futó démon (network-manager)

egy front-end (előtérben futó program: nmcli, nmtui, network-manager-gnome, plasma-nm)

A NetworkManager csak azokat az interfészeket kezeli, amelyek nincsenek megadva a /etc/network/interfaces fájlban.

Fájlok

A telepítés után a következő parancsok állnak rendelkezésre:

nm-online

nmcli

nmtui

nmtui-connect

nmtui-edit

nmtui-hostname

A network-manager démon ezen a néven kezelhető:

systemctl stop network-manager
systemctl start network-manager
systemctl restart network-manager

Forrás:

https://wiki.debian.org/NetworkManager

apt-file show network-mananger

Avahi

A Zero-configuration networking szabad megvalósítása, amely magában foglalja a multicast DNS/DNS-SD felderítő szolgáltatást.

A program közzéteszi és felderíti a helyi hálózat eszközeinek szolgáltatásait. Ilyen szolgáltatások lehetnek a nyomtatás vagy egy másik emberrel való kapcsolat tartás.

Az Avahi, Debian rendszeren az avahi-daemon csomagban található, ha szeretnénk eltávolítani, vagy telepíteni.

Kezelése:

systemctl restart avahi-daemon

Az avahi-daemon mellé szokták telepíteni az avahi-utils csomagot. Az avahi-utils tartalmazza például az avahi-browse parancsot, amellyel a hálózatot tallózhatjuk parancssorból. Például:

avahi-browse -alr

A tűzfalon az 5353 UDP portot kell engedélyezni, ha erre szükség van.

Démonok kezelése

Invoke-rc.d

Indítás:

invoke-rc.d démonnév start

Leállítás:

invoke-rc.d démonnév stop

Újraindítás:

invoke-rc.d démonnév restart

update-rc.d

Rendszerrel induljon:

update-rc.d démonnév defaults

Rendszerrel ne induljon:

update-rc.d démonnév remove

service

service démonnév start
service démonnév stop
service démonnév restart

systemctl

Státusz és szabályozás futási időben:

systemctl status szolgáltatás
systemctl start szolgáltatás
systemctl stop szolgáltatás
systemctl restart szolgáltatás

Szabályozás rendszerindításkor:

systemctl enable szolgáltatás
systemctl disable szolgáltatás

Háttérbe tett folyamatok

Egy program indításakor, ha az indítóparancs után egy „&” karaktert adunk meg, akkor a program automatikusan háttérbe kerül mint egy démon. Persze egy démonnal ellentétben ez továbbra is teletájphoz lesz kötve.

Például:

nano &

Virtuális terminálon:

26119 pts/0 T 0:00 nano

A „pts/0” részből látjuk, hogy egy virtuális terminálból lett a háttérbe téve a nano program.

A következő nano a hármas teletájpról tettük háttérbe:

26222 tty3 T 0:00 nano

A „T” betű a megállított vagy nyomkövetett folyamatokra jellemző (stopped vagy traced).

Ha olyan programot teszünk a háttérbe, amelynek nincs interaktív felülete az futó állapotba kerül:

yes > /dev/null &
[1] 3977

3977 pts/2 R 0:44 yes

Kezelés menüs felületen

Telepítés:

apt install rcconf

Indítás:

rcconf

Linkek

https://wiki.debian.org/DevFS

https://debian-handbook.info/browse/stable/sect.hotplug.html (2017)

http://unixlinux.tmit.bme.hu/D-Bus (2019)

https://wiki.archlinux.org/index.php/udev (2019)

https://wiki.archlinux.org/index.php/avahi (2019)