Príručka systémového administrátora, 1.9.4

1. Sieťové služby

Posledná zmena: 28/1/2006

1.1 Čo to je?

Ak si necháte vypísat procesy (proces je každý spustený program), ktoré bežia na vašom serveri (napríklad príkazom: ps auxww), uvidíte, že ich je pomerne dosť a že ich pomerne dosť beží s právami používateľa "root". Väčšina procesov zabezpečujú po celý čas prevádzku všetkých sieťových služieb, ktoré poskytuje váš server.

Sieťové služby su napríklad: DNS (name server), WWW, doručovanie pošty a prístup k nej, ftp, a nemožno zabudnúť na superserver - inetd (xinetd), ktorý zabezpečuje prevádzku iných služieb podľa potreby a konfigurácie.

1.2 Kedy sa spúšťajú sieťové služby

Sieťové služby sa väčšinou spúšťajú pri štarte servera, aby ste sa napríklad bezprostredne po nabootovaní mohli prihlásiť na server pomocou telnetu alebo ssh. Všetko je to aj kvôli ľudskej pohodlnosti, aby sieťové služby nemusel správca spúšťať ručne, čo by bolo veľmi nepríjemne. Obslužné programy sieťových služieb sú (vo svojej podstate) zvyknuté bežať non-stop a preto sa nazývajú aj "démonmi" (daemons), pretože sú (vo svojej podstate) nesmrteľne. Mnohé démony používajú preto aj meno programu, ktoré končí písmenom "d", napríklad "telnetd - telnet démon", "sshd - ssh démon".

1.2.1 Démon má dobré uši

Typickou vlastnosťou obslužného démona sieťovej služby je zavesiť sa na nejaký známy port, na ktorom "počúva", t.j. čaká na prichádzajúce požiadavky. V prípade, že požiadavka dorazí, démon vytvorí nový proces, ktorý ju obslúži. Potom proces skončí. Medzitým však pôvodný démon stále počúva na svojom porte.

1.2.2 Proces "init"

Kým začneme o sieťových službách, treba spomenúť jeden špeciálny proces, ktorý má zo všetkých procesov obzvlášť výnimočné postavenie a úlohu. Je to proces "init", ktorý sa spúšťa počas bootovania ako úplne prvý proces v systéme (má PID = 1). Vždy sa spúšťa s právami roota (tento fakt sa niekedy využíva pri prenikaní do systémov). Ak máte možnosť sledovať výpisy na konzole počas bootovania, určite si všimnete, že po natiahnutí jadra a výpise informácií o nájdenom hardvéri a diskoch sa objaví takáto hláška:

INIT: version 2.xx starting

V tomto okamihu sa spúšťa proces "init". Preberá zodpovednosť za automatické naštartovanie série programov počas bootovania systému. Zároveň dohliada na isté vybrané procesy a v prípade, že z nejakého dôvodu prestanú bežať (ukončia sa), spustí ich znovu. Príkladom takéhoto opätovného spúšťania programov, za ktoré je zodpovedný "init", je prihlasovací dialóg na virtuálnych konzolách servera. Tento prihlasovací dialóg generuje program "getty". Pre každú virtuálnu konzolu beží jeden proces "getty". Keď sa prihlási používateľ, proces "getty" na danej konzole spustí program "login", a keď sa používateľ odhlási, "getty" sa opätovne naštartuje (vlastne, teraz už viete, že v skutočnosti ho znovu spustí práve "init").

1.2.3 Runlevely

Ako som spomenul, "init" robí dohľad nad istou skupinou programov, ktoré majú bežať, a postará sa o to, aby sa po skončení vždy naštartovali znovu. Skupina týchto programov sa volá runlevel.

Existujú viaceré runlevely, teda viaceré navzájom trochu odlišné zostavy bežiacich dôležitých programov, výlučne kvôli pohodliu správcu. V jednej zostave (v jednom runleveli) napríklad môže bežať grafické prostredie XWindows, iný runlevel zase dovolí prihlásiť sa len jednému človeku (na zvyšných konzolách nespustí "getty" - so einfach ist das ;). "init" je dokonca taký prešpekulovaný, že sa pri prechode z jedného runlevelu do druhého postará o zrušenie tých programov, ktoré v druhom runleveli bežať nemajú.

Ak používate Debian, Red Hat, Mandrake alebo inú balíčkovú distribúciu, ktorá používa "System V Init", práca s runlevelmi a procesmi v nich je veľmi jednoduchá. Existuje adresár "/etc/init.d/" (v starších verziách Mandrake je to "/etc/rc.d/init.d/"), v ktorom sa nachádzajú krátke skripty napísané väčšinou v shelli (bash alebo sh) určené na spúšťanie a zastavovanie služieb. Môžete ich použiť aj pri ručnom spúšťaní/zastavovaní (o chvíľu napíšem, ako).

Na samotné spúšťanie služieb (a rozhodovanie, ktoré sa majú spustiť), existujú adresáre "/etc/rc0.d/", "/etc/rc1.d" ... "/etc/rc6.d". Čísla 0-6 predstavujú "runlevely" systému.

Runlevely 0, 1 a 6 majú špeciálny význam:

