[[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)