Posledná zmena: 7/9/2021
Ak ste sa dočítali až sem, pravdepodobne Vám nemusím vysvetľovať, prečo existuje logovanie. Určite ste sa už stretli s problémom, ktorý ste vyriešili sledovaním logov a následnými opravami problémových konfiguračných súborov. Logy sú tiež neoceniteľné v prípade, že sa niekto pokúša dostať na Váš server, pravdaže, neoprávneným spôsobom.
Pre prípad, že začínate čítanie Príručky touto kapitolou a pre úplnosť, o ktorú sa tu snažím, si niečo o logovaní predsa len povieme:
Logovanie je schopnosť procesu (najčastejšie nejakého obslužného démona, ale nie je to podmienkou) zaznamenať nejakú informáciu pre neskoršiu analýzu systémovým administrátorom. Niektoré procesy využívajú vlastné logovacie služby a logujú do vlastných logovacích súborov, vo väčšine prípadov sa však využívajú služby špeciálneho démona, ktorého jedinou úlohou je prijímať správy od iných procesov a zaznamenávať ich do súborov spolu s časom, menom a číslom procesu.
Výhodou tohto riešenia je fakt, že logovacie súbory má na starosti jediný proces, ktorý kontroluje prístup k nim (má právo zápisu) a serializuje správy od jednotlivých procesov. Logovací proces môže správy vhodne filtrovať, kategorizovať alebo ich rozdeľovať do samostatných súborov, podľa toho, čo umožní jeho konfigurácia. Logovací proces sa spúšťa pri štarte servera a mal by neustále bežať, pretože iba vtedy má celé logovanie význam. Je celkom bežnou praktikou, že po preniknutí na Váš server vypína útočník logovanie, aby znemožnil neskoršiu analýzu svojich krokov.
Typická správa v logu pozostáva z jedného alebo viacerých riadkov, ktoré obsahujú čas, meno a číslo procesu, ktorý správu vytvoril a samotného textu správy. Za všetky slová jeden reálny príklad:
Mar 13 21:30:31 hudson xinetd[1002]: Started working: 2 available services
Uvedený riadok obsahuje zľava doprava:
Démonov na logovanie správ existuje samozrejme niekoľko, rozoberieme si však iba tie, s ktorými sa v reálnom živote najčastejšie stretnete a ktoré sa používajú v moderných distribúciách Linuxu alebo aj na Unixoch.
"syslogd
" je najpoužívanejším logovacím démonom, pochádza
pôvodne z BSD unixu, ale stretnete sa s ním skutočne v každej distribúcii
Linuxu alebo verzii Unixu. Proces, ktorý zabezpečuje logovanie aplikácií, sa
nazýva "syslogd
" a spolu s ním zvykne bežať aj sesterský démon,
"klogd
", ktorý loguje správy z kernelu.
Poznámka: ak sa rozhodnete použiť nasledujúce informácie pri
konfigurovaní "syslogd
" na Unixoch, môže sa stať, že niektoré veci nebudú
fungovať presne tak, ako na Linuxe. Jednotlivé implementácie démona sa
odlišujú.
Pri logovaní správ treba rozlišovať dva pojmy:
Facility (zdroj správy)
Pojem "facility" určuje subsystém, z ktorého pochádza správa, resp. typ
správy (informácie). "syslogd
" rozlišuje tieto typy správ:
sshd
", logovanie použitia príkazu "su
" či
"sudo
" atďcrond
"Priority (priorita)
Pojem "priority" označuje dôležitosť správy. Platí pravidlo, že so zvyšujucou sa dôležitosťou správy klesá počet správ, ktoré démon s touto prioritou vyprodukuje. Inými slovami, démon logujúci s nižšou prioritou je "ukecanejší", pretože informuje aj o tom, že dýcha :-)
"syslogd" rozlišuje tieto priority vo vzostupnom poradí dôležitosti:
syslogd
"
Celá konfigurácia démona "syslogd
" pozostáva z definovania
pravidiel, ktoré určujú, aká akcia sa vykoná pre špecifický typ informácie danej dôležitosti.
Najčastejšie sa používa presmerovanie do súboru, môžete však použiť aj
presmerovanie správ na iný server a zbierať tak údaje z viacerých serverov
na jedinom serveri alebo výpis na terminál Konfigurácia
"syslogd
" je uložená v súbore "/etc/syslog.conf
".
Jednotlivé pravidlá sa nachádzajú na samostatných riadkoch v tvare:
facility.priority akcia
Kde:
/var/log/syslog
")./dev/tty12
")@server.example.com
").root,admin
")
Ukážeme si teraz niekoľko príkladov (veľa ich nájdete aj v manuálovej
stránke "man syslog.conf
"):
Príklad 1: logovanie všetkých autentifikačných správ do súboru
"/var/log/auth.log
". Tieto údaje musia byť oddelené od
ostatných, pretože môžu obsahovať citlivé informácie - napr. používateľ pri
prihlasovaní zadal svoje heslo namiesto svojho prihlasovacieho mena,
neprihlási sa a systém zaloguje hlásenie o chybe aj s domnelým menom
používateľa, v skutočnosti jeho heslom. Súbor by mal byť čitateľný len pre
roota!
auth,authpriv.* /var/log/auth.log
Poznámka: znak "*" ako zástupný znak platí pre obe "facility" - auth aj authpriv!
Príklad 2: logovanie všetkých správ týkajúcich sa mailov do súboru
"/var/log/mail.log
". Okrem toho logujeme všetky správy týkajúce
sa mailov do troch samostatných súborov: do
"/var/log/mail.info
" s dôležitosťou "info" a vyššou, do
"/var/log/mail.warn
" s dôležitosťou "warn" a vyššou a napokon
do "/var/log/mail.err
" s dôležitosťou "err" a vyššou. Toto sa
dá využiť napr. v prípade, že máte automatické skripty, ktoré tieto logy
prezerajú.
mail.* /var/log/mail.log mail.info -/var/log/mail.info mail.warn -/var/log/mail.warn mail.err /var/log/mail.err
Príklad 3: logujeme všetky správy OKREM autentifikačných
(auth,authpriv.none) a okrem "mail.info" do súboru
"/var/log/syslog
". Toto má byť všeobecný log, v ktorom sa dá
nájsť takmer všetko. Autentifikačné údaje sem neposielame preto, že tie môžu
byť citlivejšie, napr. môžu obsahovať heslo, ktoré používateľ chybne použil
ako svoje prihlasovacie meno. No a maily tu ignorujeme preto, že na stredne
vyťazenom mailovom serveri zaplnia informácie o prichádzajúcej
a odchádzajúcej pošte väčšiu časť tohto logu.
Pozor, v nasledujucom priklade bola chyba! Pred "mail.!=info" musi byt znak ";" (FIXED: 4/7/2003)
*.*;auth,authpriv.none;mail.!=info -/var/log/syslog
Takto vyzerá kompletný "/etc/syslog.conf
" na Debiane
s niekoľkými mojimi úpravami, ktoré môžete použiť ako odporúčania, prípadne
inšpiráciu pre Váš konkrétny server:
# /etc/syslog.conf Configuration file for syslogd. # # For more information see syslog.conf(5) # manpage. # # First some standard logfiles. Log by facility. # # VIX: citlive udaje tykajuce sa prihlasovania pouzivatelov # (tento subor by mal byt chmod 640, root:adm) auth,authpriv.* /var/log/auth.log # VIX: logujem vsetko okrem autentifikacnych udajov a udajov o odosielani # a prijimani mailov (je ich velmi vela!) # !! VIX !! pozor, v nasledujucom priklade bola chyba! Pred "mail.!=info" musi # byt znak ";" # FIXED: 4/7/2003 *.*;auth,authpriv.none;mail.!=info -/var/log/syslog # VIX: udaje o behu demona crond ma nezaujimaju natolko, aby som mal vyhradeny # dalsi logovaci subor #cron.* /var/log/cron.log # VIX: udaje vacsiny demonov idu sem daemon.* -/var/log/daemon.log # VIX: logovanie sprav z kernelu kern.* -/var/log/kern.log # VIX: logovanie sprav tlacoveho demona lpr.* -/var/log/lpr.log # VIX: logovanie vsetkych informacii o mailoch mail.* /var/log/mail.log # VIX: logovanie pouzivatelskych procesov (ide sem kadeco) user.* -/var/log/user.log # VIX: nepouzivam UUCP, ignorujem logovanie #uucp.* -/var/log/uucp.log # VIX: originalny komentar hovori za vsetko :) Pokojne nasledujuce 3 riadky # zakomentujte, zmensite svoje logy o viac nez polovicu (informacie o mailoch # su uz v mail.log). # # Logging for the mail system. Split it up so that # it is easy to write scripts to parse these files. # mail.info -/var/log/mail.info mail.warn -/var/log/mail.warn mail.err /var/log/mail.err # VIX: nepouzivam news, takze ani nelogujem spravy do samostatnych suborov # # Logging for INN news system # #news.crit /var/log/news/news.crit #news.err /var/log/news/news.err #news.notice -/var/log/news/news.notice # VIX: subory, do ktorych pojde takmer vsetko (okrem udajov o mailoch, newsoch # a autentifikacii) # Some `catch-all' logfiles. # *.=debug;\ auth,authpriv.none;\ news.none;mail.none -/var/log/debug # VIX: vsetky udaje s prioritou "info", "notice" a "warn", okrem udajov # z autenfikacneho subsystemu, crona, demonov, mailov a newsov *.=info;*.=notice;*.=warn;\ auth,authpriv.none;\ cron,daemon.none;\ mail,news.none -/var/log/messages # VIX: najkritickejsie spravy sa zobrazia vsetkym pouzivatelom na terminaloch. # V praxi su to napr. udaje o vypadku prudu, ked UPS zacne bezat na baterie # # Emergencies are sent to everybody logged in. # *.emerg * # VIX: odkomentujte nasledujuci riadok a na konzole c. 12 sa budu zobrazovat # VSETKY spravy z logov (pre zobrazenie stlacte na konzole ALT+F12). # POZOR! Kazdy, kto ma fyzicky pristup ku konzole, sa k tymto spravam dostane! # *.* /dev/tty12
Po každej zmene "syslog.conf
" musíte prinútiť démona
"syslogd
", aby konfiguračný súbor načítal. Ako už zrejme
tušíte, môžete použiť skript "/etc/init.d/syslog
reload
", alebo zaslať démonovi signál "HUP"
("killall -HUP syslogd
").
Vedľajším účinkom reloadovania konfigurácie je to, že "syslogd
"
zatvorí a opätovne otvorí všetky logovacie súbory, čo sa úspešne využíva pri
rotovaní logov.
Ak chcete rýchlo nájsť informácie v logoch a nechcete alebo nemôžete študovať konfiguračný súbor "/etc/syslog.conf", pomôže Vám tento rýchly prehľad (v zátvorke sú uvedené možné alternatívy):
/var/log/boot.log
",
"/var/log/dmesg
"/var/log/auth.log
",
"/var/log/auth/*
"/var/log/mail.*
",
"/var/log/mail/*
"/var/log/kern.log
", "/var/log/kernel/*
"/var/log/syslog
", "/var/log/messages
"
"syslogd
" ponúka možnosť zasielať správy namiesto do súboru na
vzdialený počítač, ktorý ich zaloguje namiesto neho. To môžete využiť na
zvýšenie bezpečnosti - môžete vyhradiť jeden server, ktorý bude iba logovať
údaje zo všetkých ostatných serverov a nebudú na ňom bežať nijaké iné
služby. Tým zabezpečíte, že aj v prípade útoku na niektorý server Vám
zostanú zaznamenané údaje na logovacom serveri.
Pre fungovanie vzdialeného logovania sa využíva UDP port 514 (pozor na
firewally!). V súbore "/etc/services
" musí byť uvedený riadok:
syslog 514/udpV súbore "
/etc/syslog.conf
" potom stačí uviesť pravidlo typu:
*.* @loghost
Kde "loghost
" je adresa logovacieho sevrera.
Údaje na logovacom serveri budú označené menom servera, z ktorého pochádzajú, takže sa zachová prehľad.
Umiestnenie logov závisí od pravidiel, ktoré špecifikujete v konfiguračnom
súbore "/etc/syslog.conf
", ale štandardne sa logovacie súbory
nachádzajú v adresári "/var/log
". Je vhodné, aby aj ostatné
logovacie programy (iné ako "syslogd
") uchovávali svoje
logovacie súbory v tomto adresári alebo jeho podadresároch, aby sa tak
zachoval poriadok, ktorý pri hľadaní údajov stopercentne oceníte!
Jednoznačne odporúčam, aby minimálne adresár "/var
" bol
pripojený na samostatnej partícii, aby logovanie
fungovalo aj v prípade, že niekto úplne zaplní ostatné disky. Ešte lepšie
je, ak máte vytvorenú samostatnú partíciu pripojenú na "/var/log
".
Väčšina distribúcií Linuxu chráni logovacie súbory tak, že ich vlastníkom je root a nejaká administrátorská skupina a súbory majú právo pre čítanie len pre túto skupinu. Niektoré logovacie súbory neobsahujú citlivé informácie a preto môžu byť čitateľné pre ľubovoľného používateľa. Väčšinou však nestačí zmeniť práva aktuálnym logovacím súborom, musíte zabezpečiť aj to, aby novo vytvorené logovacie súbory (po rotovaní logu) mali požadované práva.
Ak používate procesy, ktoré uzatvárate vo vyhradených adresároch pomocou
volania "chroot()
", nebudú tieto procesy schopné logovať
pomocou "syslogd
" bez jednej malej úpravy. Je to preto, že
procesy používajú na komunikáciu s démonom "syslogd
" špeciálne
zariadenie "/dev/log
", ku ktorému procesy uzavreté vo
vyhradených adresároch nemajú prístup.
Riešenie sa preto robí "z opačnej strany" a to tak, že sa
"syslogd
" skonfiguruje tak, aby čítal správy aj z iných
špeciálnych zariadení. Jediné, čo musíte urobiť, je spustiť démona
"syslogd
" s parametrom "-a /cesta/dev/log
", kde
"/cesta
" je cesta k vyhradenému adresáru démona.
Kompletný príklad pre démona
"named
" (DNS server) nájdete v kapitole "DNS".
Logovanie má zmysel iba vtedy, ak dokážete v logoch nájsť to, čo potrebujete a ak ich pravidelne prezeráte, aby ste našli podozrivé hlásenia. V prípade bezpečnosti servera si treba uvedomiť, že práve logy Vám môžu poskytnúť údaje a dôkazy prieniku alebo pokusu o prienik na Váš server. Takisto poskytujú skvelú prevenciu - problémy sa v logoch zvyknú objaviť ešte skôr, ako sa stanú skutočne akútnymi. Preto je dôležité venovať logom náležitú pozornosť. V podstate by bolo najlepšie, keby ste ich denne sledovali - namiesto ranného čítania novín.
Niečo také je však nad ľudské sily a ani ja, ktorému kolegovia hovoria "paranoik", nemám na to čas. Namiesto toho používam nástroje, ktoré logy sledujú za mňa a posielajú mi "výber" toho najzaujímavejšieho. Ak chcete nasledovať môj príklad (čo Vám vrelo odporúčam!), môžete použiť program Logcheck (teraz pravdepodobne pod novým menom), o ktorom sme si hovorili v kapitole "Nástroje na sledovanie systému"
Logovacie súbory slúžia, ako ste už zistili, na zaznamenávanie informácií. Informácie však nemožno zaznamenávať donekonečna, pretože kapacita disku nikdy nie je nekonečná. Preto je potrebné staré logy vymazávať.
O vymazávanie logov sa obyčajne stará program "logrotate
". Ten
sa pravidelne spúšťa z démona "crond
" pravdepodobne niekedy
v noci a jeho úlohou je v prípade potreby vykonať tzv. "rotáciu logov".
Rotácia logov znamená, že sa okrem aktuálneho logovacieho súboru uchovávajú aj jeho "staršie verzie" so staršími údajmi. Po určitom čase sa vytvorí nový, oddelený logovací súbor, aby dĺžka súborov nebola príliš veľká a staršie verzie sa zálohujú. Najstaršia verzia sa vymaže.
Ak chcete presnejšiu definíciu rotácie logov, tu ju máte:
syslog.4
").0
", napr. "syslog.0
"syslog
"SIGHUP
". Ak by ste neurobili tento krok, démon by
naďalej pokračoval v logovaní do už premenovaného logu (zmenili ste jeho
meno, ale i-uzol súboru je stále ten istý).
Ak je zapnutá kompresia súborov, je logovací súbor pred premenovaním
skomprimovaný programom "gzip
". Počet uchovávaných odrotovaných
logov sa nastavuje pre jednotlivé logy. Možnosti rotácie závisia od
konkrétneho rotovacieho programu, ukážeme si ich preto o chvíľu.
Na Mandrake 9.0 zabezpečuje volanie programu "logrotate
" skript
"/etc/cron.daily/logrotate
". Tento skript sa zavolá v čase
určenom konfiguráciou démona "crond
" v súbore
"/etc/crontab
":
# run-parts 01 * * * * root nice -n 19 run-parts /etc/cron.hourly 02 4 * * * root nice -n 19 run-parts /etc/cron.daily 22 4 * * 0 root nice -n 19 run-parts /etc/cron.weekly 42 4 1 * * root nice -n 19 run-parts /etc/cron.monthly
V tomto prípade to bude teda každú noc o 4:02. Tento čas je vhodný, ako aj iné časy v dobe, keď je server nevyužívaný.
Poznámka: nech Vás nepletie, že sa skript spúšťa denne; skutočné rotácie logov sa uskutočnia iba v intervaloch, ktoré ste nakonfigurovali.
Poznámka: rotované logy môžete prezerať úplne rovnako ako "normálne"
logy, príkazmi ako "more
", "less
", vyhľadávať
v nich pomocou "grep
" a pod. Pokiaľ sú súbory skomprimované,
môžete použiť utility dodávané v balíčku "gzip
":
"zmore
", "zless
" a "zgrep
".
Príklad: ukážka adresára "/var/log" (tesne po rotovaní):
[root@hudson /var/log]# ls -la *.log* -rw-r----- 1 root adm 85 Mar 16 23:15 auth.log -rw-r----- 1 root adm 22279 Mar 16 23:15 auth.log.1.gz -rw-r----- 1 root adm 0 Mar 16 23:15 boot.log -rw-r----- 1 root adm 46921 Mar 16 23:15 boot.log.1.gz -rw-r--r-- 1 root root 0 Mar 16 23:15 security.log -rw-r----- 1 root adm 1020 Mar 16 17:18 security.log.1.gz -rw------- 1 root adm 0 Mar 16 23:15 sudo.log -rw------- 1 root adm 153 Dec 7 12:52 sudo.log.1.gz -rw-r----- 1 root adm 0 Mar 16 23:15 user.log -rw-r----- 1 root adm 13126 Mar 16 22:32 user.log.1.gz
Program, ktorý sa väčšinou používa na rotovanie logov, sa nazýva poeticky
- "logrotate
". Jeho hlavný konfiguračný súbor je
"/etc/logrotate.conf
", ktorý obsahuje všeobecné nastavenia.
Okrem toho sa používajú súbory uložené v adresári
"/etc/logrotate.d
". Je zvykom, že každý nainštalovaný balíček
démona, ktorý vytvára logy, si vytvorí aj skripty, ktorý skonfiguruje
program "logrotate
" pre svoje účely. Výhodou je, že tieto
skripty neovplyvnia činnosť ostatných a tiež to, že si môžete tieto skripty
upraviť alebo aj pridať podľa svojej potreby.
Nastavenia v "/etc/logrotate.conf
" sú globálne, platia teda vo
všetkých súboroch v adresári "/etc/logrotate.d
".
Vo všeobecnosti môžeme možnosti programu "logrotate
" opísať
takto: program umožňuje rotovať logovacie súbory v denných, týždenných alebo
mesačných intervaloch, prípadne ak prekročili určitú veľkosť, a umožňuje
určiť, čo sa pred rotáciou a po nej urobí (môže sa spustiť skript alebo
príkaz), aké prístupové práva budú mať rotované súbory, koľko sa ich bude
uchovávať, či budú komprimované a pod.
Ešte raz pripomínam, že v "logrotate
" sa nedefinuje čas,
v ktorom sa majú logy rotovať! Toto zabezpečuje definovanie intervalu spolu
s pravidelným spúšťaním programu "logrotate
" z démona
"crond
". "logrotate
" si uchováva časy posledných
rotácií jednotlivých logov a v prípade, že rotácia už prebehla, program sa
ukončí po svojom spustení.
Poznámka: niekedy sa "logrotate" používa len na rotovanie logov, ktoré neobsluhuje "syslogd". Interné logy "syslogd" (zisťujú sa z konfiguračného súboru "/etc/syslog.conf") môžu zabezpečovať iné skripty, platí to minimálne pre distribúciu Debian! Má to medziiným aj tú výhodu, že ak upravíte súbor "/etc/syslog.conf", budú sa logovať aj Vami pridané logovacie súbory.
Ukážka konfiguračného súboru "/etc/logrotate.conf
" (Mandrake
9.1):
# see "man logrotate" for details # rotate log files weekly # VIX: ak nie je uvedene inak, rotujeme logy kazdy tyzden weekly # keep 4 weeks worth of backlogs # VIX: ak nie je uvedene inak, ponechavame 4 rotovane logy rotate 4 # create new (empty) log files after rotating old ones # VIX: ak nie je uvedene inak, po rotovani vytvorime novy, prazdny logovaci # subor create # uncomment this if you want your log files compressed # VIX: ak nie je povedane inak, logy budu komprimovane compress # RPM packages drop log rotation information into this directory # VIX: adresar, v ktorom sa nachadzaju dalsie konfiguracne subory (pridavaju # ich instalacne skripty balickov) include /etc/logrotate.d # no packages own lastlog or wtmp -- we'll rotate them here # VIX: rotacia suboru "/var/log/wtmp" mesacne, ponechame jeden stary log # a po odrotovani vytvorime prazdny subor /var/log/wtmp s pravami 664 # a vlastnikom root a skupinou utmp. /var/log/wtmp { monthly create 0664 root utmp rotate 1 } # VIX: rotacia suboru "/var/log/lastlog" mesacne, ponechame jeden stary log /var/log/lastlog { monthly rotate 1 }
Ukážka konfiguračného súboru "/etc/logrotate.d/syslog
" (Mandrake
9.1):
# WARNING : don't use * wildcard as extension # (glob in logrotate will try to rotate all files instead of # only the basenames of the logs, i.e. it will rotate # already rotated files and recompress them, taking # exponential time...) # VIX: ak chcete súčasne rotovať niekoľko logovacích súborov, súbory # musia byť napísané v JEDNOM RIADKU! Pre prehľadnosť textu sú v tomto # príklade na viacerých riadkoch!!! # VIX: v tomto konfiguračnom súbore definujeme týždennú rotáciu viacerých # logovacích súborov, pričom uchovávame 5 starších verzií. Po odrotovaní # VŠETKÝCH súborov zašleme démonovi "syslogd" signál "HUP", čím ho prinútime # otvoriť nové logovacie súbory. /var/log/auth.log /var/log/syslog /var/log/user.log /var/log/secure /var/log/messages /var/log/boot.log /var/log/mail/errors /var/log/mail/info /var/log/mail/warnings /var/log/cron/errors /var/log/cron/info /var/log/cron/warnings /var/log/kernel/errors /var/log/kernel/info /var/log/kernel/warnings /var/log/lpr/errors /var/log/lpr/info /var/log/lpr/warnings /var/log/news/news.err /var/log/news/news.notice /var/log/news/news.crit /var/log/daemons/errors /var/log/daemons/info /var/log/daemons/warnings /var/log/explanations { sharedscripts rotate 5 weekly postrotate /usr/bin/killall -HUP syslogd # endscript }
Najbežnejšie používané parametre (výber, pozri aj "man
logrotate
"):
gzip
"gzip
")syslogd
" a ktorých môže byť aj viac ako 10.logrotate
" pri rotácii
ignorovať. Ak uvediete pred zoznamom znak "+", zoznam prípon sa doplní, inak
sa prepíše. Štandardne obsahuje zoznam prípony ako: ".rpmorig
",
".rpmsave
", ".rpmnew
" (záložné verzie súborov
vytvárané pri inštalácii RPM balíčkov) ",v
" (verziované súbory,
ak používate systémy ako RCS, CVS), ".swp
" (dočasný súbor
editora "vim
"), "~"
(záložný súbor editora
"joe
").