Ak sa spýtate, na čo by sa dali použiť runlevely 2-5, môžete si predstaviť napríklad situáciu, že v runleveli 2 nastavíte iba spúšťanie najnutnejších služieb, kým v runleveli 3 sa spustia všetky a potom môžete robiť pokusy s runlevelom 2, ktoré služby vôbec potrebujete Kedykoľvek môžete ukončiť pokusy a prepnúť sa do runlevelu 3. Ostatné runlevely ponecháte zatiaľ v pôvodnom stave. Sám som takto testoval konfiguráciu servera od Infoveku - runlevel 2 som použil na testovanie, aby som nemusel meniť nič, čo sa týka runlevelu 3 a aby som v prípade, že niečo pokazím, mohol bez problémov zapnúť normálnu prevádzku servera.

Ak chcete zistiť, v ktorom runleveli sa spúšťa váš server, pozrite si súbor "/etc/inittab" a hľadajte takýto riadok:

id:3:initdefault:

Toto znamená, že init štandardne pracuje v runleveli 3. Debianisti tam môžu mať číslo 2, inak sa naozaj veľmi bežne používa 3. Ak chcete zmeniť defaultný runlevel, musíte súbor upraviť a zmeniť číslo "3" na požadovanú hodnotu.

Na Debiane (možno aj na iných distribúciách) môžete skúsiť namiesto prezerania súboru "/etc/inittab":

ps 1
  PID TTY      STAT   TIME COMMAND
    1 ?        S      0:03 init [2]

Z toho vyplýva, že sa proces "init" nachádza práve v runleveli 2.

Upozornenie: Nikdy nenastavujte defaultný runlevel na 0 alebo 6 :) Už by ste mali vedieť, prečo. Kto nevie, môže skúsiť, ale už nenabootuje.

1.2.4 Spúšťacie skripty

Keď už teda viete, v ktorom runleveli sa spúšťa váš server, môžete sa pozrieť do adresára "/etc/rcY.d" kde Y je číslo runlevelu. V tomto adresári sa nachádzajú symbolické linky na skripty v adresári "/etc/init.d". Tie, ktorých meno začína "S" (VEĽKÉ "S") sa budu spúšťať, tie, ktorých meno začína "K" (VEĽKÉ "K") sa budú zastavovať pri vstupe do tohto runlevelu. Čísla v mene symlinkov znamenajú poradie, v ktorom sa budu služby spúšťat. To je veľmi dobrá vec, pretože napríklad DNS (S19bind) by sa mal spustiť ešte skôr, ako sa spustí mailový server; proces syslog (S10sysklogd), ktorý zabezpečuje logovanie všetkých udalostí, by sa mal spustiť ako prvý a tak podobne. Ak majú viaceré súbory rovnaké číslo, spúšťajú sa za sebou v abecednom poradí.

Ukážka môjho adresára "/etc/rc3.d":

S10sysklogd  S20apcupsd    S20logoutd  S20quota     S30squid    S91apache
S12kerneld   S20inetd      S20makedev  S20samba     S34stunnel  S99rmnologin
S19bind      S20ippl       S20oidentd  S20scanlogd  S89cron     s22ntpdate
S20acct      S20linuxlogo  S20postfix  S20ssh       S90mysqld   s23ntp

Pozrite sa aj, kam smerujú tieto linky (to už u seba, tento text by bol príliš neprehľadný), malo by to byť do adresára "/etc/init.d".

(Všimnite si pozorne "s22ntpdate" a "s23ntp". Tieto súbory sa začínajú malým "s", takže sa budú pri vstupe do daného runlevelu procesom "init" IGNOROVAŤ!)

Ako som spomenul, ak ma symlink názov začínajúci "S", bude sa skript pri štarte systému spúšťať. V skutočnosti "init" spustí súbor, na ktorý linka ukazuje, s parametrom "start". Napríklad: "S20samba" spustí "/etc/init.d/samba start".
Tieto skripty s parametrom "start" môžete (a mali by ste!) používať na spúšťanie (zastavovanie) služieb počas prevádzky servera. Je to najjednoduchší a najčistejší spôsob, pretože skriptíky okrem samotného spustenia (zastavenia) služby urobia aj menšie upratovanie, vytvoria (vymažú) súbory s číslom procesu v adresári "/var/run" a tak ďalej.

Analogicky, symlink začínajúci "K" spôsobi spustenie skriptu s parametrom "stop". "K20samba" spustí "/etc/init.d/samba stop". V našom príklade s "proftpd" sme spustili skript "/etc/init.d/proftpd stop". Jednoduché, však?

Aby to nebolo všetko, môžete väčšinu služieb reštartovat tak, že spustíte "/etc/init.d/skript reload" resp. "/etc/init.d/skript restart". A ako bonbónik na záver: ak potrebujete zistiť, či nejaká služba beží alebo nie, môžete pri mnohých z nich použiť parameter "status" ("/etc/init.d/skript status"). Pri tom sa využíva práve číslo procesu, ktoré uložil štartovací skript alebo samotný program pri spustení do adresára "/var/run".

1.2.5 Odstránenie nepoužívaných služieb

Ak niektoré služby v danom runleveli nepoužívate, nespúšťajte ich. Čím menej služieb beží, tým menšie je riziko ich zneužitia. Napríklad premenujte ich spúšťacie linky v zodpovedajúcich adresároch "/etc/rc.X", ako som to urobil ja, keď som odstraňoval spúšťanie servera "ntpd" (časová synchronizácia servera):

