Máte např. nějaký hardwarový problém se systémem a v internetové diskuzi se objeví rada: „podívej se do logu“. Log je logicky první věc, které může napovědět příčinu, a tím pádem i řešení problému.
Většina systémových služeb, programů a utilit provádí tzv. logování, tedy zapisuje informace o své činnosti do textových souborů s tím, že zpravidla přidává nové řádky na jeho konec. Takže program zaznamená své spuštění, příkazy, problémy a příčiny, proč nemohl udělat to či ono. Logování v Linuxu je velmi propracované a dotažené téměř k dokonalosti. Soubory s logy můžete najít především v adresáři /log, ale některé programy mají své vlastní logovací soubory. Jejich umístění najdete v manuálu k programu.
Logování lze nastavit přesně podle potřeb. Můžete veškerá data okamžitě zahazovat (nelze doporučit; ne vše, co je možné je vhodné ), periodicky mazat, logy můžete rotovat a po určitou dobu je skladovat, nebo třeba komprimovat, archivovat na zálohovací médium či přeposílat na jiná místa své sítě.
Logy si mohou programy pořizovat samy (Apache), nebo využívají systémovou službu syslog. Syslog je program běžící na pozadí jako služba syslogd a pro všechny programy, které o to požádají, umožní jednotný způsob logování. Zprávy filtruje a řadí podle jejich kategorie a důležitosti. Odliší se tak zprávy jádra, pošty, cronu, a zároveň se jinak naloží s varováním nebo informačním hlášením. Programy vytvářejí své záznamy jednoduše systémovým voláním syslog. Tohle volání předá zprávu do /dev/log, tady si ji syslog vyzvedne a připojí k příslušnému logovacímu souboru.
[root@localhost]# service -s |grep syslog
syslogd (pid 2958) běží...
Způsob, jak naložit se zprávami různé kategorie a závažnosti je uveden v /etc/syslog.conf. Zde se určí, zda se zpráva někam zaznamená, nebo zda se zahodí. Formát souboru je následující:
kategorie.závažnost cíl_zprávy
Položky jsou odděleny tabulátorem.
Kategorie existují následující:
auth a authpriv - bezpečnostní / autorizační zprávy
mail - logy poštovního systému
cron - logy programu cron a at
kern - záznamy jádra (kernelu)
daemon - zprávy systémových služeb
local1 - zprávy nástrojů systému drak
local7 - zprávy o startu systému
emerg - varovná hlášení připojeným uživatelům - vypisují se přímo do konzoly.
Z tečkou je uvedena závažnost od které výše se budou zprávy z dané kategorie zaznamenávat. Například:
local1.*
zapíše všechny hlášení, které vygenerují programy z rodiny drak. Naproti tomu zápis:
cron.=warn -/var/log/cron/warnings.log
cron.err -/var/log/cron/errors.log
rozdělí zprávy varovné do jiného logu, než chybová hlášení.
V defaultním nastavení Mandrivy nejsou úplně všechny možnosti využity, lze doplnit dále kategorie např. news (usenet news), syslog (záznamy syslogu), user (hlášení uživatelské úrovně), uucp. Lokálně definované úrovně mají k dispozici local0 až local7, v Mandrivě je využito pro nástroje „drak“ a záznamy ze startu.
uvádím od nejnižší po nejvyšší / nejnaléhavější:
debug - ladící hlášení
info - informační zpráva
notice - normální stav avšak vcelku důležitý pro systém
warning - varovné upozornění; od této úrovně je běžné logy zapisovat
err - hlášení o chybě
crit - kritický stav
alert - očekává se urychlená reakce
emerg - systém se stává nepoužitelným
uvádí pravá strana tabulky, oddělená tabulátorem. Nejběžnější případ je uvést cestu k souboru, k němuž se budou záznamy připojovat:
/cesta/souboru/log.txt
Jsou ovšem i další možnosti:
@logovací_pocitac - máte-li logovací server, zprávy budou odeslány na něj. Tato možnost je u kritických systémů velmi důležitá, protože např. při napadení může útočník logy na napadeneém počítači změnit/vymazat, na dalším samostatném stroji mohou být uchovány i nadále ty původní
|/cesta/k/pojmenované/rouře - chcete-li zprávy filtrovat externími programy, můžete využít pojmenovanou rouru.
uživatel1.uživatel2… - zpráva se zobrazí uvedeným uživatelům, (jsou-li přihlášeni)
* - hvězdička; zpráva se zobrazí všem přihlášeným uživatelům
/dev/console /dev/tty1 atp. - zapíše se na zadaný terminál.
Jak vyplývá z formátu souboru /etc/syslog.conf, lze zprávy zasílat do souboru kamkoli pod jakýmkoli jménem. Nicméně existují určité konvence, které říkají asi toto: Používejte standardní názvy a umístění logovacích souborů, například prot, aby je i noví správci snadno našli, aby je dokázaly používat programy pro kontrolu logů, prostě aby nebyl v systému až takový bordel.
/var/log/messages - hlavní systémový log
/var/log/syslog - druhý základní systémový log
Vzhledem ke konstrukci podmínek v /etc/syslog.conf:
*.info;mail,news,authpriv.none -/var/log/messages
*.*;auth,authpriv.none -/var/log/syslog
je zjevné, že se oba hlavní logy částečně překrývají. Soubor messages obsahuje navíc zprávy z news, mnoho obecných informačních zpráv, zprávy z mailového systému a přihlašování uživatelů. Souboru /var/log/syslog pak mnoho obecných zpráv (*.*).
/var/log/auth.log - zprávy o přihlášení (spuštění systému), autorizace všeho druhu, změny systémových nastavení (např. v msec)
/var/log/dmesg - obraz vyrovnávací paměti pro zprávy jádra
/var/log/boot.log - zprávy o spuštění sítě, o změnách v /etc/resolv.conf ap.
/var/log/explanations - zprávy „mandriváckých“ nástrojů drak (drakxservices, harddrake, rpmdrake, ale třebas taky mdkapplet - nástroj pro automatické aktualizace, net_applet - sledování sítě ap.)
/var/log/kdm.log - přihlášení do X Windows pomocí kdm; obdobně existuje log pro gdm atp.
/var/log/security.log - záznamy z periodických bezpečnostních prověrek systému (obvykle je spouští cron).
/var/log/sudo.log - program sudo (volá se příkazem su); záznamy o neplatných pokusech o přihlášení pomocí su.
/var/log/auth.log - záznamy o činnosti uživatele, spouštěné služby, různé činosti, např. zde najdete, jaké balíčky byly instalovány atp.
/var/log/wtpm - binární soubor, záznamy o přihlašování uživatelů. Lze dekódovat příkazem last. Příkaz pro čtení může vypadat třebas takto: last < wtmp |less.
Další důležité zprávy (zprávy z důležitých zdrojů) mají vyhrazeny v /var/log samostatné adresáře, v nichž jsou logovací soubory rozděleny podle závažnosti zpráv. Takže zde najdete např. adresáře /var/log/kernel/, /var/log/cron/, /var/log/daemons/ (zprávy z běžících služeb), /var/log/mail/, /var/log/samba/ atd. Zvláštní pozornost je dobré věnovat záznamům v /var/log/security/, zejména změnám v sgid a suid souborech, nebo se zde dozvíte, jaké porty jsou na vašem počítači otevřené světu.
Syslog zapisuje řádky do příslušného logu v tomto tvaru:
měsíc den čas počítač název_procesu[pid]: vlastní zpráva
Takže se můžete např. dozvědět:
Mar 30 13:44:26 localhost gconfd (root-5164): Zjištěna adresa „xml:readonly:/etc/gconf/gconf.xml.mandatory“ je zdroj nastavení pouze pro čtení na pozici 0
Standardní syslogd je vcelku jednoduchý a snadno použitelný program. Pokud potřebujete něco robustnějšího, můžete použít syslog-ng. V souboru syslog-ng.conf máte mnoho dalších možností (viz manuálové stránky), např využití regulárních výrazů při filtrování, využití TCP (syslogd umí jen UDP) protokolu - tedy lze využít garantovaného síťového logování, umí definovat zdro zprávy, odlišit reakce na lokální zprávy a zprávy ze vzdálených systémů a má mnoho dalších vychytávek. Viz manuálové stránky k programu a souboru syslog-ng.conf.
Program je v repozitářích Mandrivy.
Je sice fajn mít logy, ale kdo by je četl, že ano?. Takže využijme programy pro kontrolu logů, lze je spouštět třebas periodicky (zajistí cron) nebo existují analyzátory, které běží trvale (obvykle využívají pojmenované roury, viz výše). Tak vám žádná důležitá informace neuteče, nicméně jako každá činnost, i tato spotřebovává část výkonu počítače.
Pokud někdo zaútočí na váš počítač, systémové logy tyto aktivity zaznamenají a pokud budou logy dostupné, zjistíte, co udělali. Proto je běžné, že se útočníci snaží příslušné záznamy v logu smazat či falšovat. Na druhou stranu mohou zprávy v logu napomoci i útočníkům (pokud získají právo ke čtení), aby zjistili, jaké služby v jaké verzi jsou na vašem počítači spuštěné, při nesprávném přihlášení je možné v logu najít třebas heslo (zadá-li ho uživatel místo svého jména) atd atd. Proto je nezbytné správně nastavít logům přístupová práva
Vlastnictví - root
zápis - jen root
čtení - jen skupina log
ostatní uživatelé - žádná práva
Podobně nastavení práv adresáře /var/log:
zápis - jen root (jinak je může někdo jiný snadno smazat).
Změny provedete snadno pomocí prográmku drakperm, nebo proveďte změny ručně v souborech /var/lib/msec/security.conf (obsahuje nastavení právě aktivní bezpečnostní úrovně); tato nastavení lze přepsat v souboru /etc/security/msec/security.conf.
Pokud je změníte jen u daného souboru/adresáře, pravidelně spouštěný program msec je znovu nastaví podle paametrů uvedených v těchto souborech. Více man msec, tato manuálová stránka umí česky! (máte-li instalován balíček man-pages-cs.
Do souboru logu se stále přidávají nové záznamy na konec souboru. Soubor tak neustále narůstá, a po nějaké době by zabral veškeré dostupné místo na disku. proto se buď po určité době, nebo po dosažení určité délky (platí, co nastane dřív), soubor logu tzv zrotuje. To znamená, že původní soubor se zkomprimuje, dostane nový název a log se zapisuje od začátku znovu.
Například máte v /var/log tyto soubory:
auth.log, auth.log.1.gz,auth.log.2.gz, auth.log.3.gz
Tyto logy zaznamenávají zejména přihlášení uživatele do systému. Soubor auth.log je aktuální, právě se používá. Ostaní jsou zálohy starších záznamů, nejmladší má v názvu číslo 1, nejstarší číslo 3. Přípona gz připomíná, že soubory jsou pro úsporu místa komprimovány. Po zaplnění aktuálního logu se u všech uvedených souborů číslování posune o jednu: auth.log → auth.log.1.gz, auth.log.1.gz → auth.log.2.gz, auth.log.2.gz → auth.log.3.gz a původní auth.log.3.gz bude přepsán novým souborem, původním auth.log.2.gz. Poslední soubor tedy vypadne z evidence.
Pokud se útočníkovi podaří vygenerovat mnoho logovacích záznamů (pochopitelně to nedělá ručně, má na to příslušné scripty či programy), tak se vám logy několikrát zrotují a nemáte šanci v záznamech nic použitelnéo dohledat.
Program logrotate, který rotaci logů zajišťuje, má konfigurační souboru v /etc/logrotate.conf. Má jednoduchou strukturu:
[root@localhost]# cat /etc/logrotate.conf
# Mandriva logrotate configuration
# $Id: logrotate.conf 53701 2007-07-19 20:55:32Z guillomovitch $
# logy rotují po týdnu
weekly
# Po čtyřech týdnech dojde k překlopení logů; kolik souborů log.X.gz bude vznikat
rotate 4
# vytvořit nový soubor po provedeno rotaci
create
# komprimovat uložené logy
compress
# RPM balíček, který má na starosit rotaci logů v tomto adresáři
include /etc/logrotate.d
#Dosud uvedené parametry platí pro všechny logovací soubory. Následují parametry pro konkrétní logy.
# no packages own lastlog, wtmp, or btmp – we'll rotate them here
/var/log/wtmp {
monthly
create 0664 root utmp
rotate 1
}
/var/log/btmp {
missingok
monthly
create 0600 root utmp
rotate 1
}
# system-specific logs may be configured here
[root@localhost log]#
——————
Lze použít příkaz size:
size=10000k (logy zrotují po dosažení velikosti 10 MB).
Dále lze zajistit, aby poslední log nebyl smazán, ale odeslán emailem správci:
mail spravce@mail.cz
Pokud zjistíte, že vám logy začaly rotovat rychleji, než je běžné, pak se zcela jistě něco nedobrého děje.
Jinou možností je použít samostatný logovací server s velkou kapacitou, zvýšíte příslušně parametr rotate (třebas na 30 či na 50), takže se minulé zprávy jen tak neztratí.
Při prováděných pravidelných zálohách systému by pak měly být ukládány na média i logy, takže by mělo být možné dohledat případné nelegální aktivity. Prosté mazání starých logů není nejlepší nápad.
Pokud má logrotate nastavenu rotaci logu po týdnu, pak lze prostou změnou systémového data přimět logrotate k provedení rotace logů. Pokud na počítači běží NTP server (jeho pčelem je udržovat přesný systémový čas pomocí synchronizace s důvěryhodnými internetovými NTP servery), pak lze zfalšováním NTP packetů zajistit, že vypadají jako z důvěryhodného zdroje, ale udávají čas o týden posunutý vpřed. Systém nové datum přijme a logrotate poslušně zrotuje logy. Po pěti posunech jsou logy v nenávratnu.
U veřejných NTP serverů není obvykle možná autentizace, takže se doporučuje používat více NTP serverů současně a sledujte NTP logy. Pokud máte možnost používat NTP server podporující autentizaci, využijte toho.
Logovací program lze přetížit např. zaplněním logovacího disku (není-li nastavena rotace po dosažení určité velikosti logu) a pak dochází k zahazování dalšíc zpráv, nebo ke zhroucení systému, pokud jsou logy součástí stejného oddílu jako systémový /var. Při přetížení sítě a síťovém logování lze přetížit množstvím zpráv celou síť, a protože protokol UDP neumí kontrolovat doručení packetu, dochází ke ztrátám dat doručovaných sítí, stejně jako těch generovaných lokálně.
Jelikož proti zahazování lokálních zpráv se nedá příliš mnoho dělat, ochranou síťových packetů je možné řešit jen změnou konfigurace sítě. Zejména, pokud logujete jen několik málo počítačů, je nejvýhodnějším řešením přímé propojení kříženým kabelem. Vynechají se tak všechny rozbočovače, přepínače atp., propustnost dat je tedy maximální.
Jinou možností je využít pro logování místo syslogu programy typu multilog, respektive z starší verze. Tenhle program se nezhroutí ani pod velkou zátěží a přitom se snadno používá.
Logovací server passlogd (a další jemu podobné) umí otevřít síťové rozhraní v promiskuitním režimu a číhat na síti a zaznamenávat jakékoli packetu syslogu, které tam zachytí. Pokud nakonfigujete své počítače tak, aby odesílaly své logy po síti na neexistující logovací server, logy budou na síť odesílány, „neviditelný“ logovací server (passlogd) je zachytí a zaznamená. Útočník ale není schopen nijak snadno zjistit, kde se logy zaznamenávají. Uvedete-li v /etc/syslog.conf:
*.* @192.168.1.10
budou logy odesílány pryč, ale na té adrese nemusí být vůbec žádný počítač. naproti tomu passlogd může běžet na počítači 192.168.1.128 a vše si tam uloží. Nevidetelný logovací program by měl být buď na stejné síti, jako odesílací stroj, nebo na stejné síti, jako neexistující cílový stroj.
Pomocí syslog-ng můžete mezi klientem a serverem vytvořit stunnel (součást OpenSSH). Je v repozitářích mandrivy. (Má nádherný automatizovaný překlad krátkého popisu: Program, který balí normální zásuvkové spojení s SSL/TLS ) Pro příklad zvolme jména počítačů na „posilam“ a „ukladam“. V syslog-ng.conf počítače „posilam“ uvedete:
destination send_tunnel { tcp(ip(„127.0.0.1“) port (9999)); };
Zprávy budou odesílány na lokální počítač, port 999. Pak spustíte stunnel a přikážete mu nslouchat na portu 9999 s tím, že zprávy tam doručované bude přeposílat na server „ukladam“ na port 9987:
posilam#stunnel -c -d 127.0.0.1:9999 -r ukladam:9987
Na přijímacím (logovacím) stroji „ukladam“ bude spuštěn stunnel s tímto parametrem:
ukladam#stunnel -d 9987 -r 127.0.0.1:9999
V syslog-ng.conf počítače „uladam“ nakonfigurujeme, aby syslog-ng poslouchal na lokální portu i příště:
source posilam { tcp(ip(127.0.0.1) port(9999) keep-alive(zes)); };
Pak zbývá poslat SIGHUP procesům syslog-ng na obou stranách, aby začala komunikace probíhat šifrovaně.
|
system/prikazovy_radek/logovani.txt · Poslední úprava: 2011/01/05 18:04 autor: yullaw
|