Základy bezpečnosti HTTP servera Apache

linux_server.jpg V pre­doš­lej čas­ti sme sa ve­no­va­li sprá­ve pro­ce­sov, vy­la­de­niu HTTP server­a a pos­ky­to­va­niu webo­vé­ho pries­to­ru na­šim pou­ží­va­te­ľom ale­bo cu­dzím klien­tom. Ten­to­raz sa bu­de­me za­obe­rať tým, ako za­bez­pe­čiť náš server pro­ti zneu­ži­tiu iný­mi pou­ží­va­teľ­mi.

Bez­peč­nosť
Bo­li by sme veľ­mi naiv­ní, ke­by sme sa dom­nie­va­li, že náš škol­ský, fi­rem­ný ale­bo do­kon­ca ko­merč­ný server zos­ta­ne bez pov­šim­nu­tia rôz­nych „ne­ne­chav­cov“, kto­rí exis­tu­jú na inter­ne­te. Prak­tic­ké skú­se­nos­ti potvr­dzu­jú, že škod­ná ne­mu­sí byť len von­ku – ve­ľak­rát sa sta­lo, že náš škol­ský server „nav­ští­vi­li“ vlas­tní pou­ží­va­te­lia – štu­den­ti. Buď z re­ce­sie, ale­bo zo sna­hy do­ká­zať si, že oni na to ma­jú a správ­ca server­a a sie­te je vlas­tne nes­chop­ný hlu­pák.

Kom­plexná te­ma­ti­ka bez­peč­nos­ti ce­lé­ho li­nuxové­ho server­a by za­bra­la nie­koľ­ko kníh, my sa za­me­ria­me na za­bez­pe­če­nie HTTP server­a Apa­che, a to od tých naj­jed­no­duch­ších kro­kov po zlo­ži­tej­šie. Do sys­té­mu bez­peč­nos­ti však ne­pa­tria len opat­re­nia pro­ti prí­pad­ným úto­kom či zá­sa­hom zá­škod­ní­kov. Pa­tria sem aj opat­re­nia za­bez­pe­ču­jú­ce, aby bol náš server sta­bil­ný a efek­tív­ny.

Test kon­fi­gu­rá­cie
Ak sme ko­neč­ne na­kon­fi­gu­ro­va­li HTTP server, je dob­ré si ove­riť, či kon­fi­gu­rač­ný sú­bor je as­poň bez syn­tak­tic­kých chýb. Exis­tu­je jed­no­du­chý spô­sob ove­re­nia syn­taxe kon­fi­gu­rač­né­ho sú­bo­ru http.conf. Ak za­dá­me prí­kaz

 [root@ru­bin root]# apa­chectl con­fig­test

a na ob­ra­zov­ke sa zob­ra­zí hlá­se­nie Syn­tax OK, je kon­fi­gu­rač­ný sú­bor zo syn­tak­tic­kej strán­ky v po­riad­ku. Ak sa ob­ja­ví hlá­se­nie o chy­be, je pou­ká­za­né na ria­dok, kde sa syn­tak­tic­ká chy­ba vy­sky­tu­je. Vte­dy ot­vo­rí­me kon­fi­gu­rač­ný sú­bor vo vhod­nom edi­to­re a chy­bu op­ra­ví­me. Tre­ba poz­na­me­nať, že ten­to test od­ha­ľu­je len syn­tak­tic­ké chy­by, te­da ne­kon­tro­lu­je lo­gic­ké chy­by. Tie, žiaľ, mu­sí­me od­ha­liť sa­mi, a to pod­rob­ným tes­to­va­ním náš­ho server­a.

Ochra­na ad­re­sá­ra
Pred­stav­me si si­tuáciu, že na na­šom webo­vom server­i chce­me zvi­di­teľ­niť ur­či­té strán­ky ale­bo sú­bo­ry len pre niek­to­rých vy­bra­ných pou­ží­va­te­ľov, pre os­tat­ných bu­de prís­tup za­ká­za­ný. Naj­lep­šie je to uro­biť po­mo­cou me­na a hes­la. To mô­že­me do­siah­nuť tak­zva­nou auten­ti­zá­ciou.