mv S20ntp s20ntp

Ak chcete zakázať spúšťanie nejakej služby vo všetkých runleveloch, jednoduchšie je premenovať skript v "/etc/init.d", čím spôsobíte, že symbolické linky nebudú fungovať a nabudúce sa teda služba už nespustí.

Príklad:

Na serveri sa spúšťa FTP server "proftpd" a mne sa to nepáči. Zistíme, že je za to zodpovedný symlink "/etc/rc2.d/S50proftpd", ktorý ukazuje na súbor "/etc/init.d/proftpd". Ideme teda do adresára "/etc/init.d", najprv FTP server vypneme príkazom

./proftpd stop

a potom skript "proftpd" premenujeme napríklad na "proftpd.off" pomocou:

mv proftpd proftpd.off

Tým nič nepokazíte, ak bude treba, dokážete systém vrátiť do pôvodného stavu. Nezabúdajte, že ak zmeníte štartovacie subory, prejaví sa zmena až po ďalšom reboote, alebo ak dotyčné služby zastavíte ručne (ako napríklad v ukážke s "proftpd").

1.2.6 Nielen službami je server živý

Pred chvíľou som vás trochu zavádzal: všetko, čo sa nachádza v adresároch, ktoré sa spracujú pri štarte, nemusia byť samozrejme iba sieťové služby. Je to jednoducho všetko, čo sa musí vykonať pri bootovaní. Napríklad "S99rmnologin" spúšťa skript "rmnologin", ktorý zabezpečí zmazanie súboru "/etc/nologin". Tento súbor sa vytvára pri reboote počítača, a pokiaľ existuje, na server sa zo siete (z konzoly áno) nikto neprihlási (používateľovi sa vypíše obsah tohto súboru). Je to výborná pomôcka, pretože ak práve rebootujete server, bolo by nevhodné, keby sa naň niekto prihlasoval. Súbor "/etc/nologin" môžete s úspechom používať na dočasný zákaz prihlasovania používateľov, ak budete robiť nejakú údržbu (napríklad zavádzať používateľom quoty, pri čom by sa nemalo manipulovať so súbormi).

O spúšťanie niektorých sieťových služieb sa stará démon "inetd", o ktorom teraz bude reč.

1.3 Inetd versus samostatne spúšťané služby

Ak spúšťate služby pri štarte servera, démony, ktoré ich obsluhujú, sa zavesia na zodpovedajúce porty a čakajú na prichádzajúce požiadavky. To znamená, že procesy démonov permanentne bežia. Ak niektoré služby nepoužívate až tak často, ale ich obslužné démony bežia, zbytočne používajú vašu pamäť. Preto existuje "inetd" (Internet Daemon), "démon démonov" alebo ešte inak "superdémon".

Inetd sa spúšťa pri štarte servera (S20inetd) a zistí si z konfiguračného súboru, ktoré služby bude spúšťať. Vzápätí sa zavesí na zodpovedajúce porty namiesto nich. V prípade, že príde požiadavka, rád prenechá obsluhu služby iným a spustí zodpovedajúceho démona. Typickou črtou "inetd" je teda predstierať, že je niekto iný a potom zbabelo cúvnuť ;-)

Týmto sa šetrí pamäť, pretože namiesto N procesov čakajúcich na požiadavky beží len jeden ("inetd"), ale je tu mierne spomalenie pri spracovaní požiadavky, keďže sa zodpovedajúci démon musí pred obslúžením požiadavky najprv spustiť.

"inetd" sa preto hodí na spracovanie služieb, ktoré netreba obsluhovať príliš často alebo aspoň nie stále (talk, finger, pop3, ftp, ... konkrétne to veľmi závisí od vášho systému). Oproti tomu pri štarte servera je vhodné spúšťat obslužné démony tých služieb, ktoré musia bežať stále (web). "inetd," navyše ponúka jednu špecialitu a tou je jednoduché riadenie prístupu k službám, ktoré spúšťa. Môžete tak ľahko ochrániť svoj server proti prístupom na niektoré služby zvonku a ponúkať ich len pre vnútornú sieť. Obmedzenie prístupu zabezpečuje TCP wrapper.

"inetd" samozrejme nemá krištáľovú guľu, aby vedel rozhodnúť, ktoré služby sa budú spúšťať z neho a ktoré samostatne. Slúži na to (ako na väčšinu vecí v Linuxe) súbor "/etc/inetd.conf". Riadky v ňom určujú, ktoré služby bude inetd obsluhovať a ktorého démona bude pre ne spúšťať.

Ukážka "inetd.conf":


port   typ     prot.   detaily    user       program         argumenty

