Posledná zmena: 7/9/2021
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.
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".
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
").
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:
init 1
" (alternatívne pri bootovaní
musíte kernelu dať parameter "single") v prípade, že chcete uskutočniť nejaké
zmeny v konfigurácii servera priamo z konzoly (napríklad nastavenie
a experimentovanie so sieťovými nastaveniami) a bolo by nezdravé mať na
serveri spustené služby a prihlásených používateľovhalt
" môžete použiť
"init 0
", rovnako namiesto "reboot
"
funguje "init 6
" alebo v prípade núdze stlačenie
"CTRL+ALT+DEL" na konzole.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.
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
".
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
").
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č.
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
/etc/services
"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.inetd
" ma nejake
implicitne limity (Debian: 40/minutu), ktoré sa vám môžu zdať primálo (pozri
"man inetd.conf
").
/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ť.
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.
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...
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.
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.
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).
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.
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.
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).
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.
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ý.
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.
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.
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).
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.
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.
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.
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č.
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...".
Port(y): 518/udp
Démon: in.ntalkd (z inetd)
Info: Obdoba služby talk, ale pre viacerých používateľov.
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".
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".
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ť.
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".
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.