Auten­ti­zá­cia
Auten­ti­zá­ciou sa v tom­to prí­pa­de ro­zu­mie po­vo­le­nie prís­tu­pu do ur­či­té­ho ad­re­sá­ra pros­tred­níc­tvom pri­de­le­né­ho prís­tu­po­vé­ho me­na a hes­la. V hla­vič­ke kaž­dej od­po­ve­de server­a je ob­siah­nu­tý do­pyt na tú­to kom­bi­ná­ciu a v hla­vič­ke kaž­dej po­žia­dav­ky klien­ta mu­sí byť ob­siah­nu­té pou­ží­va­teľ­ské me­no a hes­lo, inak bu­de prís­tup od­miet­nu­tý. Na auten­ti­zá­cii sa po­die­ľa mo­dul mod_auth, pre­to je dô­le­ži­té pred pou­ži­tím auten­ti­zá­cie ten­to mo­dul v kon­fi­gu­rá­cii HTTP server­a po­vo­liť.

Prík­lad
Pre ná­zor­nosť si pred­stav­me ta­kú­to si­tuáciu:
Na­šim pria­te­ľom, kto­rí sa za­ují­ma­jú o le­tec­ké mo­de­lár­stvo, chce­me sprís­tup­niť časť náš­ho webo­vé­ho pries­to­ru, kde bu­de­me uk­la­dať sú­bo­ry s rôz­ny­mi do­ku­men­tmi, fil­ma­mi a ob­ráz­ka­mi. Nech sa na­ši pria­te­lia vo­la­jú Jan­ko, Mir­ko, Mi­ňo a Pe­ter.

Naj­prv mu­sí­me v ad­re­sá­ro­vej štruk­tú­re WWW server­a vy­tvo­riť prís­luš­ný po­dad­re­sár, nap­rík­lad mo­del. Tak­že v Li­nuxe vy­tvo­rí­me ad­re­sár /var/www/mo­del. Po­tom pris­tú­pi­me k úp­ra­ve kon­fi­gu­rač­né­ho sú­bo­ru http.conf.

Auten­ti­zá­cia sa tý­ka vždy kon­krét­ne­ho ad­re­sá­ra, tak­že sa v kon­fi­gu­rač­nom sú­bo­re uvá­dza me­dzi „znač­ky“ <Di­rec­to­ry> a </Di­rec­to­ry>. (Rôz­ne ad­re­sá­re mô­žu po­ža­do­vať iné prih­la­so­va­cie úda­je.) Úsek kon­fi­gu­rač­né­ho sú­bo­ru by mo­hol vy­ze­rať tak­to:

Alias /mo­del "/var/www/mo­del"
<Di­rec­to­ry "/var/www/mo­del">
        Aut­hTy­pe Ba­sic
        Aut­hNa­me “Mo­de­ly“
        Aut­hU­serFil­e “/etc/httpd/conf/hes­la.txt“
        Require user Jan­ko Mir­ko Mi­no Pe­ter
</Di­rec­to­ry /mo­del>

Di­rek­tí­va Alias ur­ču­je, že náz­vu webo­vé­ho ad­re­sá­ra mo­del je pri­ra­de­ný sku­toč­ný ná­zov (aj s úpl­nou ces­tou) k ad­re­sá­ru /var/www/mo­del. Di­rek­tí­va Aut­hTy­pe udá­va typ auten­ti­zá­cie. Apa­che to­tiž im­ple­men­tu­je dva dru­hy auten­ti­zá­cie – zá­klad­nú, inak Ba­sic, a pok­ro­či­lú, Di­gest. My za­čne­me pre jed­no­du­chosť ty­pom Ba­sic, ho­ci to nie je úpl­ne naj­bez­peč­nej­ší spô­sob ove­ro­va­nia. Hes­lo sa pred pre­no­som ne­šif­ru­je a po­sie­la sa inter­ne­tom ako plain (čis­tý, ot­vo­re­ný) text (pre skú­se­nej­šie­ho hac­ke­ra by ne­mal byť prob­lém ta­ké hes­lo od­ha­liť).