talk   dgram   udp     wait       nobody.tty /usr/sbin/tcpd  /usr/sbin/in.talkd
imap   stream  tcp     nowait.200 root       /usr/sbin/tcpd  /usr/sbin/imapd
finger stream  tcp     nowait     root       /usr/sbin/tcpd  /usr/sbin/cfingerd
port:
číslo portu alebo označenie portu/služby z "/etc/services"
typ:
dgram, stream, raw
prot.:
protokol (tcp, udp). Ak je typ stream -> tcp; ak je typ dgram-> udp
detaily:
hodnota wait znamená, že "inetd" nebude obsluhovať ďalšie prichadzájúce požiadavky na túto službu, až kým obsluhujúci démon neskončí svoju činnosť. Ak je nowait, môže sa spúšťať viacero inštancií obslužného démona pre súčasne prichádzajúce požiadavky.
Toto platí len pre dgram, ostatné typy majú vždy "nowait".
Ak chcete určiť maximálny počet spustených inštancií démona za jednu minútu, uveďte ho ako číslo za bodkou hneď za slovom "wait/nowait". Po prekročení limitu sa služba nebude spúšťať po dobu 10 minút.
"inetd" ma nejake implicitne limity (Debian: 40/minutu), ktoré sa vám môžu zdať primálo (pozri "man inetd.conf").
user:
používateľ, s ktorého právami sa bude spúšťať démon. Najčastejšie je to root, ale niektoré démony to nevyžadujú. Z hľadiska bezpečnosti by mal mať tento používateľ čo najmenšie práva.
Ak treba uviesť okrem mena používateľa aj skupinu, oddeľujú sa bodkou.
program:
cesta k programu (démonovi), ktorý sa ma spustiť. Ak chcete (chceme!) kontrolovať, z akých adries sa budú akceptovať požiadavky, ako program uveďte TCP wrapper ("/usr/sbin/tcpd") a ako argument pôvodnú cestu k démonovi, prípadne parametre.

Vyššie zmienená ukážka definuje tri služby: obsluhu talk démona (kto ho nepozná, nemusí ho ani používať!), na ktorej je zaujímavé, že sa bude spúšťať s právami používateľa "nobody" a skupiny "tty"; obsluhu čítania pošty pomocou protokolu imap (max. 200 pripojení za 1 minútu kvôli prístupom z webmailového rozhrania IMP); a obsluhu služby finger.

Upozornenie: ak niektoré služby nepotrebujete, zakážte ich. To urobíte tak, že pred riadok, ktorý definuje službu, dáte znak "#" (označuje komentár)

Príklad: zákaz spúšťania finger démona

#finger stream  tcp     nowait     root       /usr/sbin/tcpd  /usr/sbin/cfingerd

Upozornenie: po zmenách v "inetd.conf" treba reštartovať "inetd". Najjednoduchšie pomocou: "/etc/init.d/inetd reload". Správcovia "slackwarovského" typu zasa radi používajú "killall -HUP inetd" :) Vo svojej podstate robia oba príkazy úplne to isté. Finta je v tom, že proces "inetd" osobitne reaguje na niektoré signály (isté systémové správy, špecialita unixových systémov). Ak prijme signál "SIGHUP", znovu načíta svoj konfiguračný súbor "/etc/inetd.conf". Nemusíte sa báť, že by sa "inetd" ukončil, aj keď meno "killall" v tomto prípade môže trochu zavádzať.

1.4 Root versus bežný používateľ

Keď spúšťate službu počas zavádzania systému zo štartovacích skriptov, alebo z "inetd", štandardne sa spúšťa s právami používateľa root. Je to preto, že pri zavádzaní systému sa všetko spúšťa s právami root-a; ďalej preto, že aj samotný "inetd" beží s právami root-a. Ďalším dôvodom je, že iba tento používateľ má právo "zavesiť" na port s číslom < 1024 nejaký obslužný program, ktorý sme tu označovali pojmom "démon". No a nakoniec je to tiež kvôli prístupovým právam, keď treba niečo niekam zapisovať. Root ma právo zapisovať všade, alebo môže zmeniť identitu (presne ako keď ju meníte vy príkazom "su") na iného používateľa bez znalosti hesla.

1.4.1 Príliš veľké privilégiá

Problém je v tom, že root má všetky privilégiá, ktoré len môže používateľ mať. Ak nastane problém (chyba, pokus o hack) a proces bežiaci pod rootom začne zapisovať niekam, kam nemá, môže to mať veľmi nepríjemné následky. Problém je však najmä v tom, že proces, ktorý počúva na nejakom porte, je priamo vystavený útokom zo siete. Tieto útoky môžu byť napríklad klasické pokusy o buffer-overflow (preplnenie vstupných buffrov programu, ktorý očakáva nejaké údaje, na ktoré má vyhradenú pamäť pevnej veľkosti, ale nekontroluje veľkosť údajov, ktoré do nej zapisuje - vhodne zadané údaje spôsobia vykonanie iných príkazov, ako autor programu zamýšľal). Programy, ktoré su známe svojimi bezpečnostnými problémami, sú napríklad: "sendmail" (ako názov hovorí - obslužny démon pošty) a "wu-ftpd" (Washington University FTP daemon). Nie neočakávanou informáciou je, že tieto programy sa spúšťajú pod rootom...

1.4.2 Odhodenie rootovských práv

