[[oktatas:linux|< Linux]]
====== Démonok ======
* **Szerző:** Sallai András
* Copyright (c) 2011, Sallai András
* Szerkesztve: 2011, 2013, 2016, 2019, 2021
* Licenc: [[https://creativecommons.org/licenses/by-sa/4.0/|CC BY-SA 4.0]]
* Web: https://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] [ü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)