01-02/2001
Linuxove´ noviny
´ vodem U David H¨ aring
ˇ´slo A je tady prvnı´ c ı Linuxovy ´ ch novin v nove ´m mile ´niu. Doufejme, z ˇe letos ˇnı´ rok bude pro Linuxove ´ noviny ˇtena ˚ m pˇrejeme, u ´ spˇ es ˇnˇ ejs ˇ´ı nez ˇ ten loˇ nsky ´ a take ´ Va ´m c ´ˇru i kdyz ˇ tros ˇku se zpoz ˇdˇ enı´m, co moz ˇna ´ nejpˇr´jemnˇ ı ejs ˇ´ı vstup do roku 2001. ˇ´sle V tomto c ı se dovı´te mimo jine ´ jak nakonfigurovat sı´t’ovy ´ super-server inetd, podı´va ´ me se na monitorova ´ nı´ za ´tˇ ez ˇe, vra ´ tı´me se k problematice scanova ´ nı´ port˚ u a samozˇrejmˇ e nechybı´ rubrika „Zasma ´ li jsme se“. Linuxove ´ noviny se take ´ neobejdou bez Vas ˇich pˇr´spˇ ı evk˚ u. Pˇr´spˇ ı evky m˚ uz ˇete posı´lat jako obvykle na adresu redakce (1). 1
[email protected]
mailto:
[email protected]
Ochrana pˇred scanova ´ nı´m port˚ u II: Scanlogd David H¨ aring, 10, prosince 2000
Scanlogd je dals ˇ´m ı z na ´ stroj˚ u urˇ ceny ´ch pro detekci scanova ´ nı´ port˚ u, podobnˇ e jako napˇr. Portsentry, se ktery ´ m jsme ˇ´sle se sezna ´ mili v minule ´m c ı Linuxovy ´ch novin. Na tento ˇla c ´ nek nynı´ volnˇ e navazujeme a zde se jiz ˇ nebudeme zaˇi bˇ by ´vat definicemi „portscanu“ c ez ˇny ´ mi metodami scanoˇtena va ´ nı´ port˚ u; struˇ cny ´ u ´ vod do problematiky c ´ˇr nalezne ˇla v pˇredchozı´m c ´ nku. ˇ uje monitorovat bud’ loka Scanlogd umoz ˇn ´ lnı´ syste ´m (zpravidla pˇres „raw socket“), anebo i provoz cele ´ loka ´ lˇemuz nı´ sı´tˇ e (k c ˇ vyuz ˇ´va ı ´ knihovny libpcap (1), libnet (2) a libnids (3)). Domovskou stra ´ nku projektu nalezneme na serveru Openwall (4). Instalace a konfigurace Instalace scanlogd je velmi jednoducha ´ . Pokud scanlogd inˇelem monitorova stalujeme za u ´c ´ nı´ loka ´ lnı´ho syste ´mu, kompilaci provedeme pˇr´kazem ı make linux. V tomto pˇr´padˇ ı e bude scanlogd pouz ˇ´vat ı pouze „raw socket“. Pokud chceme monitorovat provoz v loka ´ lnı´ sı´ti, pouz ˇijeme pro sestavenı´ pˇr´kaz ı make libnids, v tomto pˇr´padˇ ı e bude scanlogd pouz ˇ´vat ı knihovny libpcap a libnids (ktere ´ musı´me pˇredtı´m instalovat a nastavit pˇr´slus ı ˇne ´ cesty v Makefile). Nenı´ vhodne ´ pouz ˇ´vat ı pouze libpcap bez libnids (pˇr´kaz ı make libpcap), protozˇe pak scanlogd nebude moci pracovat s fragmentovany ´ mi pakety. Scanlogd nepouz ˇ´va ı ´ konfiguraˇ cnı´ soubory, konfigurace se prova ´ dı´ pˇred kompilacı´ ruˇ cnı´ editacı´ hlaviˇ ckove ´ho souboru params.h, kde lze nastavit zejme´na na´sledujı´cı´ polozˇky: • SCANLOGD USER: uz ˇivatel, pod ktery ´m scanlogd po-
bˇ ez ˇ´ı (je za ´ hodno vytvoˇrit pro provozova ´ nı´ scanlogd ˇet) zvla ´s ˇtnı´ u ´c • SCANLOGD PROMISC: zde volı´me, zda bude sı´t’ove ´ zaˇr´zenı ı ´ pracovat v promiskuitnı´m rez ˇimu (tedy bude pˇrijı´mat ves ˇkerou komunikaci, nejen tu ktera ´ je urˇ cena dane ´mu zaˇr´zenı ı ´). Pokud monitorujeme pouze provoz loka ´ lnı´ho syste ´mu, ponecha ´ me hodnotu 0. • PORT WEIGHT PRIV, PORT WEIGHT HIGH: zde nastavı´me za ´ vaz ˇnost pokus˚ u o scan privilegovany ´ch port˚ u (porty niz ˇs ˇ´ı nez ˇ 1024 m˚ uz ˇe otevˇr´t ı pouze aplikace bˇ ez ˇ´cı ı ´ s opra ´ vnˇ enı´m uz ˇivatele root) a neprivilegovany ´ch port˚ u. Scanu privilegovany ´ch port˚ u se standardnˇ e pˇrikla ´ da ´ vˇ ets ˇ´ı vy ´ znam. ˇ´slo ˇr´ka • SCAN MIN COUNT: c ı ı ´ kolik port˚ u musı´ by ´ t scaˇasove nova ´ no ze stejne ´ho zdroje bˇ ehem urˇ cite ´ho c ´ho u ´ seku, aby byl scan zaznamena ´ n do logu. ˇasova • SCAN DELAY THRESHOLD: maxima ´ lnı´ c ´ prodleva, ktera ´ m˚ uz ˇe uplynout mezi scany jednotlivy ´ ch port˚ u, aby byl scan zaznamena ´ n do logu. • LOG COUNT THRESHOLD: maxima ´ lnı´ poˇ cet scan˚ u ˇasove bˇ ehem c ´ho u ´ seku, ktere ´ budou zaznamena ´ ny do logu. Ochrana proti zahlcenı´ syste ´move ´ho logu. • poloz ˇka SYSLOG IDENT, poloz ˇka SYSLOG FACILITY a poloz ˇka SYSLOG LEVEL: nastavenı´ logova ´ nı´ (odpovı´dajı´cı´m zp˚ usobem je tˇreba nakonfigurovat take ´ syslog). Za ´ vaz ˇnost scanu je da ´ na poˇ ctem scanovany ´ ch privilegovany ´ ch port˚ u vyna ´ sobeny ´ch jejich va ´ hou (PORT WEIGHT PRIV) plus poˇ cet scanovany ´ch neprivilegovany ´ ch port˚ u vyna ´ sobeny ´ ch jejich va ´ hou (PORT WEIGHT HIGH). Scan je povaz ˇova ´ n za vy ´znamny ´ (a je zaznamena ´ n) tehdy, je-li za ´ vaz ˇnost rovna ´ anebo vˇ ets ˇ´ı nez ˇ hodnota SCAN MIN COUNT vyna ´ sobena ´ PORT WEIGHT PRIV. Pouz ˇitı´ Pˇri kompilaci ma ´ me moz ˇnost zvolit uz ˇivatele, pod ktery ´m ˇet scanlogd pobˇ ez ˇ´. ı Zaloz ˇ´me ı tedy zvoleny ´ uz ˇivatelsky ´ u ´c ˇet nenı´ tˇreba se pˇrihlas (na u ´c ˇovat, m˚ uz ˇeme tedy pˇrihla ´s ˇenı´ zaka ´ zat). Pokud chceme, aby byl scanlogd spus ˇtˇ en automaticky po startu syste ´mu, m˚ uz ˇeme jej pˇridat do startovacı´ch skript˚ u, napˇr. rc.local). Za ´ znam scanu vypada ´ pˇribliz ˇnˇ e na ´ sledovnˇ e:
Dec 10 14:24:19 server scanlogd:\ 11.22.33.44:45048 to 11.22.33.45 ports 16, 18, ..., FsrPaUxy, TOS 00, TTL 59 @14:24:19 ˇas, zdrojova V logu je uva ´ dˇ en c ´ a cı´lova ´ IP adresa, seznam scanovany ´ch port˚ u, pouz ˇite ´ nastavenı´ pˇr´znak˚ ı u paket˚ u a hodnoty TOS a TTL. V uvedene ´m pˇr´kladu ı byl proveden „Xmas“ scan (pouz ˇ´va ı ´ pakety s nastaveny ´mi pˇr´znaky ı
ˇ Linuxove ´ noviny pˇripravuje a vyda ´ va ´ Ceske ´ sdruz ˇenı´ uz ˇivatel˚ u operaˇ cnı´ho syste ´mu Linux
Linuxove ´ noviny
01-02/2001
FIN, PUSH a URG; proto jsou v logu pˇr´znaky ı F, P a U vyznaˇ ceny velky ´ mi pı´smeny) na porty 19-21. Scanlogd ma ´ limitovanou velikost za ´ znamu, ktery ´ se do logu zapı´s ˇe, pokud na ´ m nestaˇ c´, ı tak tato poloz ˇka je opˇ et pˇri kompilaci nastavitelna ´ v souboru params.h (pamatujme ale na moz ˇnost pˇr´padne ı ´ho zaplnˇ enı´ logu). Srovna ´ nı´ s Portsentry Scanlogd na rozdı´l od Portsentry scany pouze detekuje a loˇ uje na scany reagovat modifikacı´ pravidel figuje, neumoz ˇn ˇi tcp wrappers nebo spous rewallu c ˇtˇ enı´m definovany ´ ch akcı´. Da ´ le scanlogd analyzuje pouze protokol TCP, zatı´mco portsentry umı´ detekovat i UDP scany. Na druhou stranu se portsentry nechra ´ nı´ proti zaplnˇ enı´ syste ´move ´ho logu a je urˇ cen pouze pro monitorova ´ nı´ jednotlivy ´ch syste ´m˚ u, neuˇ uje monitorovat provoz loka moz ˇn ´ lnı´ sı´tˇ e. Za ´ vˇ erem Scanlogd je jednoduchy ´ na ´ stroj pro monitorova ´ nı´ TCP port scan˚ u loka ´ lnı´ho poˇ c´taˇ ı ce nebo i okolnı´ sı´tˇ e, ktera ´ je plnˇ e dostaˇ cujı´cı´ pokud na ´ m jde pouze o zaznamena ´ nı´ scan˚ u.
klı´ˇ covy ´ ch slov charakterizujı´cı´ch obvykla ´ norma ´ lnı´ hla ´s ˇeˇasto a nejsou zajı´mava nı´, ktera ´ se v logu vyskytujı´ c ´ ; tato hla ´s ˇenı´ jsou ignorova ´ na. Na vy ´ stupu je pak zkra ´ cena ´ verze syste ´move ´ho logu obsahujı´cı´ vy ´ znamne ´ uda ´ losti (dle na ´ mi zadany ´ ch klı´ˇ covy ´ ch slov) a da ´ le ostatnı´ neobvykle ´ uda ´ losti, ktere ´ nepatˇr´ı mezi „obvykle ´“ zpra ´ vy urˇ cene ´ k odfiltrova ´ nı´ (opˇ et dle na ´ mi zadany ´ch klı´ˇ covy ´ ch slov — coz ˇ zaruˇ c´, ı z ˇe bude odfiltrova ´ no pouze to, o co opravdu nestojı´me). Instalace sesta ´ va ´ z editace skriptu logcheck.sh, kde nastavı´me cesty k seznam˚ um klı´ˇ covy ´ ch slov, pracovnı´mu adresa ´ˇri, cesty k log soubor˚ um, definujeme adresu na kterou chceme vy ´ stup posı´lat atd. (ovs ˇem mˇ ejme zde na pamˇ eti, z ˇe syste ´movy ´ log obsahuje citlive ´ informace o syste ´mu a nemˇ eli bychom jej posı´lat v textove ´ formˇ e pˇres ned˚ uvˇ eryhodne ´ me ´dium). O zbytek se obstara ´ pˇr´kaz ı make linux — pˇrelozˇ´ı utilitu logtail a vsˇe potˇrebne´ instaluje na urˇ cene ´ mı´sto. Na za ´ vˇ er musı´me cron nakonfigurovat tak, aby se logcheck spous ˇtˇ el pravidelnˇ e (viz manua ´ lova ´ stra ´ nka crontab, crond) — tady je tˇreba vzı´t v u ´ vahu rotaci log soubor˚ u. Po nˇ ekolika prvnı´ch spus ˇtˇ enı´ pak „vyladı´me“ seznamy klı´ˇ covy ´ ch slov tak, aby vyhovovaly nas ˇim potˇreba ´ m. 1 Logcheck
http://www.psionic.com/abacus/logcheck/
1 libpcap
http://www.tcpdump.org/ 2 libnet
http://www.packetfactory.net/Projects/Libnet/ 3 libnids
http://www.packetfactory.net/Projects/Libnids/ 4 Scanlogd
http://www.openwall.com/scanlogd/
Analy ´ za syste ´movy ´ ch log˚ u: Logcheck David H¨ aring, 2. prosince 2000
Pravidelna ´ kontrola log˚ u by mˇ ela by ´ t nedı´lnou souˇ ca ´ stı´ u ´ drz ˇby kaz ˇde ´ho syste ´mu, i kdyz ˇ v praxi tomu tak bohuz ˇel mnohdy neby ´va ´ . Navı´c syste ´move ´ logy by ´vajı´ rozsa ´ hle ´ a nepˇrehledne ´, takz ˇe prohlı´z ˇenı´ takovy ´ ch log˚ u ˇra ´ dek po ˇra ´ dku pochopitelnˇ e nenı´ rea ´ lne ´. Samozˇrejmˇ e, v UN*Xovy ´ ch syste ´mech ma ´ me k dispozici spoustu utilit urˇ ceny ´ch pro pra ´ ci s textem, ktere ´ pracujı´ s regula ´ rnı´mi vy ´ razy, a pro zkus ˇenˇ ejs ˇ´ho ı administra ´ tora nenı´ proble ´m vytvoˇrit kra ´ tky ´ skript pro zpracova ´ nı´ log˚ u spous ˇtˇ eny ´ tˇreba pˇres cron. Na mı´sto psanı´ vlastnı´ch skript˚ u ovs ˇem m˚ uz ˇete take ´ sa ´ hnout po utilitˇ e logcheck (1). Nejedna ´ se o nic jine ´ho nez ˇ o kra ´ tky ´ skript pˇr´kazove ı ´ho interpretu pravidelnˇ e spous ˇtˇ eny ´ z cronu, ktery ´ podle Va ´ mi zadany ´ch klı´ˇ covy ´ch slov prohleda ´ syste ´movy ´ log, zapamatuje si pozici, na ktere ´ skonˇ cil (takz ˇe pˇri jeho dals ˇ´m ı spus ˇtˇ enı´ z cronu neprohlı´z ˇ´ı cely ´ logovy ´ soubor od zaˇ ca ´ tku) a vy ´ sledek pos ˇle prostˇrednictvı´m e-mailu urˇ cene ´ osobˇ e. Pro zapamatova ´ nı´ pozice, na ktere ´ s analy ´ zou logu skonˇ cil logcheck pouz ˇ´va ı ´ utilitu logtail (ktera ´ informace ukla ´ da ´ v souborech „jme ´no log souboru.offset“). Logcheck kontroluje take ´ i-uzly a velikosti log soubor˚ u, takz ˇe se m˚ uz ˇe vyrovnat i s rotacı´ log˚ u, pokud spous ˇtˇ enı´ logcheck s rotacı´ log˚ u synchronizujeme. Filtrova ´ nı´ logu probı´ha ´ na ´ sledovnˇ e: nejprve jsou v logu vyhleda ´ ny za ´ znamy obsahujı´cı´ klı´ˇ cova ´ slova z pˇredem definovany ´ch seznam˚ u s cı´lem vychytat d˚ ulez ˇita ´ hla ´s ˇenı´, ktera ´ na ´ s zajı´majı´. Na ´ slednˇ e je log konfrontova ´ n se seznamem
2
Konfigurujeme inetd a tcp wrappers David Haring, 5. prosince 2000
ˇla Tento c ´ nek je urˇ ceny ´ pˇredevs ˇ´m ı zaˇ c´najı ı ´cı´m administra ´ tor˚ um. Vysvˇ etlı´me zde fungova ´ nı´ „super-serveru“ inetd a podı´va ´ me se jak inetd spolupracuje s tcp wrappers pˇri omezenı´ pˇr´stupu ı k sı´t’ovy ´m sluz ˇba ´ m. Sı´t’ove ´ aplikace jsou zpravidla realizova ´ ny na principu klient-server. Server i klient jsou samostatne ´ programy. Server je pak aplikace, ktera ´ bˇ ez ˇ´ı bez pˇrerus ˇenı´ a oˇ ceka ´ va ´ spojenı´ od klient˚ u, jejichz ˇ poz ˇadavky vyˇrizuje. Klientsky ´ program je naopak zpravidla spous ˇtˇ en koncovy ´ mi uz ˇivateli a po vyˇr´zenı ı ´ poz ˇadavk˚ u je ukonˇ cen. Pˇr´kladem ı m˚ uz ˇe by ´ t sluz ˇba telnet. Balı´ˇ cek telnetu obsahuje mimo manua ´ lovy ´ ch stra ´ nek programy telnetd a telnet. Program telnetd je vlastnı´ server, ktery ´ se po spus ˇtˇ enı´ nava ´z ˇe na port 23 (coz ˇ je ˇeka port vyhrazeny ´ pro sluz ˇbu telnet) a c ´ na pˇr´chozı ı ´ spojenı´. Klient telnetu, ktery ´ m˚ uz ˇe by ´t spus ˇtˇ en bud’ na stejne ´m poˇ c´taˇ ı ci nebo i odjinud, po spus ˇtˇ enı´ kontaktuje server cı´love ´ho poˇ c´taˇ ı ce a nava ´z ˇe spojenı´, ktere ´ se po ukonˇ cenı´ sezenı´ ukonˇ c´. ı Serverove ´ aplikace, ktere ´ v Unixovy ´ ch syste ´mech bˇ ez ˇ´ı nepˇretrz ˇitˇ e na pozadı´ se nazy ´ vajı´ de ´mony. Pokud syste ´m poskytuje vˇ ets ˇ´ı mnoz ˇstvı´ sı´t’ovy ´ ch sluz ˇeb, bˇ ez ˇ´ı na nˇ em souˇ casnˇ e vı´ce takovy ´ch aplikacı´ — server˚ u. To m˚ uz ˇe ve ´st k ply ´tva ´ nı´ syste ´movy ´ mi prostˇredky a proto vˇ ets ˇina UNIXovy ´ ch syste ´m˚ u a distribucı´ Linuxu pouz ˇ´va ı ´ tzv. „super-server“, coz ˇ by ´va ´ zpravidla inetd. Ten funguje tak, z ˇe posloucha ´ na portech vs ˇech sluz ˇeb, ktere ´ spravuje a teprve podle pˇr´chozı ı ´ch poz ˇadavk˚ u na spojenı´ spous ˇtı´ servery obsluhujı´cı´ jednotlive ´ sluz ˇby. Nˇ ektere ´ jednoduche ´ sluz ˇby (echo, discard, chargen, time a daytime) umı´ inetd obsluhovat sa ´ m, bez spous ˇtˇ enı´ externı´ch server˚ u. Tyto sluz ˇby ale nejsou zpravidla vyuz ˇ´va ı ´ ny a je tudı´z ˇ rozumne ´ je vypnout. V distribuci Red Hat by ´va ´ inetd souˇ ca ´ stı´ balı´ˇ cku netkit-base. Inetd m˚ uz ˇe ke kontrole a omezenı´ pˇr´stupu ı
Linuxove ´ noviny
01-02/2001
# intern´ı sluˇzba time time stream tcp nowait root internal time dgram udp nowait root internal # protokol TFTP (Trivial File Transfer Protocol), bez autentikace, # pouˇz´ıv´a se k pˇrenosu dat zpravidla pˇri bootov´an´ı pˇres s´ıt’ tftp dgram udp wait tftp /usr/sbin/in.tftpd in.tftpd/boot/diskless # "Bootstrap Protocol" (BOOTP), slouˇz´ı k pˇridˇelov´an´ı IP adres a distribuci informac´ı # potˇrebn´ych pˇri bootov´an´ı bezdiskov´ych stanic bootps dgram udp wait root /usr/sbin/bootpd bootpd # sluˇzba finger finger stream tcp nowait root /usr/sbin/in.fingerd in.fingerd # IDENT protokol, poskytuje informace o vlastn´ıc´ıch spojen´ı auth stream tcp nowait nobody.identd /usr/sbin/in.identd in.identd -l -e -o # sluˇzba talk talk dgram udp wait root /usr/sbin/in.talkd in.talkd # sluˇzba FTP ftp stream tcp nowait root /usr/sbin/in.ftpd in.ftpd -l -a ˇ. 1: Vy ´pis c
/etc/inetd.conf — server poskytuje sluzˇby ftp, finger, auth, talk, tftp, bootps a time
ke sluz ˇba ´ m, ktere ´ spravuje, vyuz ˇ´vat ı balı´ˇ cek tcp wrappers (1).
trem m˚ uz ˇeme zvolit, zda budeme sluz ˇbu provozovat pˇres inetd anebo samostatnˇ e.
Konfigurace
Omezenı´ pˇr´ıstupu ke sluz ˇba ´m
ˇte ze souboru /etc/inetd.conf. Kaz Konfiguraci inetd c ˇdy ´ ˇra ´ dek obsahuje na ´ sledujı´cı´ poloz ˇky (vs ˇechny poloz ˇky musı´ by ´t vyplnˇ eny): „service“, „socket type“, „protocol“, „wait/nowait“, „user[.group]“, „server program“ a „server program arguments“. Poloz ˇka „service“ uda ´ va ´ jme ´no sluz ˇby (viz soubor /etc/services, pˇr´padnˇ ı e /etc/rpc). Poloz ˇka „socket type“ uda ´ va ´ typ socketu, coz ˇ je nejˇ castˇ eji „stream“ (pro protokoly vyuz ˇ´vajı ı ´cı´ spolehliva ´ spojenı´, napˇr. TCP) anebo „dgram“ (pro protokoly pouz ˇ´vajı ı ´cı´ datagramy, napˇr. UDP). Detaily viz napˇr. manua ´ lova ´ stra ´ nka socket(2). Poloz ˇka „protocol“ uda ´ va ´ na ´ zev protokolu („tcp“, „udp“ ˇasto „rpc/tcp“ c ˇi „rpc/udp“. nebo me ´nˇ ec Poloz ˇka „wait/nowait“ je v pˇr´padˇ ı e sluz ˇby pouz ˇ´vajı ı ´cı´ protokol TCP vz ˇdy „nowait“. V pˇr´padˇ ı e sluz ˇby protokolu UDP za ´ lez ˇ´ı na tom, zda server uvolnı´ socket a komunikuje s klientem pˇres nove ´ spojenı´ — v tomto pˇr´padˇ ı e m˚ uz ˇe souˇ casnˇ e bˇ ez ˇet vı´ce instancı´ serveru a pouz ˇijeme volbu „nowait“. ˇte datagramy tak dlouho, doV opaˇ cne ´m pˇr´padˇ ı e server c kud pˇricha ´ zejı´ a po uplynutı´ urˇ cite ´ doby od pˇrijetı´ poslednı´ho datagramu spojenı´ (timeoutu) se ukonˇ c´ı — v tomto pˇr´padˇ ı e pouz ˇijeme volbu „wait“ (takto funguje napˇr. talkd, de ´mon sluz ˇby talk anebo bootpd, de ´mon sluz ˇby bootps) Poloz ˇka user obsahuje jme ´no uz ˇivatele (pˇr´padnˇ ı e i skupiny), pod ktery ´ m se bude dana ´ sluz ˇba spous ˇtˇ et. Poloz ˇka „server program“ uda ´ va ´ cestu k serveru dane ´ sluz ˇby. V pˇr´padˇ ı e internı´ch sluz ˇeb se zde uva ´ dı´ „internal“. Poloz ˇka „server program arguments“ uda ´ va ´ parametry, se ktery ´mi bude server dane ´ sluz ˇby spous ˇtˇ en, s vy ´ jimkou internı´ch sluz ˇeb, kdy je tato poloz ˇka pra ´ zdna ´ . Uved’me si pˇr´klad ı konfigurace (/etc/inetd.conf — server poskytuje sluz ˇby ftp, finger, auth, talk, tftp, bootps a time). Pozna ´ mka: Z historicky ´ch d˚ uvod˚ u jme ´na de ´mon˚ u urˇ ceny ´ch pro spous ˇtˇ enı´ pˇres inetd zpravidla zaˇ c´najı ı ´ na „in.“, na rozdı´l od verzı´ de ´mon˚ u urˇ ceny ´ch pro samostatny ´ („stand-alone“) provoz; proto se nˇ ekdy m˚ uz ˇeme setkat v jednom balı´ˇ cku se dvˇ ema verzemi de ´mona. Nˇ ekdy take ´ existuje jen jedna verze de ´mona, u ktere ´ patˇriˇ cny ´ m parame-
Jestliz ˇe jsou sı´t’ove ´ sluz ˇby, ktere ´ na ´s ˇ syste ´m nabı´zı´, urˇeny pouze pro omezeny c ´ okruh uz ˇivatel˚ u, je z ˇa ´ doucı´ pˇr´ı stup k tˇ emto sluz ˇba ´ m omezit. Pro kontrolu a omezenı´ pˇr´ı stupu k sı´t’ovy ´ m sluz ˇba ´ m lze vyuz ˇ´t ı utilitu tcpd z balı´ˇ cku tcp wrappers. Ta funguje tak, z ˇe inetd spous ˇtı´ mı´sto serveru dane ´ sluz ˇby tcpd, ktery ´ nejprve dle konfigurace rozhodne, zda poz ˇadavek pˇrijmout a teprve potom v kladne ´m pˇr´padˇ ı e spustı´ vlastnı´ server dane ´ sluz ˇby. Pˇr´chozı ı ´ poz ˇadavky, vˇ cetnˇ e tˇ ech odmı´tnuty ´ch zapisuje do syste ´move ´ho logu. Tcpd tedy funguje jako „za ´ stupce de ´mon˚ u“. Pˇr´stup ı k jednotlivy ´ m sluz ˇba ´ m se ˇr´dı ı ´ konfiguraˇ cnı´mi soubory /etc/hosts.deny a /etc/hosts.allow. Syntaxe je jednoducha ´ , kaz ˇdy ´ ˇra ´ dek je ve tvaru:
daemon_list : client_list [: shell_command] „daemon list“ je seznam sluz ˇeb (viz /etc/services). Je take ´ moz ˇne ´ pouz ˇ´t ı „ALL“, coz ˇ znamena ´ „vs ˇechny sluz ˇby“, pˇr´padnˇ ı e konstrukci ALL EXCEPT „jme ´no sluz ˇby“, coz ˇ znamena ´ vs ˇechny sluz ˇby s vy ´jimkou te ´ uvedene ´. ˇi jejich IP adres. ˚ c „client list“ je seznam jmen poˇ c´taˇ ı cu Zde je moz ˇne ´ pouz ˇ´t ı klı´ˇ cove ´ slovo „ALL“, „LOCAL“ — odpovı´da ´ jake ´mukoliv jme ´nu poˇ c´taˇ ı ce, ktere ´ neobsahuje teˇ cku, „KNOWN“ — odpovı´da ´ jake ´mukoliv jme ´nu uz ˇivatele vlastnı´cı´ho pˇr´chozı ı ´ spojenı´ na vzda ´ lene ´m poˇ c´taˇ ı ci (viz protokol IDENT, RFC 1413), „UNKNOWN“ — odpovı´da ´ jake ´mukoliv pˇr´chozı ı ´mu spojenı´ pro ktere ´ nelze zı´skat informaci o vlastnı´kovi spojenı´ dle RFC 1413 (2). I zde m˚ uz ˇeme pouz ˇ´t ı klı´ˇove c ´ slovo „EXCEPT“ (pˇr´klad: ı za ´ pis .domena.cz EXCEPT badguy.domena.cz znamena ´ vs ˇechny stroje v dome ´nˇ e domena.cz s vy ´ jimkou poˇ c´taˇ ı ce „badguy“). Poloz ˇka „shell command“ je volitelna ´ a slouz ˇ´ı k vykona ´nı´ zadane ´ho pˇr´kazu ı v pˇr´kazove ı ´m interpretu. Pˇr´kazu ı lze ˇi IP adresu vzda pˇredat jako argumenty jme ´no c ´ lene ´ho poˇ c´ı taˇ ce, jme ´no uz ˇivatele vlastnı´cı´ho pˇr´chozı ı ´ spojenı´ na vzda ´lene ´m poˇ c´taˇ ı ci apod. Dejme tomu, z ˇe na ´s ˇ server ma ´ poskytovat v ra ´ mci dome ´ny „domena.cz“ sluz ˇby ftp a finger. Ostatnı´ sluz ˇby jsou dostupne ´ pouze loka ´ lnı´m uz ˇivatel˚ um serveru. Pak m˚ uz ˇe konfigurace vypadat takto:
3
Linuxove ´ noviny
ftp finger auth tftp
stream stream stream dgram
01-02/2001
tcp tcp tcp udp
nowait nowait nowait wait
ˇ. 2: Vy ´pis c
root root nobody.identd tftp
/usr/sbin/tcpd /usr/sbin/tcpd /usr/sbin/tcpd /usr/sbin/tcpd
/usr/sbin/in.ftpd -l -a /usr/sbin/in.fingerd /usr/sbin/in.identd -l -e -o /usr/sbin/in.tftpd /boot/diskless
/etc/inetd.conf — pro kontrolu pˇr´stupu ı pouz ˇ´va ı ´ me tcpd
Pˇr´klad ı souboru hosts.deny:
# standardnˇe zak´az´ano vˇsechno, pˇr´ıstup ke sluˇzb´am # mus´ıme explicitnˇe povolit v hosts.allow ALL:ALL
1 Tcp wrappers
ftp://ftp.porcupine.org/pub/security/index.html 2 RFC 1413
ftp://ftp.fi.muni.cz/pub/rfc/rfc1413.txt.gz 3 Xinetd
http://www.xinetd.org/
Pˇr´klad ı souboru hosts.access:
# lok´aln´ı uˇzivatel´e mohou pouˇz´ıvat vˇsechny sluˇzby ALL: LOCAL # IDENT pouze v r´amci dom´eny in.identd: .domena.cz # FINGER pouze v r´amci dom´eny in.fingerd: .domena.cz # FTP pouze v r´amci dom´eny, # vyˇzadujeme identifikaci # vzd´alen´eho uˇzivatele dle RFC 931 in.ftpd:
[email protected] # TFTP pouze pro bezdiskov´e stanice in.tftpd: 11.22.33.44, 11.22.33.55 Jes ˇtˇ e take ´ musı´me odpovı´dajı´cı´m zp˚ usobem upravit soubor inetd.conf tak, aby pro dane ´ sluz ˇby spous ˇtˇ el tcpd. Mı´sto cesty k serveru sluz ˇby tedy uvedeme cestu k tcpd, viz upravena ´ konfigurace z pˇredchozı´ho pˇr´kladu: ı soubor /etc/inetd.conf — pro kontrolu pˇr´stupu ı pouz ˇ´va ı ´ me tcpd. Pro kontrolu nastavenı´ pˇr´stupu ı ke sluz ˇba ´ m pˇres tcp wrappers slouz ˇ´ı utility tcpdcheck a tcpdmatch. Napˇr´klad ı chceme-li ovˇ eˇrit, zda z poˇ c´taˇ ı ce s IP adresou 11.22.33.44 je povolen pˇr´stup ı ke sluz ˇbˇ e tftp, kterou obsluhuje pˇres inetd spous ˇtˇ eny ´ de ´mon in.tftpd, pouz ˇijeme tcpdmatch:
$ tcpdmatch in.tftpd 11.22.33.44 client: address 11.22.33.44 server: process in.tftpd matched: /etc/hosts.allow line 12 access: granted
Programova ´ nı´ s tcp wrappers David Haring, 10. prosince 2000
ˇ uje sledovat a filtrovat pˇr´Balı´ˇ cek tcp wrappers(1) umoz ˇn ı chozı´ spojenı´ ˇrady bˇ ez ˇnˇ e pouz ˇ´vany ı ´ ch sı´t’ovy ´ ch sluz ˇeb. Kromˇ e utility tcpd, ktera ´ se pouz ˇ´va ı ´ pro kontrolu pˇr´stupu ı ke sluz ˇba ´ m ve spojenı´ s inetd obsahuje tcp wrappers i knihovnu s jednoduchy ´ m rozhranı´m, s jejı´z ˇ pomocı´ lze podporu tcp wrappers zabudovat i do jiny ´ch aplikacı´, ktere ´ nejsou spous ˇtˇ eny pˇres „super-server“ inetd. ˇi zamı´tajı´ pˇr´stup Tcp wrappers povolujı´ c ı ke sluz ˇba ´m na za ´ kladˇ e informace o jme ´nu a IP adrese vzda ´ lene ´ho syste ´mu, pˇr´padnˇ ı e i informace o vlastnı´kovi pˇr´chozı ı ´ho spojenı´ na vzda ´ lene ´m syste ´mu. Konfigurace je uloz ˇena v souborech /etc/hosts.allow a /etc/hosts.deny a je podrobnˇe ˇla popsa ´ na v c ´ nku o konfiguraci inetd a tcp wrappers; da ´ le ˇla se jı´ zde nebudeme zaby ´vat. Pˇredmˇ etem tohoto c ´ nku bude uka ´ zka pouz ˇitı´ knihovny libwrap, tedy zabudova ´ nı´ podpory tcp wrappers do „stand-alone“ sı´t’ovy ´ch aplikacı´. Pro potˇreby knihovny libwrap je informace o spojenı´ uloz ˇena ve struktuˇre request_info, kterou je potˇreba naplnit potˇrebny ´ mi u ´ daji. Na ´ slednˇ e aplikace zavola ´ nˇ ekterou z funkcı´ pro kontrolu pˇr´stupu. ı Ve struktuˇre request_info je zejme´na potˇreba naplnit na´sledujı´cı´ poloz ˇky: •
RQ_DAEMON:
jme ´no procesu (serveru), ktery ´ bˇ ez ˇ´ı na hostitelske ´m poˇ c´taˇ ı ci
RQ_CLIENT_NAME: jme´no klientske´ho poˇc´taˇ ı ce • RQ_CLIENT_ADDR: IP adresa klientske ´ho poˇ c´taˇ ı ce • RQ_SERVER_SIN: odkaz na strukturu sockaddr in, kte•
Alternativy inetd ˇ Casto pouz ˇ´vanou ı alternativou k inetd se v poslednı´ dobˇ e sta ´ va ´ xinetd (3), ktery ´ ma ´ proti inetd ˇradu vy ´ hod. Xinetd nabı´zı´ napˇr´klad ı leps ˇ´ı kontrolu pˇr´stupu ı k sluz ˇba ´ m (mimo ˇasojine ´ moz ˇnost omezenı´ pˇr´stupu ı ke sluz ˇba ´ m v urˇ city ´ ch c vy ´ ch intervalech), ochranu proti u ´ tok˚ um odepˇrenı´m sluz ˇeb (DoS), pˇresmˇ erova ´ nı´ sluz ˇeb a leps ˇ´ı logova ´ nı´. Shrnutı´, bezpeˇ cnost ˇ uje upravit pˇr´stup Inetd spolu s tcpd umoz ˇn ı k nˇ ektery ´m sluz ˇba ´ m poskytovany ´ ch syste ´mem. Protoz ˇe standardnı´ instalace distribucı´ vˇ ets ˇinou velmi benevolentnˇ e povolı´ pˇr´ı stup k ˇradˇ e sluz ˇeb, z nichz ˇ mnohe ´ zpravidla v˚ ubec nepotˇrebujeme, je na mı´stˇ e konfiguraci ihned po instalaci prohle ´dnout, nepotˇrebne ´ sluz ˇby vypnout a pˇr´stup ı k pouz ˇ´vaı ny ´m sluz ˇba ´ m omezit podle skuteˇ cny ´ch potˇreb.
4
ra ´ obsahuje pouz ˇitou sı´t’ovou adresu a port hostitelske ´ho poˇ c´taˇ ı ce (nutne ´ zadat pro automaticke ´ zjis ˇtˇ enı´ vlastnı´ka pˇr´chozı ı ´ho spojenı´ podle RFC 1413) •
RQ_CLIENT_SIN: odkaz na strukturu sockaddr in, ktera ´ obsahuje pouz ˇitou sı´t’ovou adresu a port klientske ´ho poˇ c´taˇ ı ce (nutne ´ zadat pro automaticke ´ zjis ˇtˇ enı´ vlastnı´ka pˇr´chozı ı ´ho spojenı´ podle RFC 1413)
Knihovna libwrap poskytuje s request info na ´ sledujı´cı´ funkce:
pro
manipulaci
request_init() pro inicializaci a naplnˇenı´ struktury request_info, se kterou pracuje hosts_access() • request_set() aktualizace obsahu jiz ˇ inicializovane ´ struktury request_info.
•
Pro povolenı´ pˇr´stupu ı ke sluz ˇbˇ e jsou k dispozici na ´ sledujı´cı´ dvˇ e funkce:
Linuxove ´ noviny
#include #include #include #include #include #include #include
01-02/2001
<stdio.h> <string.h> <sys/types.h> <sys/socket.h> <arpa/inet.h>
<syslog.h>
/* hlaviˇckov´y soubor tcp_wrappers */ #include /* ˇc´ıslo portu serveru */ #define PORT_NUM 5000 /* syslog facility */ #define LOG_FACILITY LOG_AUTHPRIV /* tyto promˇenn´e jsou vyˇzadov´any tcp_wrappers */ int allow_severity=4; int deny_severity=4; /* deskriptory socket˚u apod. */ int fd,fd2; struct sockaddr_in serv_addr, client_addr; int client_addr_len; struct hostent *client_info; /* request_info pro tcp_wrappers */ struct request_info request; char client_name[80]; /* do_exit() zap´ısˇe chybu do logu a ukonˇc´ı aplikaci */ void do_exit(char *s) { syslog(LOG_WARNING,"%s, exiting.",s); exit(1); } int main (int argc, char ** argv) { /* argv[0] m˚uˇze b´yt absolutn´ı cesta, potˇrebujeme jen jm´eno programu */ if (strrchr(argv[0],’/’)) argv[0] = strrchr(argv[0],’/’)+1; /* nastav´ıme zp˚usob logov´an´ı */ openlog(argv[0],LOG_PID,LOG_FACILITY); /* otev´ır´ame socket (TCP) */ if ((fd=socket(AF_INET,SOCK_STREAM,0))<0) do_exit("error in socket()"); /* nav´aˇzeme se na port */ bzero((char *)&serv_addr,sizeof(serv_addr)); serv_addr.sin_family=AF_INET; serv_addr.sin_port=htons(PORT_NUM); serv_addr.sin_addr.s_addr=htonl(INADDR_ANY); if (bind(fd,&serv_addr,sizeof(serv_addr))<0) do_exit("error in bind()"); if (listen(fd,5)<0) do_exit("error in listen()"); ˇ. 3: server.c: uka Vy ´ pis c ´ zka pouz ˇitı´ knihovny libwrap •
hosts_access() povolı´ nebo zamı´tne pˇr´stup ı na za ´kladˇ e informacı´ v request info, ktere ´ konfrontuje s kon-
figuracı´ v souborech hosts.allow a hosts.deny. Na ´ vratova ´ hodnota 0 znamena ´ zamı´tnutı´ pˇr´stupu. ı
5
Linuxove ´ noviny
01-02/2001
while(1) { client_addr_len=sizeof(client_addr); /* ˇcek´ame na spojen´ı klienta */ if ((fd2=accept(fd,&client_addr,&client_addr_len))<0) do_exit("error in accept()"); /* zjist´ıme a uloˇz´ıme jm´eno klientsk´eho poˇc´ıtaˇce */ if (client_info=gethostbyaddr((char *)&(client_addr.sin_addr),\ sizeof(client_addr.sin_addr),AF_INET)) snprintf(client_name, sizeof(client_name)-1,"%s",client_info->h_name); else client_name[0]=’\0’; /* napln´ıme request_info */ /* pokud zad´ame i RQ_SERVER_SIN a RQ_CLIENT_SIN, tcp_wrappers */ /* se pokus´ı identifikovat vlastn´ıka pˇr´ıchoz´ıho spojen´ı */ request_init(&request, RQ_DAEMON, argv[0],\ RQ_SERVER_SIN, &serv_addr, RQ_CLIENT_SIN, &client_addr,\ RQ_CLIENT_ADDR, inet_ntoa(client_addr.sin_addr),\ RQ_CLIENT_NAME, client_name, 0); /* ovˇerˇ´ıme, zda je pˇr´ıstup povolen */ if (!hosts_access(&request)) { /* spojen´ı zam´ıtnuto tcp_wrappers, zap´ıˇseme do logu */ /* jm´eno vlastn´ıka pˇr´ıchoz´ıho spojen´ı je dostupn´e pˇres eval_user() */ syslog(deny_severity, "rejected connection from %s (%s@%s)",\ inet_ntoa(client_addr.sin_addr),eval_user(&request),client_name); /* spojen´ı ukonˇc´ıme */ close(fd2); } else { /* spojen´ı povoleno tcp_wrappers, zap´ıˇseme do logu */ syslog(allow_severity, "accepted connection from %s (%s@%s)", inet_ntoa(client_addr.sin_addr),eval_user(&request),client_name); /* tady bychom zpracovali poˇzadavek klienta */ /* spojen´ı ukonˇc´ıme */ close(fd2); } } } /* pˇreklad: gcc server.c -lwrap -lnsl */ ˇ. 3: server.c: uka Vy ´pis c ´ zka pouz ˇitı´ knihovny libwrap (pokraˇ cova ´ nı´) Pˇred vola ´ nı´m hosts access() je tˇreba inicializovat strukturu request info. •
hosts_ctl() povolı´ nebo zamı´tne pˇr´stup ı k sluz ˇbˇ e na za ´ kladˇ e zadany ´ch parametr˚ u. Ve skuteˇ cnosti vola ´ request_init() a na ´ slednˇ e hosts_access(). Na rozdı´l od pˇr´me ı ´ho pouz ˇitı´ request_init() ˇ uje automatickou identia hosts_access() neumoz ˇn fikaci vlastnı´ka pˇr´chozı ı ´ho spojenı´ a je na na ´ s abychom tuto poloz ˇku doplnili — pokud ji nechceme pouz ˇ´t, ı doplnı´me STRING_UNKNOWN. Na ´ vratova ´ hodnota 0 znamena ´ zamı´tnutı´ pˇr´stupu. ı
Rozhranı´ knihovny libwrap je popsa ´ no v manua ´ love ´ stra ´ nce hosts_access(3), konfigurace pˇr´stupu ı k sluz ˇ-
6
ba ´ m tcp wrappers v hosts.access(5). Rovnˇ ez ˇ zdrojove ´ ko ´ dy tcp wrappers jsou velmi pˇrehledne ´ a komentovane ´. Uved’me pˇr´klad ı jednoduche ´ho iterativnı´ho serveru, komunikujı´cı´ho pˇres TCP. Pˇr´klad ı server.c: uka ´ zka pouz ˇitı´ knihovny libwrap uva ´ dı´ pouz ˇitı´ hosts_access() s vyuz ˇitı´m automaticke ´ identifikace vlastnı´ka pˇr´chozı ı ´ho spojenı´ knihovnou libwrap.
Shrnutı´ S pomocı´ tcp wrappers m˚ uz ˇeme jednoduchy ´m zp˚ usobem kontrolovat a omezit pˇr´stup ı k sı´t’ovy ´ m sluz ˇba ´ m. Tento zp˚ usob je bˇ ez ˇnˇ e pouz ˇ´va ı ´ n nejen v souvislosti se sluz ˇbami
Linuxove ´ noviny
r 13 16 18 20 65
procs b w 0 0 0 0 0 0 0 0 0 0
swpd 0 0 0 0 0
01-02/2001
free 6500 6496 6512 6580 6888
buff 541636 541636 541636 541636 541636
memory swap cache si so 143576 0 0 143576 0 0 143576 0 0 143576 0 0 142732 0 0
bi 3 0 1 0 0
io bo 5 0 560 0 10
system in cs 1 4 1856 24114 1778 21169 1565 21616 1722 23836
us 0 12 9 11 10
sy 6 31 32 37 45
cpu id 3 57 60 52 46
ˇ. 4: vy Vy ´ pis c ´stup pˇr´kazu ı vmstat -n 1 5 spous ˇtˇ eny ´mi pˇres inetd, ale je vyuz ˇ´va ı ´ n i v ˇradˇ e jiny ´ ch sı´ˇi portmap (NFS apod.). t’ovy ´ch sluz ˇeb jako je napˇr. ssh c ˇ uje jednoduchy Knihovna libwrap umoz ˇn ´ m zp˚ usobem tuto funkˇ cnost zaˇ clenit do libovolny ´ ch sı´t’ovy ´ ch aplikacı´. 1 Tcp wrappers
ftp://ftp.porcupine.org/pub/security/index.html
• free: volna ´ pamˇ et’ • buff: volna ´ pamˇ et’ vyuz ˇita ´ jako vyrovna ´ vacı´ „buffer“ pro za ´ pisy na disk. V pˇr´padˇ ı e potˇreby je uvolnˇ ena. • cache: volna ´ pamˇ et’ vyuz ˇita ´ jako vyrovna ´ vacı´ „cache“ ˇtenı´ (read(), mmap() atd.). V pˇr´padˇ pro c ı e potˇreby je uvolnˇ ena. swap: • si: objem pamˇ eti naˇ ctene ´ z odkla ´ dacı´ho prostoru v kB/s (swapu)
Monitorova ´ nı´ za ´ tˇ ez ˇe David H¨ aring, 25. prosince 2000
Asi bychom si sotva doka ´ zali pˇredstavit provozova ´ nı´ jake ´hokoliv serveru bez pom˚ ucek pro sledova ´ nı´ zdravı´ a za ´ tˇ ez ˇe syste ´mu. Sledova ´ nı´ vytı´z ˇenı´ procesoru, sı´t’ovy ´ ch rozhranı´ nebo diskovy ´ch subsyste ´m˚ u, hleda ´ nı´ „u ´ zke ´ho hrdla“ a ladˇ eˇi software syste nı´ konfigurace hardware c ´mu pomocı´ k tomu urˇ ceny ´ch na ´ stroj˚ u patˇr´ı k bˇ ez ˇne ´ praxi syste ´movy ´ch adˇla ministra ´ tor˚ u. V tomto c ´ nku se podı´va ´ me na nˇ ekolik bˇ ez ˇny ´ch utilit slouz ˇ´cı ı ´ch k „online“ i „offline“ monitorova ´ nı´ stavu syste ´mu a to zejme ´na na utilitu vmstat, ktera ´ je souˇ ca ´ stı´ balı´ˇ cku procps a da ´ le sar a iostat, ktere ´ jsou souˇ ca ´ stı´ balı´ˇ cku sysstat. Interaktivnı´ na ´ stroje pro sledova ´ nı´ za ´ tˇ ez ˇe jako top, gtop, kim, xosview a dals ˇ´ı nejsou pˇredmˇ etem tohoto ˇla c ´ nku. Vmstat Vmstat periodicky vypisuje informace o poˇ ctu bˇ ez ˇ´cı ı ´ch ˇi zablokovany c ´ ch proces˚ u, stavu pamˇ eti, stra ´ nkova ´ nı´, I/O operacı´ch blokovy ´ ch zaˇr´zenı ı ´, poˇ ctu pˇrerus ˇenı´, poˇ ctu pˇrepnutı´ kontextu a vytı´z ˇenı´ procesoru. Je souˇ ca ´ stı´ balı´ˇ cku ˇte informace z pˇr´slus procps. Vmstat c ı ˇny ´ ch soubor˚ u v /proc a pro jeho spus ˇtˇ enı´ nepotˇrebujeme z ˇa ´ dna ´ privilegia. M˚ uz ˇeme zadat 2 parametry, a to prodlevu mezi jednotlivy ´ mi vy ´pisy a poˇ cet vy ´pis˚ u. Jako pˇr´klad ı uved’me vy ´stup pˇr´kazu ı vmstat -n 1 5. Prvnı´ ˇra ´ dek vy ´ pisu uva ´ dı´ pr˚ umˇ erne ´ hodnoty sledovany ´ ch parametr˚ u od restartu syste ´mu (s vy ´jimkou statistiky proces˚ u a pamˇ eti, ta je vz ˇdy aktua ´ lnı´). Co znamenajı´ jednotlive ´ poloz ˇky?
• so: objem pamˇ eti odloz ˇene ´ v kB/s (odswapovane ´) na disk. io: • bi: poˇ cet blok˚ u naˇ cteny ´ ch z disk˚ u (blokovy ´ ch zaˇr´zenı ı ´) • bo: poˇ cet blok˚ u zapsany ´ ch na disky (blokova ´ zaˇr´zenı ı ´) system: ˇa • in: poˇ cet pˇrerus ˇenı´ za sekundu. Z ´ dostı´ o pˇrerus ˇenı´ da ´vajı´ perifernı´ zaˇr´zenı ı ´ najevo, z ˇe dos ˇlo k uda ´ losti, kterou je tˇreba os ˇetˇrit – napˇr. signalizujı´ dokonˇ cenı´ I/O operace apod. Pokud ja ´ dro obdrz ˇ´ı z ˇa ´ dost o pˇrerus ˇenı´, pˇrerus ˇ´ı vykona ´ va ´ nı´ procesu, uloz ˇ´ı jeho stav, os ˇetˇr´ı pˇrerus ˇenı´, obnovı´ stav procesu a pokraˇ cuje v jeho vykona ´ va ´ nı´. V unixovy ´ ch syste ´mech jsou tedy pˇrerus ˇenı´ obsluhova ´na v kontextu pra ´ vˇ e bˇ ez ˇ´cı ı ´ho procesu. • cs: poˇ cet pˇrepnutı´ kontextu za sekundu. Pˇrepnutı´m kontextu se rozumı´ pˇrerus ˇenı´ vykona ´ va ´ nı´ jednoho procesu, uloz ˇenı´ stavu procesu a pokraˇ cova ´ nı´ ve vykona ´va ´ nı´ jine ´ho procesu. cpu: ˇas procesoru (v %) stra • us: c ´ veny ´ v rez ˇimu uz ˇivatele ˇas procesoru (v %) stra • sy: c ´ veny ´ v rez ˇimu ja ´ dra. V unixovy ´ch syste ´mech mohou procesy bˇ ez ˇet ve dvou rez ˇimech: v rez ˇimu ja ´ dra a v rez ˇimu uz ˇivatele. Proces bˇ ez ˇ´cı ı ´ v uz ˇivatelske ´m rez ˇimu ma ´ pˇr´stup ı pouze ke svy ´ m dat˚ um zatı´mco proces v rez ˇimu ja ´ dra ma ´ pˇr´stup ı i k datovy ´ m struktura ´ m ja ´ dra. Proces vstupuje do rez ˇimu ja ´ dra napˇr. v pˇr´padˇ ı e, kdy vykona ´ va ´ vola ´ nı´ ja ´ dra. ˇas procesoru • id: nevyuz ˇity ´c
procs: • r: poˇ cet proces˚ u pˇripraveny ´ch k bˇ ehu (ve vy ´ pisu utility ”top” odpovı´da ´ stavu R) • b: poˇ cet zablokovany ´ch proces˚ u (ve vy ´pisu utility top stav D) • w: poˇ cet proces˚ u pˇripraveny ´ch k bˇ ehu ale odloz ˇeny ´ch (odswapovany ´ch) memory: • swpd: vyuz ˇity ´ odkla ´ dacı´ prostor (swap)
Sar Utilitu sar (z angl. „System Activity Reporter“ nalezneme v te ´mˇ eˇr kaz ˇde ´m UN*Xu a stejnˇ e tak existuje i jejı´ linuxova ´ varianta — je obsaz ˇena v balı´ˇ cku sysstat (1). Sar sbı´ra ´ mimo jine ´ data o vytı´z ˇenı´ procesor˚ u, I/O operacı´ch, stra ´ nkova ´ nı´, zpracova ´ nı´ pˇrerus ˇenı´, vytı´z ˇenı´ sı´t’ovy ´ ch rozhranı´, obsazenı´ pamˇ eti, swapu, pˇrepnutı´ kontextu, poˇtu novˇ c e vytva ´ˇreny ´ ch proces˚ u. Balı´ˇ cek sysstat obsahuje utility sar, sadc a skripty sa1, sa2.
7
Linuxove ´ noviny
01-02/2001
Linux 2.2.18-RAID (server.domena.cz) 16:34:57 16:35:02 16:35:07 16:35:12 16:35:17 16:35:22 Average:
CPU all all all all all all
%user 9.30 9.20 9.50 8.70 8.40 9.02
01/09/01
%nice 35.10 36.60 37.40 37.80 38.80 37.14
%system 30.60 29.70 28.30 27.40 25.50 28.30
%idle 25.00 24.50 24.80 26.10 27.30 25.54
ˇ. 5: pˇr´klad Vy ´pis c ı vy ´ stupu pˇr´kazu ı sar 5 5
Linux 2.2.18 (server.domena.cz)
01/09/01
avg-cpu: %user %nice %sys 11.01 1.04 11.04 Disks: tps Blk_read/s hdisk0 4.16 2.11 hdisk1 6.02 0.07 hdisk2 0.00 0.00 hdisk3 0.00 0.00
%idle 12.91 Blk_wrtn/s 6.00 11.12 0.00 0.00
Blk_read 5164034 1869432 0 0
Blk_wrtn 12632280 23470406 0 0
avg-cpu: %user %nice %sys 16.50 0.00 47.85 Disks: tps Blk_read/s hdisk0 3.10 0.00 hdisk1 6.60 0.00 hdisk2 0.00 0.00 hdisk3 0.00 0.00
%idle 35.65 Blk_wrtn/s 6.20 13.20 0.00 0.00
Blk_read 0 0 0 0
Blk_wrtn 124 264 0 0
ˇ. 6: pˇr´klad Vy ´ pis c ı vy ´ stupu pˇr´kazu ı iostat 5 2
sar — „sa reporter“ vypisuje hodnoty zvoleny´ch parametr˚ u syste ´mu ve zvolene ´m intervalu a je urˇ cen pro pˇr´me ı ´ pouz ˇitı´ z pˇr´kazove ı ´ ˇra ´ dky. Utilita sadc — „sa data collector“ sbı´ra ´u ´ daje o syste ´mu a tato zapisuje do urˇ cene ´ho souboru (v bina ´ rnı´m forma ´ tu). Sadc nenı´ urˇ cen pro pˇr´me ı ´ pouz ˇitı´, bud’ je spous ˇtˇ en dle potˇreby utilitou sar anebo m˚ uz ˇe by ´ t spous ˇtˇ en v ra ´ mci pravidelnˇ e spous ˇtˇ eny ´ch skript˚ u (napˇr. pomocı´ cronu), pokud chceme offline monitorovat stav syste ´mu. Skript pˇr´kazove ı ´ho interpretu sa1 ukla ´ da ´ dennı´ syste ´move ´ statistiky v bina ´ rnı´m forma ´ tu do souboru s na ´zvem /var/log/sadd, kde se ˇretˇ ezec „dd“ nahradı´ dnem v mˇ esı´ci. Pro prohlı´z ˇenı´ statistik pak pouz ˇijeme utilitu sar. Skript vola ´ sadc. Skript sa2 je urˇ ceny ´ pro zpracova ´ nı´ dennı´ch statistik a jejich uloz ˇenı´ v textove ´ podobˇ e do souboru /var/log/sardd. Skript vola´ sar. Podobnˇ e jako vmstat, sar akceptuje jako parametr prodlevu mezi jednotlivy ´ mi mˇ eˇrenı´mi/vy ´ pisy statistik a poˇet mˇ ˚ , ktery c eˇrenı´/vy ´pis˚ u. Sar nabı´zı´ ˇradu pˇrepı´naˇ cu ´ mi vybı´ra ´ me mezi jednotlivy ´mi typy statistik, standardnˇ e vypisuje vytı´z ˇenı´ procesor˚ u. Nebudeme zde popisovat funkce ˚ , protoz jednotlivy ´ch pˇrepı´naˇ cu ˇe jich je hodnˇ e a pouze odka ´z ˇeme na manua ´ lovou stra ´ nku. Na ´ sledujı´cı´ (pˇr´klad ı vy ´stupu pˇr´kazu ı sar 5 5) vypı´s ˇe za ´ tˇ ez ˇ procesor˚ u pˇ etkra ´ t v intervalu 5 sekund. Poslednı´ ˇra ´ dek vz ˇdy uva ´ dı´ pr˚ umˇ erne ´ hodnoty statistik. Pokud chceme nepˇretrz ˇitˇ e monitorovat stav syste ´mu, staˇ c´ı pomocı´ cronu pravidelnˇ e spous ˇtˇ et skripty sa1 a sa2, ktere ´ m˚ uz ˇeme podle potˇreby upravit. Na ´ sledujı´cı´ pˇr´klad ı zajistı´ monitorova ´ nı´ syste ´mu v intervalu 10 minut (skript sa1). Statistiky budou v 1 hod. na´sledujı´cı´ho dne zpracova´ny a uloz ˇeny v textove ´ podobˇ e v souboru /var/log/sadd 8
(za dd dosad’me den v mˇ esı´ci). Souˇ casnˇ e budou smaza ´ ny statistiky stars ˇ´ı 7 dn˚ u (skript sa2).
Nastaven´ı crontab: 0 * * * * /usr/lib/sa/sa1 600 6 & 0 1 * * * /usr/lib/sa/sa2 -A & Ve skriptu sa2 pouze zamˇ enı´me ˇra ´ dek
DATE=‘date +%d‘" za ˇra ´ dek
DATE=‘date -d yesterday +%d‘}
Iostat Iostat je utilitou urˇ cenou pro sledova ´ nı´ aktivity I/O zaˇr´zeı nı´. V souˇ casny ´ ch ja ´ drech ˇrady 2.2 je moz ˇne ´ sledovat pouze 4 disky a nejsou k dispozici u ´ daje o termina ´ lovy ´ ch zaˇr´zenı ı ´ch. Pokud poz ˇadujeme statistiky v Kb/s, je zapotˇrebı´ uplatnit patch ja ´ dra ((2) — jinak jsou k dispozici pouze ˇteny ve formˇ ec ´ ch / zapisovany ´ch blok˚ u za sekundu tak, jak to ukazuje pˇr´klad ı vy ´ stupu pˇr´kazu ı iostat 5 2. Pozna ´ mka k instalaci: Pro ja ´ dra 2.4.x existuje verze sysstatu 3.3 – vy ´vojova ´ , pro ja ´ dra 2.2.xx je urˇ cena stabilnı´ verze 3.2.4. Pokud pouz ˇ´va ı ´ te ja ´ dra s podporou vı´ce procesor˚ u (SMP), je tˇreba bud’ pouz ˇ´t ı ja ´ dro 2.2.16 a vys ˇs ˇ´ı anebo pˇri kompilaci balı´ˇ cku sysstat zvolit opravu chyby v ovladaˇi se c ´riovy ´ ch linek, jinak m˚ uz ˇe sadc vyvolat chybu kernelu ˇtenı´ souboru /proc/tty/driver/serial. pˇri c
Linuxove ´ noviny
01-02/2001
#!/bin/bash # pouˇzit´ı: gvmstat.sh [prodleva] [poˇcet mˇeˇren´ı] # zaznamen´ame statistiky pomoc´ı vmstat(1) DELAY=${1:-5};NUM_RECORDS=${2:-50}; vmstat -n $DELAY $[$NUM_RECORDS+1] | sed -e 1,3d -e ’s/^ //’ -e ’s/ \+/ /g’ \ > /tmp/vmstatlog.$$ # zjist´ıme rozsahy graf˚u MAX_CS=$(cut -f 13 -d ’ ’ < /tmp/vmstatlog.$$ | sort -n -r | head -n 1); MIN_CS=$(cut -f 13 -d ’ ’ < /tmp/vmstatlog.$$ | sort -n | head -n 1); MAX_IO_IN=$(cut -f 11 -d ’ ’ < /tmp/vmstatlog.$$ | sort -n -r | head -n 1); MIN_IO_IN=$(cut -f 11 -d ’ ’ < /tmp/vmstatlog.$$ | sort -n | head -n 1); MAX_IO_OUT=$(cut -f 12 -d ’ ’ < /tmp/vmstatlog.$$ | sort -n -r | head -n 1); MIN_IO_OUT=$(cut -f 12 -d ’ ’ < /tmp/vmstatlog.$$ | sort -n | head -n 1); MAX_IO=$[$MAX_IO_IN+$MAX_IO_OUT];MIN_IO=$[$MIN_IO_IN+$MIN_IO_OUT]; # skript pro gnuplot cat <<EOF | gnuplot # nejprve obecn´e nastœaven´ı set terminal gif size 640,480 set output "/tmp/vmstatlog.$$.gif" set size 1,1 set origin 0,0 set multiplot set grid set xrange [0:$NUM_RECORDS] set nokey
# # # # # # # #
nastav´ıme v´ystup do GIFu, rozmˇery kam uloˇzit v´ysledn´y GIF nastav´ıme kreslic´ı plochu nastav´ıme lev´y doln´ı roh plochy v´ıce graf˚u v jednom obr´azku zobrazit mˇr´ıˇzku nastaven´ı rozsahu osy x vypneme legendu
# 1. graf - vyt´ıˇzen´ı procesoru (souˇcet sloupc˚u 14 a 15 v´ypisu vmstat) set size 1,0.25 # nastaven´ı rozmˇer˚u grafu set origin 0,0 set yrange [0:100] # rozsah osy y set label "CPU load [%]" at screen 0.5,0.2 center # popis grafu plot "/tmp/vmstatlog.$$" using (\$14+\$15) with lines # vykreslen´ı # 2. graf - bˇeˇz´ıc´ı procesy (sloupec 1 v´ypisu vmstat) set size 1,0.25 set origin 0,0.25 set autoscale y set label "Runnable processes" at screen 0.5,0.45 center plot "/tmp/vmstatlog.$$" using 1 with lines # 3. graf - pˇrepnut´ı kontextu (sloupec 13 v´ypisu vmstat) ycs=($MAX_CS-$MIN_CS)/5 set size 1,0.25 set origin 0,0.5 set autoscale y set ytics ycs set label 1 "Context switches [cws/s]" at screen 0.5,0.7 center set nokey plot "/tmp/vmstatlog.$$" using 13 with lines # 4. graf - i/o statistiky (souˇcet sloupc˚u 11 a 12 v´ypisu vmstat) ycs=($MAX_IO-$MIN_IO)/5 set size 1,0.25 set origin 0,0.75 set autoscale y set ytics ycs set label "I/O activity [block/s]" at screen 0.5,0.95 center plot "/tmp/vmstatlog.$$" using (\$11+\$12) with lines EOF # prohl´ednut´ı obr´azku pomoc´ı xv xv /tmp/vmstatlog.$$.gif ˇ. 7: uka Vy ´ pis c ´ zka skriptu pro zobrazenı´ aktivity syste ´mu pomocı´ vmstat
9
Linuxove ´ noviny
01-02/2001
#! /bin/bash # uk´azka skriptu pro zobrazen´ı aktivity syst´emu pomoc´ı sar # # pouˇzit´ı: gsar.sh [prodleva] [poˇcet mˇeˇren´ı] # zaznamen´ame statistiky pomoc´ı sar(1) DELAY=${1:-1};NUM_RECORDS=${2:-5}; sar -o /tmp/sarlog$$ $DELAY $[$NUM_RECORDS] sar -f /tmp/sarlog$$ | sed -e 1,3d -e ’$d’ -e d }’ > /tmp/sarlog$$.cpu sar -w -f /tmp/sarlog$$ | sed -e 1,3d -e ’$d’ d }’ > /tmp/sarlog$$.csw sar -r -f /tmp/sarlog$$ | sed -e 1,3d -e ’$d’ d }’ > /tmp/sarlog$$.mem sar -b -f /tmp/sarlog$$ | sed -e 1,3d -e ’$d’ d }’ > /tmp/sarlog$$.io
’s/ \+/ /g’ -e ’/^$/{N -e ’s/ \+/ /g’ -e ’/^$/{N -e ’s/ \+/ /g’ -e ’/^$/{N -e ’s/ \+/ /g’ -e ’/^$/{N
# zjist´ıme rozsahy graf˚u MAX_CS=$(cut -f 2 -d ’ ’ < /tmp/sarlog$$.csw | sort -n -r | head -n 1); MAX_IO_IN=$(cut -f 5 -d ’ ’ < /tmp/sarlog$$.io | sort -n -r | head -n 1); MAX_IO_OUT=$(cut -f 6 -d ’ ’ < /tmp/sarlog$$.io | sort -n -r | head -n 1); MAX_IO=‘echo "$MAX_IO_IN+$MAX_IO_OUT" | bc‘; MEM_TOTAL=‘grep MemTotal /proc/meminfo | sed ’s/[a-zA-Z: ]//g’‘; START_TIME=$(head -n 1 /tmp/sarlog$$.csw | cut -f 1 -d ’ ’); STOP_TIME=$(tail -n 1 /tmp/sarlog$$.csw | cut -f 1 -d ’ ’) # skript pro gnuplot cat <<EOF | gnuplot # nejprve obecn´e nastaven´ı set terminal gif size 640,480; set output "/tmp/sarlog$$.gif" set size 1,1; set origin 0,0; set multiplot set grid set xrange [0:$NUM_RECORDS] set nokey # 1. graf - vyt´ıˇzen´ı procesoru set size 1,0.25; set origin 0,0 set yrange [0:100] set xdata time; set timefmt "%H:%M:%S" set xrange ["$START_TIME":"$STOP_TIME"] set format x "%H:%M:%S" set label "CPU activity [%]" at screen 0.5,0.2 center plot "/tmp/sarlog$$.cpu" using 1:(\$3+\$4+\$5) with lines # 2. graf - pamˇet’ (pouˇzit´a celkem - (cache+ buffer)) set size 1,0.25; set origin 0,0.25 set yrange [0:$MEM_TOTAL]; set ytics 0,$MEM_TOTAL/5,$MEM_TOTAL set xdata time; set timefmt "%H:%M:%S" set xrange ["$START_TIME":"$STOP_TIME"] set format x "%H:%M:%S" set label "Used memory [kb]" at screen 0.5,0.45 center plot "/tmp/sarlog$$.mem" using 1:(\$3-(\$6+\$7)) with lines ˇ. 8: uka Vy ´ pis c ´ zka skriptu pro zobrazenı´ aktivity syste ´mu pomocı´ sar
10
Linuxove ´ noviny
01-02/2001
# 3. graf - pˇrepnut´ı kontextu set size 1,0.25; set origin 0,0.5 set autoscale ymax; set ytics $MAX_CS/5 set xdata time; set timefmt "%H:%M:%S" set xrange ["$START_TIME":"$STOP_TIME"] set format x "%H:%M:%S" set label 1 "Context switches [csw/s]" at screen 0.5,0.7 center plot "/tmp/sarlog$$.csw" using 1:2 with lines # 4. graf - i/o statistiky set size 1,0.25; set origin 0,0.75 set autoscale ymax; set ytics $MAX_IO/5 set xdata time; set timefmt "%H:%M:%S" set xrange ["$START_TIME":"$STOP_TIME"] set format x "%H:%M:%S" set label "I/O activity [blocks/s]" at screen 0.5,0.95 center plot "/tmp/sarlog$$.io" using 1:(\$5+\$6) with lines EOF # display using xv xv /tmp/sarlog$$.gif ˇ. 8: uka Vy ´pis c ´ zka skriptu pro zobrazenı´ aktivity syste ´mu pomocı´ sar (pokraˇ cova ´ nı´) pomocı´ gnuplotu za ´ tˇ ez ˇ syste ´mu vykreslı´ a vy ´sledny ´ obra ´ zek uloz ˇ´ı ve forma ´ tu gif. Graficke ´ vy ´ stupy skriptu gvmstat.sh a gsar.sh ukazujı´ pˇriloz ˇene ´ obra ´ zky.
graf. vy ´stup skriptu gvmstat.sh
Graficke ´ zna ´ zornˇ enı´ Ted’ uz ˇ vı´me, jak aktivitu syste ´mu zaznamenat, zby ´ va ´ tedy statistiky prezentovat nˇ ejaky ´m pˇrehledny ´ m graficky ´m ˇ ujı´ data ofzp˚ usobem. Existuje ˇrada na ´ stroj˚ u, ktere ´ umoz ˇn fline graficky zpracovat, m˚ uz ˇeme pouz ˇ´t ı napˇr´klad ı balı´ˇ cek Gnuplot(3), ktery ´ je bˇ ez ˇnou souˇ ca ´ stı´ distribucı´. ˇ uje tvorbu bˇ Gnuplot je na ´ stroj, ktery ´ umoz ˇn ez ˇny ´ ch typ˚ u graf˚ u a podporuje vy ´ stup do ˇrady graficky ´ch forma ´ t˚ u. Je ovla ´ dany ´ z pˇr´kazove ı ´ ˇra ´ dky a lze jej vyuz ˇ´t ı pro „offline“ zpracova ´ nı´ dat. Pouz ˇ´va ı ´ nı´ gnuplotu vs ˇak nenı´ pˇredmˇ etem ˇla tohoto c ´ nku, zde pouze pro inspiraci uvedeme dva pˇr´klaı dy skript˚ u, ktere ´ pomocı´ utilit vmstat (skript gvmstat.sh — uka ´ zka skriptu pro zobrazenı´ aktivity syste ´mu pomocı´ vmstat ) a sar (skript gsar.sh — uka ´ zka skriptu pro zobrazenı´ aktivity syste ´mu pomocı´ sar) zaznamenajı´ za ´ tˇ ez ˇ syste ´mu,
graf. vy ´stup skriptu gsar.sh
1 Sysstat
http://perso.wanadoo.fr/sebastien.godard/ 2 iopatch
http://perso.wanadoo.fr/sebastien.godard/iopatch-2.2.16-v4.tar.gz) 3 Gnuplot
http://www.gnuplot.org
11
Linuxove ´ noviny
01-02/2001
Zasma ´ li jsme se!
A jeden kra ´ tky ´ recept na zbohatnutı´: David H¨ aring
Na za ´ vˇ er pro Va ´ s ma ´ me opˇ et nˇ ekolik vtı´pk˚ u a postˇreh˚ u pro zasma ´ nı´. Tentokra ´ t mezi nimi nechybı´ ani tip pro Vas ˇi knihovniˇ cku. ˇ ujı´ kloNˇ ektere ´ operaˇ cnı´ syste ´my jiz ˇ od nepamˇ eti umoz ˇn novat hardware za bˇ ehu a tak uz ˇivatel˚ um pˇrina ´s ˇejı´ obrovske ´ finanˇ cnı´ u ´ spory. Bohuz ˇel ne vz ˇdy se to zcela povede, napˇr´klad ı v exploreru na obra ´ zku pˇribyly dva nove ´ disky — bohuz ˇel jsou te ´hoz ˇ jme ´na a nelze na nˇ e zapisovat :-)
Tak tato kniha od nakladelstvı´ O’Really by Va ´ m rozhodnˇ e v knihovniˇ cce chybˇ et nemˇ ela . . .
Vı´te proˇ c je Bill tak bohaty ´? Protoz ˇe za chyby se platı´. I takhle m˚ uz ˇe vypadat administrace syste ´mu:
[laureck@chronos mpgcut]$ ./mpgcut\ test.mpg -n 3 segmentation fault [laureck@chronos mpgcut]$ shit! shit!: command not found [laureck@chronos mpgcut]$ you talkin to me? you: not found [laureck@chronos mpgcut]$ REVENGE! REVENGE: command not found [laureck@chronos mpgcut]$ su Password: [root@chronos mpgcut]# last chance son... behave wtmp begins Fri Dec 1 09:56:25 2000 [root@chronos mpgcut]# rm -rf / (no dir) system halted. Rozhodnˇ e nenı´ pravdou, z ˇe by Windows nerozlis ˇovaly skupiny uz ˇivatel˚ u - jenom ta mˇ eˇr´tka ı jsou trochu jina ´ ...
Windows dbajı´, aby Va ´s ˇ harware byl „up to date“:
12
Linuxove ´ noviny
01-02/2001
Nudı´te se? Novy ´ Random Error (tm) engine Va ´ s probudı´:
Proble ´my s detekcı´ kla ´ vesnice? MS Wizard va ´ m poradı´.
Ma ´ te proble ´my s tiskem? Printer Wizard je definitivnˇ e vyˇres ˇ´. ı
Nˇ ektery ´m pˇr´kaz˚ ı um prostˇ e operaˇ cnı´ syste ´my rozumˇ et nechtˇ ejı´:
Je po va ´ nocı´ch, vs ˇichni jsme pˇribrali a i poˇ c´taˇ ı ce musejı´ hubnout . . .
Windows Va ´ s chranı´ pˇred pˇredpracovanostı´. De ´le nez ˇ deset hodin v kuse byste u poˇ c´taˇ ı ce rozhodnˇ e sedˇ et nemˇ eli — a jestli to tak dˇ ela ´ te, dobˇre Va ´ m tak:
13
Linuxove ´ noviny
Linuxove ´ noviny a jejich s ˇ´ıˇrenı´ ˇ Linuxove ´ noviny vyda ´ va ´ Ceske ´ sdruz ˇenı´ uz ˇivatel˚ u operaˇ cnı´ho syste ´mu Linux (1) pro sve ´ pˇr´znivce ı a sympatizanty. Vlastnı´kem autorsky ´ch pra ´ v k tomuto textu jako celku je Pavel Janı´k ml. ([email protected]). Autorska ´ pra ´ va k jednotlivy ´m ˇla c ´ nk˚ um z˚ usta ´ vajı´ jejich autor˚ um. Tento text m˚ uz ˇe by ´t s ˇ´ˇ ıren a tis ˇtˇ en bez omezenı´. Pokud ˇa ˇla pouz ˇijete c ´ st nˇ ektere ´ho c ´ nku zde uveˇrejnˇ ene ´ho v jiny ´ch ˇ´slo, ˇla dı´lech, musı´te uve ´st jme ´no autora a c ı ve ktere ´m byl c ´ nek uveˇrejnˇ en. Linuxove ´ noviny jsou otevˇreny kaz ˇde ´mu, kdo by chtˇ el naˇtena ˚ m sdˇ s ˇim c ´ˇru elit nˇ eco zajı´mave ´ho. Pˇr´spˇ ı evky (ve forma ´ˇiste tu c ´ho textu v ko ´ dova ´ nı´ ISO 8859-2) posı´lejte na adresu (2). Autor nema ´ na ´ rok na finanˇ cnı´ odmˇ enu a souhlası´ s podmı´nkami uvedeny ´ mi v tomto odstavci. Vydavatele ´ si vyhrazujı´ ˇi nikoli. pra ´ vo rozhodnout, zda Va ´s ˇ pˇr´spˇ ı evek uveˇrejnı´, c Registrovane ´ zna ´ mky pouz ˇite ´ v tomto textu jsou majetkem jejich vlastnı´k˚ u. Chtˇ el bych podˇ ekovat spoleˇ cnosti SuSE CR, s.r.o (3), z ˇe ˇ uje i nada na ´ m umoz ˇn ´ le pracovat na Linuxovy ´ ch novina ´ ch. Linuxove ´ noviny jsou k dispozici take ´ ve forma ´ tu HTML na adrese (4). ˇ 1 Ceske ´ sdruz ˇenı´ uz ˇivatel˚ u operaˇ cnı´ho syste ´mu Linux
http://www.linux.cz/czlug 2 Adresa redakce
mailto:[email protected] 3 SuSE CR, s.r.o.
http://www.suse.cz/ 4 Linuxove´ noviny ve forma ´ tu HTML
http://www.linux.cz/noviny
ˇe S ´fredaktor: Pavel Janı´k ml.
mailto:[email protected] za ´ stupce s ˇe ´fredaktora: David Ha ¨ ring
mailto:[email protected] sazba: Ondˇrej Koala Va ´ cha
mailto:[email protected] jazykove ´ korekce: Bohumil Chalupa
mailto:[email protected] pˇreklady: Hanus ˇ Adler
mailto:[email protected] pˇrevod do HTML: Pavel Juran
mailto:[email protected]
14
01-02/2001