Di­rek­tí­va Aut­hNa­me nas­ta­vu­je re­ťa­zec, kto­rým bu­de náv­štev­ník vy­zva­ný na za­da­nie prih­la­so­va­cích úda­jov – zob­ra­zí sa v di­aló­go­vom ok­ne pre­hlia­da­ča. Di­rek­tí­va Aut­hU­serFil­e udá­va umies­tne­nie sú­bo­ru so zoz­na­mom pou­ží­va­teľ­ských mien a ich he­siel v sú­bo­ro­vom sys­té­me, tu te­da v sú­bo­re /etc/httpd/conf/hes­la.txt. Di­rek­tí­va Require udá­va, kto me­no­vi­te bu­de mať k ad­re­sá­ru /var/www/mo­del prís­tup. Mô­že­me uviesť zoz­nam pou­ží­va­te­ľov (od­de­le­ných me­dze­rou) tak ako v prík­la­de ale­bo mô­že­me pou­žiť kľú­čo­vé slo­vo va­lid-user. To­to slo­vo ur­ču­je, že sa mô­žu k da­né­mu ad­re­sá­ru prih­lá­siť všet­ci pou­ží­va­te­lia, uve­de­ní v sú­bo­re /etc/httpd/conf/hes­la.txt, te­da nie­len vy­me­no­va­ní za kľú­čo­vým slo­vom user. To­to mô­že­me efek­tív­ne vy­užiť pri pou­ži­tí jed­né­ho sú­bo­ru s hes­la­mi, ale aj pri ria­de­ní prís­tu­pu k via­ce­rým ad­re­sá­rom. Nech má­me eš­te aj dru­hý ad­re­sár, kto­rý má ná­zov dps (a sku­toč­ne exis­tu­je v ad­re­sá­ro­vej štruk­tú­re /var/www/dps). Po­tom prís­tup k to­mu­to ad­re­sá­ru mô­že­me ria­diť zá­pi­som do kon­fi­gu­rač­né­ho sú­bo­ru /etc/httpd/conf/httpd.conf tak­to:

Alias /mo­del "/var/www/mo­del"
<Di­rec­to­ry "/var/www/mo­del">
        Aut­hTy­pe Ba­sic
        Aut­hNa­me “Mo­de­ly“
        Aut­hU­serFil­e “/etc/httpd/conf/hes­la.txt“
        Require user Jan­ko Mir­ko Mi­no Pe­ter
</Di­rec­to­ry /mo­del>
Alias /dps "/var/www/dps"
<Di­rec­to­ry "/var/www/dps">
       Op­tions In­dexes
       Aut­hTy­pe Ba­sic
       Aut­hNa­me "Dopl­nu­ju­ce stu­dium"
       Aut­hU­serFil­e "/etc/httpd/conf/hes­la.txt"
       Require va­lid-user 
</Di­rec­to­ry>

Za­tiaľ čo k ad­re­sá­ru mo­del sa dos­ta­nú len vy­me­no­va­ní pou­ží­va­te­lia Jan­ko, Mir­ko, Mi­no a Pe­ter, k ad­re­sá­ru dps sa dos­ta­nú všet­ci pou­ží­va­te­lia, de­fi­no­va­ní v sú­bo­re /etc/httpd/conf.httpd.conf. Ďal­šia mož­nosť je pou­ži­tie sku­pín. V ta­kom­to prí­pa­de mu­sí­me eš­te uviesť, kde sa na­chá­dza de­fi­ní­cia sku­pín, a to di­rek­tí­vou AuthGroup­Fi­le (uká­že­me si nes­kôr).