Jedným z najpoužívanejších trikov, ako zabezpečiť démona bežiaceho pod rootom pred zneužitím je - nespúšťať ho pod rootom. To sa vždy nedá dosiahnuť, lebo iba proces, ktorý beží pod rootom sa môže zavesiť na port s číslom menším ako 1024, na ktorých bežia takmer všetky dôležité služby. Proces má však ešte jednu možnosť: ak sa spustí pod rootom, načíta konfiguráciu a všetky údaje, ktoré má prístupné ako root a zavesí sa na port, môže "odhodiť" rootovské privilégiá a začať sa tváriť ako úplne normálny používateľ. Princíp zmeny identity je rovnaký, ako v prípade použítia unixového príkazu "su používateľ", to znamená, že root môže zmeniť identitu bez toho, aby musel zadávať heslo.

Idea je jednoduchá, treba k nej už len pár maličkostí. Predovšetkým sa veľmi intenzívne odporúča, aby pre všetky démony, ktoré budete takto spúšťať, existovali samostatní používatelia vytvorení pre konkrétneho démona, čiže nie používateľ "nobody" používaný najmä v systémoch Red Hat. Je to preto, že démony by mohli získať prístup k súborom, ku ktorým normálne prístup mať nemajú, pretože človek (a tým menej démon) nikdy nevie, čo všetko na vašom disku v budúcnosti bude mať vlastníka "nobody".

Z rovnakých dôvodov, ako vytvorenie špeciálneho používateľa, sa zvykne vytvárať aj skupina, väčšinou s rovnakým menom. Je to preto, že keď démon umožňuje odhodiť rootovské práva, umožňuje tiež nastavenie skupiny. Opäť platí to isté, ako v prípade používateľov, že by ste mali vytvoriť špeciálnu skupinu pre konkrétneho démona (a nie skupinu "nogroup").

Niekedy autori démonov pamätajú na bezpečnosť a umožňujú, aby démon bezprostredne po spustení zmenil svoju identitu na nejakého "neškodného" používateľa, ktorý je vytvorený väčšinou na tento konkrétny účel. Napríklad WWW server Apache zmení svoju identitu po spustení na "apache" resp. "httpd". Samozrejme, ak ma potom takýto démon niekam niečo zapisovať, musí mať na to vytvorené adresáre s dobrými prístupovými právami a vlastníkom, pretože už nie je všemocný. U Apache sa to rieši tak, že hlavný démon zostane bežať s právami roota, loguje prístupy a stará sa o to, aby bežali jeho "deti", ktoré obsluhujú samotné požiadavky klientov.

V niektorých pripadoch je situácia zložitejšia. Napríklad program "sendmail" beží pod rootom nielen preto, že musí počúvať na porte 25 (<1024), ale aj preto, že okrem posielania mailov zabezpečuje aj ich príjem = zápis do mailových schránok používateľov. A na to potrebuje možnosť zápisu do všetkých schránok. Program "sendmail" je bohužiaľ veľmi často cieľom utokov a veľmi často vychádzajú jeho opravné verzie, zhruba ako service packy Microsoftu...

To "najlepšie" na koniec: bohužiaľ, nie každý démon vám umožní, aby ste ho takto "zabezpečili". Ale medzi svetlé výnimky patrí napríklad aj "named" (najpoužívanejší démon na obsluhu DNS). Iné démony sú zasa napísané tak, že špeciálnych používateľov bez rootovských privilégií používajú celkom automaticky (napr. SMTP démony "postfix", "qmail"). Poslednú kategóriu predstavujú démony spúšťané z "inetd", ktorý umožňuje určiť používateľa, s ktorého právami sa má démon spustiť. Či vôbec a ako však bude démon s obmedzenými právami fungovať, záleží len na konkrétnom démonovi. Vyskúšajte.

Napríklad v predchádzajúcej ukážke "inetd.conf" si všimnite, že napríklad program "in.talkd" umožňujúci použitie programu na rozhovor používateľov "talk" sa nespúšťa pod rootom, ale s právami používateľa "nobody" a skupiny "tty". To preto, aby ste výzvy na prijatie hovoru videli na obrazovke, ktorá reprezentuje "obsah" virtuálneho terminálu. Ten má právo zápisu pre vás a pre skupinu "tty", práve pre tento účel. "in.talkd" teda nemusí bežať pod rootom, ale môže vypísať výzvu na talk pre každého používateľa.

Vidíte teda, že služby bežiace pod rootom môžu byť (a sú) nebezpečné. Viem, o čom hovorím, môj server hackli už cez "sendmail" aj cez "named" (v tých časoch v štandardnej konfigurácii zvykol bežať pod rootom). Preto, ak sa to dá a ak to autori programu umožňujú, treba nakonfigurovať jeho beh pod iným používateľom. V dnešných balíkových distribúciách na to autori našťastie pamätajú oveľa častejšie ako kedysi.

1.5 Prehľad bežne používaných sieťových služieb

Všetky sieťové služby používajú na komunikáciu servera s klientom nejaký port, na ktorom počúva démon a čaká na požiadavky. Tie služby, ktoré sú štandardizované, používajú štandardné porty zo súboru "/etc/services". Tu napíšem niekoľko najpoužívanejších spolu s číslami portov, na ktorých bežne počúvajú, predstaviteľmi typických obslužných démonov (v prípade viacerých známych démonov, kurzívou sú uvedené tie, ktoré odporúčam kvôli bezpečnosti) a bližšie, i keď stručné informácie o službe.

1.5.1 ftp (File Transfer Protocol)

