[[oktatas:linux|< Linux]] ====== Linux naplózás ====== * **Szerző:** Sallai András * Copyright (c) Sallai András, 2016, 2018, 2019 * Licenc: GNU Free Documentation License 1.3 * Web: http://szit.hu ===== A naplózásról ===== A Linux alapú rendszerek fejlett naplózási lehetőségekkel rendelkeznek. Egy Linux rendszeren mindig érdemes belenézni az ilyen fájlokba, mert azok értelmes és logikus feljegyzéseket tartalmaz a rendszer állapotáról, hibáiról, történéseiről. Mi a naplózás célja? * hibák felderítése * biztonsági audit * a rendszer finomhangolása * állapotok nyomon követése * szolgáltatás használati szokásainak feltérképezése * stb. Mit lehet naplózni? * Józsi mikor lépet be tegnap este? * János mit nézett meg tegnap este? * Mikor indult újra a rendszer? * Milyen címről léptek be tegnap 8-9 között? * Ki kapott levelet? * Betörtek? * Voltak tegnap eset sikertelen belépési kísérletek? * Milyen csomag lett feltelepítve tegnapelőtt? * Melyik országból jöttek a felhasználók? * Tegnap használták az adott programot? * Jóska honnan jelentkezett be? * stb. ===== Programok a naplózás területén ===== Az első naplózó program a sendmail program kiegészítéseként készült. Hamar jött a gondolat, hogy az egész rendszeren lehetne használni. A neve sylsog lett. Kezdetben minden Linux rendszerre ezt került fel. A syslog hibáinak kiküszöbölésére jött létre a syslog-ng, amit gyorsabbnak és hatékonyabbnak tartanak. A Debian GNU/Linux rendszereken manapság az rsyslog terjedt el, amely kompatibilis a syslog rendszerrel. Naplózó démonok: * rsyslog * syslog-ng * inetutils-syslogd A fent felsorolt démonok mind csomagnevek is a Debian alapú rendszerekben. Esetleg külső forrásból: http://metalog.sourceforge.net/ A Debian GNU/Linux rendszerek alapértelmezett naplózó rendszere (2016) a rsyslog. A programozók rendelkezésre áll egy syslog() nevű függvény, amelyet beépíthetnek a programjukba. A rendszergazdán múlik, hogy a fenti programok közül melyik naplózó rendszer fogadja a naplózásra küldött adatokat. Naplóba írhatunk: logger szöveg A logger /var/log/syslog-ot írja. Napló elemző: logcheck ===== Fájlok ===== A /var/log/ könyvtár tartalma alapesetben: * auth.log * felhasználói azonosítás * btmp * sikertelen belépések -- last -f /var/log/btmp * daemon.log * démonokról tartalmaz információt * debug * a naplózóban DEBUG szintre állított programok írnak ide * dmesg * a kernel gyűrűpuffer (kernel ring buffer) * dpkg.log * telepített, törölt csomagok * faillog * sikertelen belépési kísérletek * kern.log * a kernel beállításai * lastlog * legutóbbi bejelentkezési adatok minden felhasználó számára * mail.info * mail.log * mail.log * levelek * messages * globális rendszerüzenetek, induláskori üzenetek * syslog * a legtöbb log * általában a messages is benne van * wtmp * bejelentkezési információk # last -f /var/log/btmp root tty3 Sat Oct 29 21:48 still logged in janos :0 :0 Tue Oct 25 17:19 gone - no logout janos :0 :0 Wed Oct 19 18:55 - 17:19 (5+22:23) janos :0 :0 Mon Oct 17 21:25 - 18:55 (1+21:30) janos :0 :0 Sun Oct 9 21:12 - 21:25 (8+00:13) janos :0 :0 Sat Oct 8 11:10 - 21:12 (1+10:01) janos :0 :0 Tue Oct 4 19:58 - 11:10 (3+15:12) janos :0 :0 Mon Oct 3 23:35 - 19:58 (20:23) btmp begins Mon Oct 3 23:35:15 2016 Egyéb: * alternatives.log * alternatív alrendszer * fontconfig.log * beállított font könyvtárak Az egyes programok általában saját könyvtárat hoznak létre a naplóállományaik számára. ===== Üzenetek prioritása ===== Az üzenetek prioritása: * emerg: vészhelyzet; a rendszer valószínűleg használhatatlan * alert: azonnali lépések szükségesek * crit: kritikus állapotok * err: hiba * warn: figyelmeztetés; ebből hiba lehet * notice: normális állapot, de ez fontos üzenet * info: információs üzenet * debug: hibakövetési információ ===== A napló megtekintése ===== * cat * more * less * nano * mcedit * vi * tail * grep * zcat -- gzip tömörített fájlok olvasása * zgrep * zmore * head * tailf * dmesg -- a kernel ring buffer megtekintése * multitail A tail paranccsal real-time-ban figyelhetjük a naplókat: tail -f /var/log/syslog MATE grafikus felületen a mate-system-log programmal tekinthetjük meg a naplófájlokat. A /var/log könyvtár az adm csoportba van. Tegyük a felhasználót ebbe a csoportba. A mutlitail használata: multitail -i /var/log/syslog -i /var/log/auth.log ===== rsyslog ===== # nano /etc/rsyslog.conf # ls /etc/rsyslog.d/ Naplózás a 12 teletype-ra: Szerkesszük az rsyslog.conf fájlt: mcedit /etc/rsyslog.conf De készíthetünk egy külön fájlt is: mcedit /etc/rsyslog.d/50-default.conf Az rsyslog.conf végére vagy a 50-default.conf fájlba írjuk: *.*/dev/tty12 Indítsuk újra rsyslog szervert: /etc/init.d/rsyslog restart Naplózás más számítógépre: mcedit /etc/rsyslog.d/50-default.conf Írjuk bele: *.* @gépnév ===== Rotálás ===== A naplófájlok egy idő után túl nagyok lennének, ha nem lennének időnként letörölve. A naplófájlok rotációban, átnevezésre, majd később tömörítésre kerülnek. Egy idő után pedig törlésre kerülnek. Ezt a feladatot látja el a logrotate program. A logrotate program fő beállításai a következő helyen találhatók: /etc/logrotate.conf A logrotate beállításai a következő könyvtárban lehet: /etc/logrotate.d/ A könyvtárban minden program számára készíthetünk egy állományt, amelyben leírjuk a rotációt. ===== A logger program ===== A felhasználók a logger paranccsal képesek a syslog fájlba naplózni. Például: logger üzenet ==== A felhasználók korlátozása ==== Bármelyik felhasználó írhat /var/log/syslog fájlba: logger "Működik a naplózás" Ezt megteheti név nélkül is, konzolra írással együtt: logger -p 0 -t kernel "Működik a naplózás" groupadd log chmod 660 /dev/log chown root.log /dev/log Ezek után csak azok írhatnak a naplóba, akik bele kerültek a log csoportba. ===== rsyslog naplózószerver ===== ==== Központi szerver beállítása ==== A beállítások elvégezhetők a /etc/rsyslog.conf állományban vagy a tetszőleges névvel, .conf kiterjesztéssel létrehozunk magunak egyet a /etc/rsyslog.d könyvtárban. Hozzunk létre egy logserver.conf állományt: nano /etc/rsyslog.d/logserver.conf Tartalma a következő legyen: $ModLoad imtcp $InputTCPServerRun 514 $AllowedSender TCP, 127.0.0.1, 192.168.5.0/24, gepnev1, gepnev2.domain $template LogFiles,"/var/log/%HOSTNAME%/%PROGRAMNAME%.log" *.* ?LogFiles A beállítás után indítsuk újra a rsyslog szervert: systemctl restart rsyslog A %HOSTNAME% helyet IP cím is lehet a könyvtárnév: $template LogFiles,"/var/log/%fromhost-ip%/%PROGRAMNAME%.log" Ha megadunk egy gépnevet az $AllowedSender sorban, annak feloldhatónak kell lennie IP címre. Ha DNS szerveren keresztül nem érhető el, akkor állítsuk be az /etc/hosts fájlban. ==== Kliens beállítása ==== A beállítások elvégezhetők a /etc/rsyslog.conf állományban vagy a tetszőleges névvel, .conf kiterjesztéssel létrehozunk magunak egyet a /etc/rsyslog.d könyvtárban. Hozzunk létre egy logserver.conf állományt: nano /etc/rsyslog.d/logserver.conf Tartalma a következő legyen: # Távoli syslog szerver beállítása TCP protokollon *.* @@192.168.5.1:514 Indítsuk újra az rsyslog szervert: systemctl restart rsyslog Figyeljünk a kliens gépnevére (hostname)! A szerveroldalon mindig a kliens gépnevével azonos könyvtárba kerülnek a naplóbejegyzések. A kliens gépnevének állítása után a rsyslogot is indítsuk újra: hostnamectl set-hostname tenger systemctl restart rsyslog ==== Ellenőrzés ==== Az 514 port ellenőrzése: ss -ltn Bejegyzés küldése: logger "Működik" A bejegyzésnek szerepelnie kell a kliens syslog állományában és a szerver root.log állományában. ===== journalctl ===== A journalctl a systemd naplózórendszer kezelője. A systemd a naplókat a man //systemd-journald// szerint az alábbi helyeken tárolhatja: /run/log/journal/machine-id/*.journal /run/log/journal/machine-id/*.journal~ /var/log/journal/machine-id/*.journal /var/log/journal/machine-id/*.journal~ Kérdezzük le, a merevlemezen mennyi helyet foglal a systemd naplója: journalctl --disk-usage A kimenet a következőhöz hasonló lehet: Archived and active journals take up 8.0M in the file system. A journalctl önmagában kiadva az összes bejegyzést mutatja szűrés nélkül: journalctl ==== Lekérdezés egység (Unit) alapján ==== Egy szolgáltatáshoz tartozó bejegyzések megtekintése: journalctl _SYSTEMD_UNIT=ssh.service Másik példa: journalctl _SYSTEMD_UNIT=avahi-daemon.service A -u kapcsolóval: journalctl -u ssh.service Egy adott program által generált napló: journalctl /usr/sbin/sshd PID alapján: journalctl _PID=7285 ==== A rendszerindítás üzenetei ==== Az aktuális rendszerindítási üzeneteket a -b kapcsolóval lehet megtekinteni: journalctl -b Ha a tartós tárolás be van állítva, akkor megnézhetjük az aktuális előtti rendszerindítási üzeneteket is: journalctl -b -1 Kettővel ez előtti: journalctl -b -2 Rendszerindítási azonosítók listázása: journalctl --list-boots ==== Időintervallum lekérdezése ==== Egy órával ez előtt óta: journalctl --since "1 hour ago" Két nappal ez előttől: journalctl --since "2 days ago" Mettől meddig: journalctl --since "2018-11-25 20:11:00" --until "2018-11-25 20:35:00" Adott időpont óta: journalctl --since "2018-11-25 20:00:00" Mai napon: journalctl --since today Tegnap óta: journalctl --since yesterday ==== Tartós tárolás beállítása ==== A naplófájlok alapértelmezetten csak a memóriában tárolódnak: /run/log/journal//system.journal A tartós tárolásról külön gondoskodni kell. Ehhez szerkeszteni kell a journald.conf beállításait: nano /etc/systemd/journald.conf A journald.conf fájlban minden beállítás a [Journal] szekcióban található. Az első tulajdonásg a Storage: Storage= Értékei a következő lehetnek: * volatile * tárolás csak a memóriában * /run/log/journal * persistent * tárolás a merevlemezen: /var/log/journal * A journal könyvtár létrejön ha szükséges * auto * tárolás a merevlemezen: /var/log/journal * nem jön létre automatikusan a journal könyvtár és a tartalma * none * nincs semmilyen tárolás Az auto beállítás esetén akkor történik tárolás, ha van hely. Az autóbeállításhoz fájlok, könyvtárak létrehozása: mkdir -p /var/log/journal systemd-tmpfiles --create --prefix /var/log/journal systemctl restart systemd-journald ==== Folyam és vég figyelése ==== journalctl -f journalctl -u ssh.service -f Az utolsó 5 sor mutatása: journalctl -n 5 -u ssh.service ==== Szűrés prioritás alapján ==== Prioritások: * 0 – emerg * 1 – alert * 2 – crit * 3 – err * 4 – warning * 5 – notice * 6 – info * 7 – debug journalctl -p err journalctl -p 1..4 journalctl -p emerg..warning ==== Kimenet formálása ==== Formázási lehetőségek: * cat * export * json * json-pretty * json-sse * short * short-iso * short-monotonic * short-precise * verbose journalctl -b -u ssh.service -o cat ==== Üzenetcsoportok ==== Kernelmag üzenet: journalctl -k Boot üzenet: journalctl -b Minden üzenet: journalctl -a ==== Rotálás ==== journalctl --rotate ==== Átirányítás ==== journalclt --no-pager > uzenetek.txt ==== Fájlok törlése ==== A napló mérete 1 G lehet: journalctl --vacuum-size=1G 1 év naplójának megtartása: journalctl --vacuum-time=1years Megadható mértékegységek: * s * m * h * days * months * weeks * years ==== Szűrés felhasználók alapján ==== Tegyük fel, hogy a sshd démonra vagyunk kíváncsi. Derítsük ki az sshd felhasználó belső azonosítóját: id sshd A kimenet ehhez hasonló lehet: uid=116(sshd) gid=65534(nogroup) csoportok=65534(nogroup) Ezek után napló megtekintése: journalctl _UID=116 ===== multitail ===== apt install multitail multitail /var/log/syslog /var/log/daemon.log {{:oktatas:linux:virtualbox_iskolazo_net_deb_950_1_13_02_2019_19_36_14.png|}} ===== lnav ===== Naplófájl nézegető. Telepítés: apt install lnav Használatra példa: lnav vagy: lnav /var/log/syslog /var/log/daemon.log ===== less ===== Megnyitunk egy fájl: less /var/log/auth.log Ezek után bekapcsoljuk a folyamatos módot: Shift + F De indíthatjuk azonnal ebben a módban: less +F /var/log/auth.log ===== tail + grep ===== A tail -f vagy a tailf parancs nagyszerű eszköz egy állomány változásainak folyamatosa figyelésére. A kimenet szűrhető is a grep paranccsal. A következőkben olyan üzeneteket keresünk, ahol janos, mari vagy kati szerepel az üzenetsorban. tail -f /var/log/auth.log | grep -E '(janos|mari|kati)' A -v kapcsolóval most megfordítjuk az illeszkedést. Azt adjuk meg, milyen sorokat nem szeretnénk látni: tail -f /var/log/auth.log | grep -Ev '(janos|mari|kati)' A grep -E kapcsoló helyett használható a egrep parancs is. A tail -f parancs helyett használható a tailf parancs is. ===== Debian 12 ===== A Debian 12-ben a syslog helyett systemctl veszi át a szerepet. A naplófájlok megtekintése: jornalctl -f ===== Függelék ===== ==== dmesg ==== A kernel ring bufferbe a kernel írja az üzeneteit. Magunk is írhatunk ebbe a naplóba a megfelelő eszköz ismeretében. Írás a dmesg naplóhoz: echo üzenet > /dev/kmsg ===== Források ===== * https://www.howtoforge.com/tutorial/rsyslog-centralized-log-server-in-debian-9/ (2018) * http://www.thegeekstuff.com/2011/08/linux-var-log-files/ (2016) * http://www.thegeekstuff.com/2012/01/rsyslog-remote-logging (2016) * https://www.digitalocean.com/community/tutorials/how-to-view-and-configure-linux-logs-on-ubuntu-and-centos (2016) * http://unixlinux.tmit.bme.hu/Napl%C3%B3z%C3%A1s (2016) * https://help.ubuntu.com/community/LinuxLogFiles (2017) * https://www.freedesktop.org/software/systemd/man/journald.conf.html (2018) * https://www.loggly.com/ultimate-guide/using-journalctl/ (2018) * https://debian-handbook.info/browse/squeeze/sect.syslog.html (2018) * https://www.linux.com/learn/sysadmin/viewing-linux-logs-command-line (2018) * man journald.conf (2018) * man systemd-journald * man journalctl