Auten­ti­zač­ný sú­bor
Ob­sah sú­bo­ru s kom­bi­ná­cia­mi pou­ží­va­teľ­ské­ho me­na a hes­la sa ne­vyt­vá­ra ruč­ne. In­šta­lá­cia prog­ra­mu Apa­che ob­sa­hu­je spus­ti­teľ­ný prog­ram s náz­vom htpasswd, kto­rý vy­tvá­ra a ria­di ob­sah sú­bo­ru s hes­la­mi, te­da v tom­to prí­pa­de /etc/httpd/conf/hes­la.txt. Ak nie je sú­bor s kom­bi­ná­cia­mi pou­ží­va­teľ­ské­ho me­na a hes­la vy­tvo­re­ný, pou­ži­je­me pre­pí­nač –c, čím pri­ka­zu­je­me, že sa má vy­tvo­riť (crea­te).

Ak te­da chce­me vy­tvo­riť zá­znam pre pou­ží­va­te­ľa Jan­ko aj s hes­lom, za­dá­me prí­kaz:

 [root@ru­bin root]# htpasswd –c /etc/httpd/conf/hes­la.txt Jan­ko

Na ob­ra­zov­ke sa ob­ja­ví hlá­se­nie:

New password: {za­dá­me hes­lo + En­ter}
Re-ty­pe new password: {za­dá­me hes­lo + En­ter}
Ad­ding password for user Jan­ko

Vy­tvo­rí sa no­vý sú­bor hes­la.txt v ad­re­sá­ri /etc/httpd/conf/ a bu­de sa od nás vy­ža­do­vať za­da­nie hes­la pre pou­ží­va­te­ľa Jan­ko a ove­re­nie hes­la. Keď už má­me sú­bor s hes­la­mi raz vy­tvo­re­ný, os­tat­ných pou­ží­va­te­ľov pri­dá­va­me už bez pre­pí­na­ča –c:

[root@ru­bin root]# htpasswd /etc/httpd/conf/hes­la.txt Mir­ko
[root@ru­bin root]# htpasswd /etc/httpd/conf/hes­la.txt Mi­no
[root@ru­bin root]# htpasswd /etc/httpd/conf/hes­la.txt Pe­ter

Uve­de­né prí­ka­zy za­pí­šu do sú­bo­ru hes­la.txt zá­zna­my pre pou­ží­va­te­ľov Mir­ko, Mi­no a Pe­ter. Ob­sah tak­to vy­tvo­re­né­ho sú­bo­ru s hes­la­mi mô­že po­tom vy­ze­rať tak­to:

Jan­ko:UkrjN40BsDI­NI
Mir­ko:XOuCxHHf5qtF6
Mi­no:ygjqcJIdG1qOg
Pe­ter:mE­jOyiYliF8Uc

Me­ná pou­ží­va­te­ľov sú na za­čiat­ku kaž­dé­ho riad­ka, hes­lá sú šif­ro­va­né a od mien sú od­de­le­né dvoj­bod­kou. Keď­že sú hes­lá šif­ro­va­né, ani správ­ca root ne­do­ká­že hes­lo pre­čí­tať. Mô­že ho však zme­niť (tak­že sna­hy pou­ží­va­te­ľov, aby im root pri­po­me­nul za­bud­nu­té hes­lo, sa skon­čia vy­tvo­re­ním no­vé­ho hes­la).

Sku­pi­ny
So sku­pi­na­mi je to inak. Zoz­nam sku­pín sa uvá­dza v pros­tom texto­vom sú­bo­re, nap­rík­lad v /etc/httpd/conf/sku­pi­ny.txt, kto­rý mô­že vy­ze­rať nap­rík­lad tak­to:

mo­de­la­ri: Jan­ko Mir­ko Mi­no Pe­ter
me­cha­ni­ci: Dan­ko Fer­ko