Port(y): 20/tcp, 21/tcp
Démon: proftpd [www.proftpd.org], wu-ftpd (in.ftpd z inetd)

Info: Ftp umožňuje prenos súborov medzi dvomi počítačmi podporujúcimi službu ftp. K serveru sa používateľ prihlasuje pomocou svojho mena a hesla na port 21, samotný prenos údajov prebieha na porte 20. Údaje nie sú šifrované, takže sa heslo dá ľahko zachytiť na sieti pomocou paketových snifferov. Štandardne je síce zakázané prihlasovanie roota, ale aj tak vám neodporúčam používať túto službu, pretože ju môžete nahradiť šifrovaným ssh, ktoré ponúka sftp (secure ftp) a scp (secure copy).

1.5.2 ssh (Secure shell)

Port(y): 22/tcp
Démon: sshd (balíky OpenSSH [www.openssh.org] (free) alebo ssh (za istých podmienok free, inak komerčný))

Info: Ssh je bezpečná alternatíva k službám telnet a ftp. Existujú dve verzie protokolu ssh (1 a 2). ssh umožňuje prihlásenie používateľa na vzdialený server a prácu so shellom, zároveň podporuje kopírovanie súborov pomocou príkazu "scp" alebo servera "sftp-server" (len ssh2). Novšia verzia protokolu podporuje tiež viac šifrovacích algoritmov.

Odporúčam používať balík "openssh", ktorá je free (BSD licencia) a neobsahuje nijaké patentované algoritmy. Ďalej odporúčam zvážiť, či sa pomocou ssh bude dať na váš server prihlásiť z ľubovoľnej adresy a či sa bude môcť prihlásiť používateľ root.

1.5.3 telnet (vzdialený terminál)

Port(y): 23/tcp
Démon: telnetd, in.telnetd (inetd)

Info: Telnet umožňuje vzdialené prihlásenie k serveru a používanie shellu. Používateľ sa autentifikuje prihlasovacím menom a heslom, čiže rovnako, ako pri práci s konzolou.

Komunikácia pri používani telnetu je nešifrovaná, takže sa heslo dá ľahko zachytiť na sieti pomocou paketových snifferov. Štandardne je síce zakázané prihlasovanie roota, ale aj tak vám neodporúčam používať túto službu, pretože ju môžete nahradiť šifrovaným ssh.

1.5.4 smtp (Simple Mail Transfer Protocol)

Port(y):25/tcp
Démon: balík Postfix [www.postfix.org], qmail, exim, sendmail

