Tartalomjegyzék
Linux naplózás
- Szerző: Sallai András
- Copyright © Sallai András, 2016, 2018, 2019
- Licenc: GNU Free Documentation License 1.3
- Web: https://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/<gép_azonosító>/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
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
- man journald.conf (2018)
- man systemd-journald
- man journalctl