< Linux

Linux naplózás

Szerző: Sallai András

Copyright © 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/<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

apt install multitail

multitail /var/log/syslog /var/log/daemon.log

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.

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