Info: Slúži na príjem pošty a jej následné doručenie do používateľských schránok. Štandardom sa stal priekopnícky program "sendmail", ktorý však beží pod rootom a často má bezpečnostné chyby. Táto kombinácia z neho robí nebezpečného démona. Odporúčam použiť bezpečný a ľahko konfigurovateľný "Postfix" (http://www.postfix.org). "qmail" (http://www.qmail.org) je tiež veľmi bezpečný, ale vraj sa ťažšie konfiguruje. Oba pracujú s právami bežného používateľa ("qmail": viacerých používateľov) vytvoreného na tento účel. "postfix" sa dá navyše uzavrieť vo vyhradenom adresári (chroot).

1.5.5 DNS (Domain Name Service)

Port(y): 53/tcp, 53/udp
Démon: named (balík BIND [www.isc.org/BIND]

Info: Obsluha DNS (Domain name server). Umožňuje prevádzkovať na serveri vlastnú doménu (napríklad v mojom prípade je to "vazka.sk"). Úlohou DNS je prekladať doménové adresy na zodpovedajúce IP adresy (napr. "twin.vazka.sk" = "195.20.166.130") a opačne (reverzný DNS). Zabezpečuje tiež cachovanie týchto prekladov pre ďalšie požiadavky.

DNS funguje na základe požiadaviek a odpovedí a používa na to protokol UDP. Na prenosy zónových informácií medzi primárnym a sekundárnym serverom sa používa TCP.

"named" sa štandardne spúšťa pod rootom, existuje však možnosť, aby po spustení zmenil identitu na bežného používateľa (bežne sa používa "named" a skupina "named"). Umožňuje tiež uzavretie do samostatného vyhradeného adresára (chroot).

V minulosti bol "named" terčom častých útokov a exploitov. Keďže ho nemožno firewallovať (musí byť prístupný všetkým požiadavkám zo siete), VEĽMI vám odporúčam využiť obe vyššie uvedené možnosti.

1.5.6 finger

Port(y): 79/tcp
Démon: cfingerd, ffingerd, in.fingerd (z inetd)

Info: Finger umožňuje získať informácie o používateľovi vášho servera (či je prihlásený, jeho skutočné meno, či má nejaké nové maily a pod.) pomocou rovnomenného programu. Niektorí správcovia pokladajú túto službu za bezpečnostné riziko, i keď nezverejňuje nijaké informácie, ktoré by si používateľ nemohol meniť. Ak sa rozhodnete finger nepoužívať, vypnite ho z inetd.conf

Z vlastných skúseností môžem odporúčať iba cfingerd, ktorý je vysoko konfigurovateľný, umožňuje používateľovi zakázať svoje fingerovanie, logovať pokusy o finger a zmeniť informácie, ktoré sa budú poskytovať. Program sa spúšťa pod rootom, ale autori tvrdia, že nespúšťa pod rootom nijaké programy a ani nikam nezapisuje - mal by teda byť bezpečný.

1.5.7 http (HyperText Transfer Protocol)

Port(y): 80/tcp
Démon: httpd (balík Apache [www.apache.org])

Info: Umožňuje prístup k WWW stránkam na vašom serveri. Program httpd beží pod rootom, ale na obsluhu požiadaviek spúšťa istý počet "detí", ktoré už bežia s právami bežného používateľa.

Nepoužíva sa šifrovanie, preto nezadávajte do formulárov na webe heslá, ktoré používate na prístup k serveru alebo iným, dôležitejším informáciám. Pozri aj https.

1.5.8 pop3 (Post Office Protocol - version 3)

Port(y): 110/tcp
Démon: solid-pop3d, popa3d [www.openwall.com/popa3d], ipop3d (in.pop3d z inetd)

Info: Prístup k pošte na serveri pomocou protokolu POP3, ktorého princíp spočíva v sťahovaní mailov z poštového servera na lokálny stroj a v neskoršom čítaní, čo je vhodné najmä pre dialupové pripojenie. Používateľ sa autentifikuje pomocou používateľského mena a hesla. Prenos údajov však nie je šifrovaný, preto odporúčam použiť program "stunnel" na "tunelovanie" spojenia cez SSL.

Keďže pop3 démon musí vedieť čítať maily ľubovoľného používateľa, spúšťa sa pod rootom. Program "popa3d" navrhnutý špeciálne s dôrazom na bezpečnosť vykonáva všetky ďalšie operácie pod špeciálnym používateľom, alebo pod používateľom, ktorého schránku sprístupňuje.

1.5.9 ident démon

Port(y): 113/tcp
Démon: oidentd, pidentd

Info: Služba ident slúži na identifikáciu používateľov aktívnych spojení. Funguje to tak, že pre každé odchádzajúce spojenie si vzdialený server môže vyžiadať jeho autentifikáciu. Ident démon zistí, ktorý používateľ vášho servera dané spojenie používa a odpovie vzdialenému serveru menom (implicitne) alebo UID používateľa. Treba si uvedomiť, že toto veľmi uľahčuje hľadanie vinníka v prípade, že je vzdialený server hacknutý niektorým používateľom vášho servera (v logoch sa môžu nachádzať záznamy o prichádzajúcich spojeniach s identifikáciou útočníka). Z toho istého dôvodu hackeri na svojich počítačoch vypínajú alebo inak likvidujú túto službu a preto, hoci je výborným pomocníkom, nemôžete sa na ňu v kritických chvíľach spoliehať ako na jednoznačný spôsob identifikácie.

"oidentd" beží pod bežným používateľom (potrebujete vedieť čítať súbory z "/proc") a umožňuje aj také špeciality, ako identifikácia maškarádovaných spojení (IP masquerading) a vypínanie služby ident pre vybraných používateľov. Službu ident by ste mali mať vždy zapnutú, veľa programov sa na ňu spolieha (aj mnohé IRC a FTP servery).

1.5.10 samba (zdieľanie súborov a tlačiarní medzi Windows a Unixom)

Port: 137/tcp - 139/tcp, 137/udp - 139/udp
Démon: smbd+nmbd (balík Samba [www.samba.org])

Info: Tieto porty obsadzuje samba (démon umožňujúci zdieľanie adresárov, súborov a tlačiarní servera z Windows a prihlasovanie používateľov do domény). Samba beží pod rootom, ale po prihlásení používateľa zmení identitu procesu na daného používateľa. Umožňuje tiež nastaviť, na ktorých sieťových kartách má počúvať - pre vás je zaujímavá väčšinou len vnútorná sieť a teda vnútorná karta! Tiež odporúčam nastaviť šifrovanie hesiel do samby (nie je to síce šifrovanie v pravom zmysle slova, ale je to lepšie ako nič). Úplne ideálne je obmedziť pripájanie na porty samby už na úrovni firewallu.

1.5.11 imap (Internet Message Access Protocol)

Port(y): 143/tcp
Démon: imapd z inetd, Courier IMAP

Info: Prístup k pošte na serveri pomocou protokolu IMAP, ktorého princíp spočíva v sťahovaní hlavičiek mailov z poštového servera na lokálny stroj a v neskoršom sťahovaní iba tých mailov, ktoré chcete prečítať. To je výhodné napríklad vtedy, keď máte v schránke jeden obrovský mail a pripájate sa cez dialup - pomocou POP3 musíte vždy stiahnuť všetky nové maily, ale pomocou IMAP iba tie, ktoré si vyberiete. Ďalšou výhodou je podpora priečinkov na serveri, v ktorých môžete uchovávať maily kvôli prehľadnosti.

Používateľ sa autentifikuje pomocou používateľského mena a hesla. Prenos údajov však nie je šifrovaný, preto odporúčam použiť program "stunnel" (http://www.stunnel.org) na "tunelovanie" spojenia cez SSL. Ďalšou možnosťou je použiť webovské rozhranie ako napr. IMP, ktoré číta maily z localhostu a WWW s podporou SSL.

Keďže imap démon musí vedieť čítať maily ľubovoľného používateľa, spúšťa sa pod rootom. Existujú aj bezpečnejšie alternatívy, napr. Courier IMAP server, ktorý má však tú "nevýhodu", že maily uchováva v používateľských adresároch vo formáte Maildir (namiesto súborov v adresári "/var/spool/mail/"), nemám však odskúšanú jeho inštaláciu.

1.5.12 https (HyperText Transfer Protocol Secure/HTTP over SSL)

Port(y): 443/tcp
Démon: httpd (balík Apache [www.apache.org])

Info: Umožňuje prístup k WWW stránkam na vašom serveri s použitím šifrovania. Šifrovanie zabezpečuje vrstva SSL, treba mať preto nainštalovaný balík "openssl", modul do Apache "mod_ssl" a vytvorené certifikáty pre server. Program httpd beží pod rootom, ale na obsluhu požiadaviek spúšťa istý počet "detí", ktoré už bežia s právami bežného používateľa.

1.5.13 ipp (Internet Print Protocol)

Port(y): 631/tcp, 631/udp
Démon: cupsd

Info: Slúži na komunikáciu klientov s tlačovým serverom. Sorry, nepoužívam Linux na tlač, takže dopíšem neskôr. Nateraz hádam len maličkú poznámku, že je vhodné tieto porty chrániť pomocou firewallu, aby sa niekto z Internetu príliš intenzívne nesnažil znemožniť vám tlač.

1.5.14 talk

Port(y): 517/udp
Démon: in.talkd (z inetd)

Info: Podpora služby talk na interaktívny rozhovor 2 používateľov. Pôvodne iba pre unixových klientov, ale existujú aj klony pre Windows. Samotné nadväzovanie spojenie je príliš zložité aj na mňa, na porte 517/udp síce počúva démon, ale skutočné (tcp) spojenie sa vytvára na náhodne vybratých bežných portoch (> 1024) - takže sa ťažko obmedzuje pomocou firewallu. Používajte tohto démona iba v prípade, že skutočne chcete!

Démon nemusí bežať pod rootom, stačia mu práva "nobody"."tty", ak majú používateľské virtuálne terminály nastavenú skupinu "tty" (pozri "inetd.conf"). Démon zapisuje do používateľských terminálov výzvy na spojenie: "talk connection requested by...".

1.5.15 ntalk

Port(y): 518/udp
Démon: in.ntalkd (z inetd)

Info: Obdoba služby talk, ale pre viacerých používateľov.

1.5.17 imaps (IMAP over SSL)

Port(y): 993/tcp
Démon: stunnel+imapd, imaps

Info: Podpora služby imap cez zabezpečený kanál. Heslá (samozrejme, aj celý zvyšok komunikácie) sa prenášajú šifrované. Odporúčam používať namiesto imap, pretože nie je zložité nakonfigurovať "stunnel" ani klienta (Mozilla, Evolution, Outlook, Outlook Express, Eudora). Prípadne môžete použiť priamo verziu démona, ktorý už je súčasťou balíka "IMAP2000".

1.5.18 pop3s (POP3 over SSL)

Port(y): 995/tcp
Démon: stunnel+POP3 server

Info: Podpora služby pop3 cez zabezpečený kanál. Heslá (samozrejme, aj celý zvyšok komunikácie) sa prenášajú šifrované. Odporúčam používať namiesto pop3, pretože nie je zložité nakonfigurovať "stunnel" ani klienta (Mozilla, Evolution, Outlook, Outlook Express, Eudora). Prípadne môžete použiť priamo verziu démona, ktorý už je súčasťou balíka "IMAP2000".

1.5.19 proxy server SQUID

Port(y): 3128/tcp, 3130/tcp, 4827/tcp, ...
Démon: squid [www.squid-cache.org]

Info: Proxy server SQUID. Spúšťa sa pod rootom, ale na portoch počúvajú a požiadavky obsluhujú procesy bežiace pod bežným používateľom (štandardne "squid"). Port, na ktorom squid počúva, možno tiež zmeniť. V závislosti od konfigurácie možno počet ďalších portov výrazne obmedziť.

1.5.20 databázový server MySQL

Port(y): 3306/tcp
Démon: mysqld [www.mysql.org]

Info: Databázový server MySQL. Beží pod bežným používateľom. Na komunikáciu s klientom slúži port 3306, ale v prípade, že sa na databázu mienite pripájať iba z localhostu (napr. ak používate PHP a databáza je na tom istom serveri, ako WWW server), môžete pripojenie na tento port obmedziť z lokálnej aj vonkajšej siete pomocou firewallu a používať len spojenie cez "localhost".

1.5.21 X server

Port(y): 6000/tcp - 6010/tcp
Démon: X

Info: Obsluha Xwindows aplikácií bežiacich na serveri v prípade, že používate Xwindows. Tieto porty sa používajú na komunikáciu aplikácií bežiacich na rôznych počítačoch, ale zobrazovaných na vašom desktope. V prípade, že nebudete X server používať, vypnite ho. Ak ho chcete používať iba z konzoly, môžete ochrániť porty pomocou firewallu.

Späť (Intro) Obsah Ďalej (TCP wrapper a obmedzenie prístupu)

© Ivan "VIX" Noris, 2002-2007
mail: vix (zavinac) deja-vix bodka sk