V di­rek­tí­ve AuthGroup­Fi­le uve­die­me ces­tu a me­no toh­to sú­bo­ru. Po­tom už mô­že­me (niek­to­ré ale­bo všet­ky sku­pi­ny pou­žiť v require:

Alias /mo­del "/var/www/mo­del"
<Di­rec­to­ry "/var/www/mo­del">
        Aut­hTy­pe Ba­sic
        Aut­hNa­me “Mo­de­ly“
        Aut­hU­serFil­e “/etc/httpd/conf/hes­la.txt“
	  AuthGroup­Fi­le “/etc/httpd/conf/sku­pi­ny.txt“
        Require group mo­de­la­ri
</Di­rec­to­ry /mo­del>

Po­zor!
Nes­mie­me za­bud­núť, že ak udá­va­me v Require sku­pi­nu, mu­sí­me pou­žiť di­rek­tí­vu AuthGroup­Fi­le aj di­rek­tí­vu Aut­hU­serFil­e, inak by Apa­che ne­ve­del, ako ove­riť hes­lá jed­not­li­vých pou­ží­va­te­ľov.

Pre­hlia­da­nie
Keď po­tom za­dá­me v pre­hlia­da­či ad­re­su náš­ho server­a spo­lu s uve­de­ným ad­re­sá­rom /mo­del, te­da nap­rík­lad www.gmrsnm.edu.sk/mo­del, na ob­ra­zov­ke klien­tske­ho po­čí­ta­ča sa ob­ja­ví ok­no, kto­ré nás vy­zve na auten­ti­zá­ciu (obr. č. 1).

linux_prakticky OBR1.bmp
Obr. 1

Po za­da­ní správ­ne­ho me­na a hes­la sa v pre­hlia­da­či zob­ra­zí ob­sah da­nej webo­vej ad­re­sy (obr. č. 2).

linux_prakticky OBR2.bmp
Obr. 2

V prí­pa­de, že za­dá­me nes­práv­ne hes­lo ale­bo sa bu­de­me po­kú­šať dos­tať tam bez hes­la, v ok­ne pre­hlia­da­ča sa ob­ja­ví hlá­se­nie (obr. č. 3).

linux_prakticky OBR3.bmp
Obr. 3

Tre­ba po­ve­dať, že uve­de­ná me­tó­da auten­ti­zá­cie po­mo­cou mo­du­lu mod_auth je pre svoj sek­venč­ný prís­tup k sú­bo­rom vhod­ná len pre sú­bo­ry do 500 pou­ží­va­te­ľov (čo väč­ši­nou sta­čí). V prí­pa­de, že by sme chce­li pou­ží­vať auten­ti­zá­ciu pre viac pou­ží­va­te­ľov (ti­sí­ce pou­ží­va­te­ľov), mu­sí­me pou­žiť auten­ti­zá­ciu po­mo­cou da­ta­bá­zy a mo­du­lu mod_auth_dbm.

Skry­tie ob­sa­hu ad­re­sá­ra
Apa­che im­pli­cit­ne (keď pre­hlia­dač po­ža­du­je zob­ra­ze­nie ur­či­tej strán­ky, te­da v pod­sta­te vý­pis ad­re­sá­ra v URL) vra­cia ob­sah niek­to­ré­ho zo sú­bo­rov uve­de­ných v di­rek­tí­ve Di­rec­to­ryIn­dex (nap­rík­lad in­dex.html, in­dex.htm, in­dex.shtml, in­dex.php, in­dex,php3, in­dex.cgi a iné uve­de­né). Ak sa ta­ká strán­ka v da­nom ad­re­sá­ro­vom pries­to­re na­chá­dza, bu­de za­sla­ná klien­to­vi a zob­ra­zí sa na ob­ra­zov­ke pre­hlia­da­ča. Ak však da­ná strán­ka neexis­tu­je, v pre­hlia­da­či sa zob­ra­zí vý­pis všet­kých sú­bo­rov v ad­re­sá­ri vrá­ta­ne skrip­tov a hla­vič­ko­vých sú­bo­rov. To­to nie je veľ­mi bez­peč­né. Pre­to je vhod­né, aby sme da­né­mu ad­re­sá­ru (v tom­to prí­pa­de html) vy­pli príz­nak čí­ta­nia pre sku­pi­nu a os­tat­ných pou­ží­va­te­ľov. Naj­prv sa po­zrie­me, aká je sku­toč­nosť. Za­dá­me prí­ka­zy:

[root@ru­bin root]# cd /var/www
[root@ru­bin www ]# ls –ld html

Na ob­ra­zov­ke server­a uvi­dí­me:

drwxr-xr-x    2  apa­che  apa­che    4096   júl 5   20:55   html

Vi­dí­me, že príz­nak čí­ta­nia r je nas­ta­ve­ný pre vlas­tní­ka, sku­pi­nu a os­tat­ných. Te­raz ten­to príz­nak čí­ta­nia pre sku­pi­nu a os­tat­ných od­strá­ni­me prí­ka­zom:

 [root@ru­bin www ]# chmod go -r html
A zno­va skon­tro­lu­je­me prí­ka­zom:
 [root@ru­bin www ]# ls –ld html

A uvi­dí­me:

drwx–-x--x    2  apa­che  apa­che    4096   júl 5   20:55   html

Od­te­raz už nik­to zby­toč­ne neu­vi­dí ob­sah ad­re­sá­ra html.

Na­bu­dú­ce sa bu­de­me ve­no­vať ria­de­niu prís­tu­pu na zá­kla­de to­ho, od­kiaľ po­žia­dav­ka pri­chá­dza.

Ďal­šie čas­ti >>

Zdroj: Infoware 12/2007



Ohodnoťte článok:
 
 
 

24 hodín

týždeň

mesiac

Najnovšie články

Li­nux prak­tic­ky ako server úvod
Linux ako server je pomerne zložitá technológia. Jej výhodou je určitá modularita, keď sa nemusí nastaviť celý server naraz, ale postupne. čítať »
 
Syn­chro­ni­zá­cia ča­su v Li­nuxe
V predchádzajúcich dvoch častiach sme si ukázali, že Linux a všeobecne open source softvér sa nenachádza iba v serveroch a počítačových sieťach, ale aj v iných zariadeniach bežnej domácej potreby a v oblasti hobby. čítať »
 
Za­ria­de­nia za­lo­že­né na Li­nuxe
V predchádzajúcej časti sme si spomenuli definície nie - ktorých pojmov z oblasti nášho záujmu, teda Linuxu. Vysvetlili sme si, čo je to Open Source, Public Domain, proprietárny softvér a GNU GPL. Tentoraz ukážeme, ako sa tieto pojmy využívajú v praxi. čítať »
 
Po­jmy z ob­las­ti
Tentoraz na chvíľu trochu odbočíme od bezpečnosti Linuxu a jeho siete. V tejto neštandardnej časti seriálu sa mu budeme venovať len okrajovo. čítať »
 
Bez­peč­nosť bez­drô­to­vých sie­tí II.
V predchádzajúcej časti sme sa začali zaoberať bezpečnosťou bezdrôtových sietí. Poukázali sme na rôzne faktory zneužitia siete, podstatu rizika a vysvetlili sme základné prvky bezpečnosti. čítať »
 
Bez­peč­nosť bez­drô­to­vých sie­tí I.
V predchádzajúcich častiach sme sa venovali bezpečnosti linuxového servera. Riešili sme firewall, bezpečnosť prístupu na internet, zaoberali sme sa demilitarizovanou zónou a podobne. čítať »
 
Údr­žba lo­gov – kon­fi­gu­rá­cia log­ro­ta­te
V predchádzajúcej časti sme sa venovali rotácii logov. Vysvetlili sme princíp ukladania logov, spôsob, ako sa rotujú, a uviedli sme niečo o tom, čo a ako treba nastaviť čítať »
 
Údr­žba lo­gov – ro­tá­cia
V predošlej časti sme sa zaoberali spôsobom logovania informácií na iný alebo vzdialený počítač a ukázali sme, ako riešiť problém s logovaním uzavretých procesov pomocou chroot. čítať »
 
 
 
  Zdieľaj cez Facebook Zdieľaj cez Google+ Zdieľaj cez Twitter Zdieľaj cez LinkedIn Správy z RSS Správy na smartfóne Správy cez newsletter