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