Apache/PHP saugumo priemon�s
- Spausdinti
- 2008-10-28
- Nekategorizuota
- 4946 Peržiūros
- 2 komentarai
Apache � tai atvirojo kodo HTTP serveris, naudojamas Unix ir Windows aplinkose, kuris aptarnauja daugiau nei pus� pasaulio internetini� svetaini�.
PHP � (Hypertext Preprocessor) � internet� orientuota skript� kalba, kuri� galima �terpti � HTML tarp speciali� ?ymi�, pvz.: , . PHP skriptas yra interpretuojamas ir vykdomas serverio pus�je, tod�l vartotojas gauna rezultat� (HTML ar XML formatu) savo nar?ykl�je, ne?inodamas koks kodas buvo �vykdytas.
PHP � Apache gali b�ti �kompiliuotas kaip modulis (stati?kai), u?krautas kaip dinaminis modulis arba leid?iamas kaip CGI skriptas. Kai PHP naudojamas kaip Apache modulis (dinaminis ar statinis), jis paveldi Apache vartotojui (�nobody�) skirtus leidimus. Skirtingiems vartotojams priklausantys PHP skriptai vykdomi su tomis pa�iomis (�nobody�) teis�mis, tod�l gali atsirasti saugumo problemos. Jei vartotojo PHP skriptas naudojamas pri�jimui prie failo, jis turi b�ti prieinamas �nobody� vartotojui. Kitas vartotojas taip pat gali para?yti PHP skript� ir prieiti prie svetim� fail�, netgi jei OS priemon�mis tokia prieiga n�ra leid?iama sistemos vartotojams (chroot priemon�mis).
Skripto, atidaran�io ir parodan�io �/etc/passwd� fail�, pavyzdys:
$handle = fopen("/etc/passwd", "r");
while (!feof($handle)) {
$buffer = fgets($handle, 4096);
echo $buffer;
}
fclose($handle);
?>
Tokiu pat principu gali b�ti perskaitytas kito vartotojo tinklapi� slapta?od?i� failas (.htpasswd), PHP arba CGI skriptas, su duomen� bazi� slapta?od?iais ir pan.
Standarti?kai pagrindin� serverio konfig�racija httpd.conf faile neriboja prieigos prie fail�, tod�l vartotojas negali apsaugoti savo informacijos nuo kit� vartotoj�.
?i� prieigos problem� galima i?spr�sti derinant kelet� saug� didinan�i� priemoni�:
1. open_basedir direktyv�
2. safe_mode nustatym�
3. Apache autentifikacij�, autorizacij� ir pri�jimo kontrol�
4. .htaccess fail�
5. apsaug� nuo cURL funkcij�
Saugos problem� sprendimo b�dai
1. open_basedir
open_basedir direktyva apriboja katalogus, prie kuri� gali prieiti PHP skriptas. Naudojant open_basedir, leid?iama prieiti tik prie fail�, esan�i� nurodytoje katalog� med?io vietoje.
Kai skriptas bando atidaryti fail� fopen() ar gzopen() funkcijomis, patikrinama failo buvimo vieta. Jei failas yra nurodyto katalog� med?io i?or�je, PHP jo neatidarys. ?is apribojimas galioja ir simbolin�ms nuorodoms � jei nuoroda rodo u? open_basedir katalog� med?io, pri�jimas bus draud?iamas. open_basedir keliai nuo t�vini� katalog� yra automati?kai paveldimi.
Apribojimas nurodomas su open_basedir yra prefiksas, bet ne katalogo pavadinimas. Tai rei?kia, kad �open_basedir = /dir/incl� leid?ia pasiekti ir �/dir/include� bei �/dir/incls�, jei tokie egzistuoja. Norint, kad b�t� galima prieiti prie fail�, esan�i� tik nurodytoje direktorijoje, pabaigoje reikia prid�ti �/� (open_basedir = /dir/incl/).
Pvz.: httpd.conf failas:
DocumentRoot /home/vaida/public_html/Naktis
ServerName www.serveris.litnet.lt
php_admin_value open_basedir /home/vaida/public_html/Naktis/
Speciali reik?m� �.� parodo, jog darbin� skripto direktorija bus naudojama kaip pagrindin� direktorija. Tai n�ra saugu, kadangi skripto darbin� direktorija gali b�ti pakeista naudojant chdir() funkcij�, tod�l tokio nustatymo naudoti nerekomenduojame.
?i direktyva nepriklauso nuo direktyvos safe_mode nustatymo.
Tam tikriems virtualiems serveriams open_basedir gali b�ti i?jungta, httpd.conf faile naudojant direktyv�:
php_admin_value open_basedir none
2. safe_mode
PHP direktyva �safe_mode� padeda i?spr�sti saugumo problem�, kai serveriu dalinasi keli vartotojai.
Kai safe_mode aktyvuota, PHP tikrina ar paleisto skripto savininkas sutampa su atidaromo failo savininku. Jei savininkai nesutampa, arba skriptas yra ne failo savininko direktorijoje, sugeneruojamas klaidos prane?imas ir skriptas sustabdomas.
Standarti?kai safe_mode v�liav�lei priskiriama reik?m� �0� (re?imas i?jungtas). D�l saugumo u?tikrinimo, safe_mode tur�t� b�ti aktyvuota.
� safe_mode aktyvavimas visam serveriui, php.ini faile
safe_mode = On
� safe_mode aktyvavimas vienam konkre�iam virtualiam serveriui, httpd.conf faile:
php_admin_value safe_mode On
Jei tam tam tikram skriptui reikalinga prieiti prie failo, priklausan�io kitam vartotojui, neb�tina safe_mode re?imo i?jungti visam serveriui. Tok� i?jungim� galima padaryti vieno virtualaus serverio kontekste naudojant vien� i? ?i� direktyv�:
php_admin_flag safe_mode Off
php_admin_value safe_mode 0
3. Apache autentifikacija, autorizacija ir pri�jimo kontrol�
Autorizacija, autentifikacija, pri�jimo kontrol� - trys skirtingi b�dai nuspr�sti ar vartotojui davus u?klausa � resurs�, jam tas resursas bus gr�?intas.
� Autentifikacija reikalinga vartotojo tapatybei identifikuoti. Ji susieja vartotojo vard� ir slapta?od�.
� Autorizacija nustato ar jau identifikuotas vartotojas turi teis� prieiti prie resurso. Autorizacijos metu tikrinama ar vartotojas priklauso tok� leidim� turin�iai grupei, ar yra tinkamas jo saugumo lygis.
� Pri�jimo kontrol� yra bendresnis pri�jimo prie tinklo resurs� kontroliavimo b�das. Pri�jimas gali b�ti suteiktas arba atmestas atsi?velgiant � daugyb� kriterij�, pvz.: kliento tinklo adres�.
Daugeliu atveju ?ios technikos yra susijusios, tod�l naudojamos kartu. J� pagalba galima pri�jim� prie tam tikr� resurs� leisti tik tam tikriems vartotojams.
Prie? naudojant autentifikacij� turi b�ti sukurtas slapta?od?i� failas ir tinkamai pakeista serverio konfig�racija. Taip pat galima susikurti vartotoj� grupi� fail�. Slapta?od?i� failo k�rimas:
htpasswd c ~/passwords/.htpasswd username
�vykd?ius komand�, htpasswd papra?ys �vesti slapta?od� ir j� pakartoti.
htpasswd � Apache paketo programa slapta?od?i� failo k�rimui.
� Parametras �c naudojamas failo k�rimui. Jo nereikia nurodyti, pridedant naujus vartotojus � jau egzistuojant� slapta?od?i� fail�;
� ~/passwords/.htpasswd � slapta?od?i� failas;
� username - vartotojo vardas, �traukiamas � slapta?od?i� fail� k�rimo metu.
Naujo vartotojo �traukimas � jau egzistuojant� fail� (be �c parametro):
htpasswd ~/passwords/.htpasswd admin
Slapta?od?iai faile saugomi u??ifruota forma.
Slapta?od?i� failas turi b�ti skaitomas-ra?omas tik savininkui, ir skaitomas tik apache procesui (vartotojui nobody). Tai galima padaryti suteikiant failui teises 640, ir nobody vartotoj� padarant vartotojo grup�s nariu (ta�iau joks kitas sistemos vartotojas neturi b�ti vartotojo grup�s nariu!).
Pavyzd?iui:
Administratorius:
root@server:~# usermod g vartotojas nobody
Vartotojas:
vartotojas@server:~$ htpasswd -c passwords/password.file draugas
New password:
Re-type new password:
Adding password for user draugas
vartotojas@server:~$ chmod 640 passwords/password.file
vartotojas@server:~$ ls l passwords
total 4
-rw-r-----1 vartotojas vartotojas 22 Jun 23 14:41 password.file
Konfig�racijos pakeitimas, kad b�t� kreipiamasi � slapta?od?i� fail�:
AuthType Basic
AuthName "Administratoriai"
AuthUserFile /home/user/passwords/.htpasswd
Require user vaida admin
?ios direktyvos gali b�ti saugomos .htaccess faile tam tikroje apsaugotoje direktorijoje arba serverio konfig�raciniame faile httpd.conf skirsnyje. Jei konfig�racija kei�iama httpd.conf faile, Apache reikia perkrauti, jei �keliama � .htaccess fail�, jos pradeda galioti i? karto. Pri�jimo prie resurs� leidimas suteikiamas tik nurodytiems vartotojams ir tik �vedus teisingus slapta?od?ius.
Jei norima autentifikuoti grup� vartotoj�, kuriamas grup�s failas, kuriame i?vardinami grupei priklausantys vartotojai (atskiriami tarpo simboliu), Pvz.: admin vaida guest
Konfig�racija pakei�iama taip:
AuthType Basic
AuthName "Autoriai"
AuthUserFile /home/user/passwords/.htpasswd
AuthGroupFile /home/user/passwords/.htgroup
Require group authors
Pri�jimo kontrolei naudojamos Allow ir Deny direktyvos, kurios kontroliuoja pri�jim� prie resurs� pagal besikreipian�io vartotojo hosto vard� ar hosto adres�.
Direktyva Order nurodo Apache kokia tvarka kreiptis � filtrus.
Pvz.:
Order Deny,Allow
Deny from all
Allow from hostovardas.pavyzdys.com
4. .htaccess failai
.htaccess failai leid?ia nustatyti specifinius parametrus atskiriems katalogams. Faile b�na viena ar daugiau konfig�racini� direktyv�. Jis saugomas tam tikrame kataloge, ir direktyvos taikomos tam katalogui bei jo subkatalogams. Pri�jimo kontrol�s failo pavadinimas nurodomas httpd.conf faile AccessFileNamedirektyvoje: AccessFileName .htaccess . Standartin� failo vard� galima pakeisti.
Kokius nurodymus galima �ra?yti � .htaccess fail�, apibr�?ia AllowOverride direktyva. AllowOverride direktyvos sintaks�:
AllowOverride All|None|directive-type [directive-type].
AllowOverride galima nurodyti tik katalogui, bet ne vietai ar failui. Kai direktyvai nustatoma reik?m�None, .htaccess failas yra ignoruojamas, serveris jo neskaito.
Mus dominantys direktyv� tipai yra AuthConfig, leid?iantis naudoti autorizacijos direktyvas (pvz.: AuthName, AuthType, Require), ir Limit, leid?iantis naudoti direktyvas, kurios kontroliuoja pri�jim� prie kompiuterio (Allow, Deny, Order)
Direktyvos naudojimo pavyzdys: AllowOverride AuthConfig Limit
Autentifikacijos vykdymas .htaccess faile:
AuthType Basic
AuthName "Password Required"
AuthUserFile /home/vartotojas/passwords/password.file
Require valid-user
.htaccess fail� reik�t� naudoti tik tuo atveju, kai norima da?nai pakeisti konfig�racij� atskirose direktorijose arba n�ra galimyb�s prieiti prie httpd.conf failo. Tuomet vartotojams suteikiama galimyb� patiems keisti katalogo konfig�racij� (pvz.: jei internetini� paslaug� teik�jas talpina daug skirting� vartotoj� svetaini� viename kompiuteryje, jis gali nor�ti, kad vartotojai patys keist� konfig�racij�).
.htaccess naudojimo reikia vengti d�l na?umo ir saugumo problem�.
Na?umo problema. Kai nustatoma AllowOverride, leid?ianti naudoti .htaccess failus, Apache .htaccess fail� ie?kos kiekviename kataloge. Apache ie?ko .htaccess fail� visuose auk?tesniuose kataloguose tam, kad ?inot� visas direktyvas, kurias turi vykdyti. Taigi, jei � fail� kreipiamasi i? katalogo /www/htdocs/pavyzdys, Apache tur�s ie?koti ir ?i� fail�:
/.htaccess
/www/.htaccess
/www/htdocs/.htaccess
/www/htdocs/pavyzdys/.htaccess
Vadinasi, kiekvienam pri�jimui i? to katalogo reikalingi keturi papildomi kreipiniai ir .htaccess failai yra skaitomi kiekvien� kart�, kai tik kreipiamasi � dokument�. Tod�l naudojant .htaccess failus suma?�ja na?umas nepriklausomai nuo to, ar jie i? tikr�j� egzistuoja. B�tina kaip galima daugiau apriboti direktorijas, kuriose ie?koma .htaccess failo. Pvz.:
AllowOverride None
AllowOverride FileInfo AuthConfig Limit
Pagal ?ias direktyvas, .htaccess failai neie?komi niekur, i?skyrus vartotoj� public_html katalogus.
Saugumo problema. Suteikiant vartotojams leidim� keisti serverio konfig�racij� kyla gr�sm�, kad bus atlikta pakeitim�, kuri� negal�s kontroliuoti serverio administratorius.
Bet koks konfig�racijos pakeitimas lygiai taip pat efektyviai gali b�ti daromas skirsnyje pagrindiniame serverio konfig�racijos faile httpd.conf. Pavyzd?iui:
/www/virtuals/server1/htaccess faile para?yta direktyva
AddType text/pavyzdys .exm
yra ekvivalentus �ra?as httpd.conf faile:
AddType text/pavyzdys .exm
Autentifikacijos direktyvas rekomenduojama para?yti httpd.conf faile, o .htaccess naudoti tik tuo atveju, jei n�ra pri�jimo prie pagrindinio serverio konfig�racinio failo.
5. Apsauga nuo cURL funkcij�
open_basedir direktyvos teikiamas saugumas gali b�ti pa?eistas naudojant CURL funkcijas curl_init() ir curl_exec(), kurios PHP skriptui gali leisti prieiti prie fail�, esan�i� open_basedir priskirtos direktorijos i?or�je. Vartotojai, turintys teis� kurti ir modifikuoti PHP skriptus, gali apeiti open_basedir apribojim� ir nar?yti po vis� fail� sistem�.
Pvz.: jei php.ini faile open_basedir = /var/www/html, galima perskaityti /etc/passwd pasinaudojus cURL funkcijomis.
curl.php:
$ch = curl_init("file:///etc/passwd");
$file=curl_exec($ch);
echo $file
?>
/etc/passwd turin� galima pamatyti �vykd?ius komand�
links -dump http://www.kazkoksserveris.lt/curltest/curl.php
Toks pa?eid?iamumas pasteb�tas PHP 4.3.8 versijoje su CURL 7.10.6, ta�iau jis gali pasireik?ti ir kitose versijose.
Apsisaugojimas:
1. u?drausti cURL funkcij� palaikym� PHP.
2. pasinaudoti programos taisiniu (patch):
3. diff -ru php4-4.3.10.old/ext/curl/curl.c php4-4.3.10/ext/curl/curl.c
4. --- php4-4.3.10.old/ext/curl/curl.c 2005-01-20 14:20:15.000000000 +0000
5. +++ php4-4.3.10/ext/curl/curl.c 2005-01-20 15:34:06.000000000 +0000
6. @@ -682,6 +682,14 @@
7. WRONG_PARAM_COUNT;
8. }
9. + /* check open_basedir restriction */
10. + {
11. + char *u = Z_STRVAL_PP(url);
12. + if(!u || (!strncmp(u, "file://",7) && php_check_open_basedir((u+7) TSRMLS_CC)))
13. + RETURN_FALSE;
14. + }
15. alloc_curl_handle(&ch);
ch->cp = curl_easy_init();
________________________________________
PRIEDAI
I. Virtuali� host� k�rimas Apache serveryje. Virtual�s hostai gali b�ti kuriami trimis skirtingais b�dais pagal:
1. skirtingus portus
2. skirtingus IP adresus
3. skirtingus vardus
Galimas ir mi?rus b�das derinant i?vardintus b�dus tarpusavyje. Virtuali� host� (pagal skirtingus portus) suk�rimas httpd.conf faile:
Listen 80
Listen 8080
NameVirtualHost 111.22.33.44:80
NameVirtualHost 111.22.33.44:8080
DocumentRoot /home/vaida/public_html/Diena
ServerName server.litnet.lt
DocumentRoot /home/vaida/public_html/Naktis
ServerName server.litnet.lt
II. CURL
CURL Client URL bibliotekos funkcijos
PHP palaiko liburl � bibliotek�, kuri leid?ia prisijungti prie severi�, naudojan�i� �vairius protokolus. libcurl palaiko ?iuos protokolus: http, https, ftp, gopher, telnet, dict, file, ldap. ?ios funkcijos �d�tos � PHP 4.0.2.
Reikalavimai
Norint naudotis CURL funkcijomis, reikia suinstaliuoti CURL paket�.
� PHP 4.2.3 � CURL 7.9.0 ar auk?tesn� versij�
� PHP 4.3.0 � CURL 7.9.8 ar auk?tesn� versij�
� PHP 5.0.0 � CURL versij�, auk?tesn� nei 7.10.5
Instaliavimas
Norint naudotis CURL, reikia sukompiliuoti PHP su parametru curl[=DIR], kur DIR yra vieta tos direktorijos, kurioje saugomos �lib� ir �include� direktorijos. �include� direktorijoje yra katalogas �curl�, kuriame saugomi easy.h ir curl.h failai. �lib� direktorijoje yra �libcurl.a� failas. Pradedant nuo PHP 4.3.0 versijos, PHP galima sukonfig�ruoti taip, kad CURL b�t� galima naudoti URL srautams --with-curlswrappers.
Naudojimas
Kai sukompiliuojamas PHP su CURL palaikymu, galima prad�ti naudoti CURL funkcijas. Pagrindin� id�ja pagr�sta tokiais ?ingsniais:
1. Inicijuojama CURL sesija, naudojant curl_init()
2. Nustatomi parametrai siuntimui, naudojant curl_setopt()
3. Vykdoma sesija, naudojant curl_exec()
4. Baigiama sesija, naudojant curl_close()
curl_init - inicijuoja CURL sesij�
Apib�dinimas: curl_init() inicijuoja nauj� sesij� ir gr�?ina atsakym�, kuris bus naudojamas curl_setopt, curl_exec() ir curl_close funkcijose. Jei neprivalomas parametras urlnurodytas, CURLOPT_URL parametras nustatomas toks, kokia yra parametro vert� (automati?kai). Tai galima nustatyti ir rankiniu b�du, naudojant curl_setopt() funkcij�.
curl_exec - vykdo CURL sesij�
Apib�dinimas: ?i funkcija i?kvie�iama po to, kai inicijuojama CURL sesija ir visos opcijos tai sesijai nustatytos. Jos paskirtis yra papras�iausiai vykdyti anks�iau apibr�?t� CURL sesij� (paduodam� per ch).
Pvz.: naujos CURL sesijos inicijavimas ir svetain�s �k�limas � fail�
<$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://www.example.com/");
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_exec($ch);
curl_close($ch);
?>
Pagal: http://cert.litnet.lt, nuoroda i straipsni - http://cert.litnet.lt/dokumentai/apache_php_security.html
PHP � (Hypertext Preprocessor) � internet� orientuota skript� kalba, kuri� galima �terpti � HTML tarp speciali� ?ymi�, pvz.: , . PHP skriptas yra interpretuojamas ir vykdomas serverio pus�je, tod�l vartotojas gauna rezultat� (HTML ar XML formatu) savo nar?ykl�je, ne?inodamas koks kodas buvo �vykdytas.
PHP � Apache gali b�ti �kompiliuotas kaip modulis (stati?kai), u?krautas kaip dinaminis modulis arba leid?iamas kaip CGI skriptas. Kai PHP naudojamas kaip Apache modulis (dinaminis ar statinis), jis paveldi Apache vartotojui (�nobody�) skirtus leidimus. Skirtingiems vartotojams priklausantys PHP skriptai vykdomi su tomis pa�iomis (�nobody�) teis�mis, tod�l gali atsirasti saugumo problemos. Jei vartotojo PHP skriptas naudojamas pri�jimui prie failo, jis turi b�ti prieinamas �nobody� vartotojui. Kitas vartotojas taip pat gali para?yti PHP skript� ir prieiti prie svetim� fail�, netgi jei OS priemon�mis tokia prieiga n�ra leid?iama sistemos vartotojams (chroot priemon�mis).
Skripto, atidaran�io ir parodan�io �/etc/passwd� fail�, pavyzdys:
$handle = fopen("/etc/passwd", "r");
while (!feof($handle)) {
$buffer = fgets($handle, 4096);
echo $buffer;
}
fclose($handle);
?>
Tokiu pat principu gali b�ti perskaitytas kito vartotojo tinklapi� slapta?od?i� failas (.htpasswd), PHP arba CGI skriptas, su duomen� bazi� slapta?od?iais ir pan.
Standarti?kai pagrindin� serverio konfig�racija httpd.conf faile neriboja prieigos prie fail�, tod�l vartotojas negali apsaugoti savo informacijos nuo kit� vartotoj�.
?i� prieigos problem� galima i?spr�sti derinant kelet� saug� didinan�i� priemoni�:
1. open_basedir direktyv�
2. safe_mode nustatym�
3. Apache autentifikacij�, autorizacij� ir pri�jimo kontrol�
4. .htaccess fail�
5. apsaug� nuo cURL funkcij�
Saugos problem� sprendimo b�dai
1. open_basedir
open_basedir direktyva apriboja katalogus, prie kuri� gali prieiti PHP skriptas. Naudojant open_basedir, leid?iama prieiti tik prie fail�, esan�i� nurodytoje katalog� med?io vietoje.
Kai skriptas bando atidaryti fail� fopen() ar gzopen() funkcijomis, patikrinama failo buvimo vieta. Jei failas yra nurodyto katalog� med?io i?or�je, PHP jo neatidarys. ?is apribojimas galioja ir simbolin�ms nuorodoms � jei nuoroda rodo u? open_basedir katalog� med?io, pri�jimas bus draud?iamas. open_basedir keliai nuo t�vini� katalog� yra automati?kai paveldimi.
Apribojimas nurodomas su open_basedir yra prefiksas, bet ne katalogo pavadinimas. Tai rei?kia, kad �open_basedir = /dir/incl� leid?ia pasiekti ir �/dir/include� bei �/dir/incls�, jei tokie egzistuoja. Norint, kad b�t� galima prieiti prie fail�, esan�i� tik nurodytoje direktorijoje, pabaigoje reikia prid�ti �/� (open_basedir = /dir/incl/).
Pvz.: httpd.conf failas:
DocumentRoot /home/vaida/public_html/Naktis
ServerName www.serveris.litnet.lt
php_admin_value open_basedir /home/vaida/public_html/Naktis/
Speciali reik?m� �.� parodo, jog darbin� skripto direktorija bus naudojama kaip pagrindin� direktorija. Tai n�ra saugu, kadangi skripto darbin� direktorija gali b�ti pakeista naudojant chdir() funkcij�, tod�l tokio nustatymo naudoti nerekomenduojame.
?i direktyva nepriklauso nuo direktyvos safe_mode nustatymo.
Tam tikriems virtualiems serveriams open_basedir gali b�ti i?jungta, httpd.conf faile naudojant direktyv�:
php_admin_value open_basedir none
2. safe_mode
PHP direktyva �safe_mode� padeda i?spr�sti saugumo problem�, kai serveriu dalinasi keli vartotojai.
Kai safe_mode aktyvuota, PHP tikrina ar paleisto skripto savininkas sutampa su atidaromo failo savininku. Jei savininkai nesutampa, arba skriptas yra ne failo savininko direktorijoje, sugeneruojamas klaidos prane?imas ir skriptas sustabdomas.
Standarti?kai safe_mode v�liav�lei priskiriama reik?m� �0� (re?imas i?jungtas). D�l saugumo u?tikrinimo, safe_mode tur�t� b�ti aktyvuota.
� safe_mode aktyvavimas visam serveriui, php.ini faile
safe_mode = On
� safe_mode aktyvavimas vienam konkre�iam virtualiam serveriui, httpd.conf faile:
php_admin_value safe_mode On
Jei tam tam tikram skriptui reikalinga prieiti prie failo, priklausan�io kitam vartotojui, neb�tina safe_mode re?imo i?jungti visam serveriui. Tok� i?jungim� galima padaryti vieno virtualaus serverio kontekste naudojant vien� i? ?i� direktyv�:
php_admin_flag safe_mode Off
php_admin_value safe_mode 0
3. Apache autentifikacija, autorizacija ir pri�jimo kontrol�
Autorizacija, autentifikacija, pri�jimo kontrol� - trys skirtingi b�dai nuspr�sti ar vartotojui davus u?klausa � resurs�, jam tas resursas bus gr�?intas.
� Autentifikacija reikalinga vartotojo tapatybei identifikuoti. Ji susieja vartotojo vard� ir slapta?od�.
� Autorizacija nustato ar jau identifikuotas vartotojas turi teis� prieiti prie resurso. Autorizacijos metu tikrinama ar vartotojas priklauso tok� leidim� turin�iai grupei, ar yra tinkamas jo saugumo lygis.
� Pri�jimo kontrol� yra bendresnis pri�jimo prie tinklo resurs� kontroliavimo b�das. Pri�jimas gali b�ti suteiktas arba atmestas atsi?velgiant � daugyb� kriterij�, pvz.: kliento tinklo adres�.
Daugeliu atveju ?ios technikos yra susijusios, tod�l naudojamos kartu. J� pagalba galima pri�jim� prie tam tikr� resurs� leisti tik tam tikriems vartotojams.
Prie? naudojant autentifikacij� turi b�ti sukurtas slapta?od?i� failas ir tinkamai pakeista serverio konfig�racija. Taip pat galima susikurti vartotoj� grupi� fail�. Slapta?od?i� failo k�rimas:
htpasswd c ~/passwords/.htpasswd username
�vykd?ius komand�, htpasswd papra?ys �vesti slapta?od� ir j� pakartoti.
htpasswd � Apache paketo programa slapta?od?i� failo k�rimui.
� Parametras �c naudojamas failo k�rimui. Jo nereikia nurodyti, pridedant naujus vartotojus � jau egzistuojant� slapta?od?i� fail�;
� ~/passwords/.htpasswd � slapta?od?i� failas;
� username - vartotojo vardas, �traukiamas � slapta?od?i� fail� k�rimo metu.
Naujo vartotojo �traukimas � jau egzistuojant� fail� (be �c parametro):
htpasswd ~/passwords/.htpasswd admin
Slapta?od?iai faile saugomi u??ifruota forma.
Slapta?od?i� failas turi b�ti skaitomas-ra?omas tik savininkui, ir skaitomas tik apache procesui (vartotojui nobody). Tai galima padaryti suteikiant failui teises 640, ir nobody vartotoj� padarant vartotojo grup�s nariu (ta�iau joks kitas sistemos vartotojas neturi b�ti vartotojo grup�s nariu!).
Pavyzd?iui:
Administratorius:
root@server:~# usermod g vartotojas nobody
Vartotojas:
vartotojas@server:~$ htpasswd -c passwords/password.file draugas
New password:
Re-type new password:
Adding password for user draugas
vartotojas@server:~$ chmod 640 passwords/password.file
vartotojas@server:~$ ls l passwords
total 4
-rw-r-----1 vartotojas vartotojas 22 Jun 23 14:41 password.file
Konfig�racijos pakeitimas, kad b�t� kreipiamasi � slapta?od?i� fail�:
AuthType Basic
AuthName "Administratoriai"
AuthUserFile /home/user/passwords/.htpasswd
Require user vaida admin
?ios direktyvos gali b�ti saugomos .htaccess faile tam tikroje apsaugotoje direktorijoje arba serverio konfig�raciniame faile httpd.conf
Jei norima autentifikuoti grup� vartotoj�, kuriamas grup�s failas, kuriame i?vardinami grupei priklausantys vartotojai (atskiriami tarpo simboliu), Pvz.: admin vaida guest
Konfig�racija pakei�iama taip:
AuthType Basic
AuthName "Autoriai"
AuthUserFile /home/user/passwords/.htpasswd
AuthGroupFile /home/user/passwords/.htgroup
Require group authors
Pri�jimo kontrolei naudojamos Allow ir Deny direktyvos, kurios kontroliuoja pri�jim� prie resurs� pagal besikreipian�io vartotojo hosto vard� ar hosto adres�.
Direktyva Order nurodo Apache kokia tvarka kreiptis � filtrus.
Pvz.:
Order Deny,Allow
Deny from all
Allow from hostovardas.pavyzdys.com
4. .htaccess failai
.htaccess failai leid?ia nustatyti specifinius parametrus atskiriems katalogams. Faile b�na viena ar daugiau konfig�racini� direktyv�. Jis saugomas tam tikrame kataloge, ir direktyvos taikomos tam katalogui bei jo subkatalogams. Pri�jimo kontrol�s failo pavadinimas nurodomas httpd.conf faile AccessFileNamedirektyvoje: AccessFileName .htaccess . Standartin� failo vard� galima pakeisti.
Kokius nurodymus galima �ra?yti � .htaccess fail�, apibr�?ia AllowOverride direktyva. AllowOverride direktyvos sintaks�:
AllowOverride All|None|directive-type [directive-type].
AllowOverride galima nurodyti tik katalogui, bet ne vietai ar failui. Kai direktyvai nustatoma reik?m�None, .htaccess failas yra ignoruojamas, serveris jo neskaito.
Mus dominantys direktyv� tipai yra AuthConfig, leid?iantis naudoti autorizacijos direktyvas (pvz.: AuthName, AuthType, Require), ir Limit, leid?iantis naudoti direktyvas, kurios kontroliuoja pri�jim� prie kompiuterio (Allow, Deny, Order)
Direktyvos naudojimo pavyzdys: AllowOverride AuthConfig Limit
Autentifikacijos vykdymas .htaccess faile:
AuthType Basic
AuthName "Password Required"
AuthUserFile /home/vartotojas/passwords/password.file
Require valid-user
.htaccess fail� reik�t� naudoti tik tuo atveju, kai norima da?nai pakeisti konfig�racij� atskirose direktorijose arba n�ra galimyb�s prieiti prie httpd.conf failo. Tuomet vartotojams suteikiama galimyb� patiems keisti katalogo konfig�racij� (pvz.: jei internetini� paslaug� teik�jas talpina daug skirting� vartotoj� svetaini� viename kompiuteryje, jis gali nor�ti, kad vartotojai patys keist� konfig�racij�).
.htaccess naudojimo reikia vengti d�l na?umo ir saugumo problem�.
Na?umo problema. Kai nustatoma AllowOverride, leid?ianti naudoti .htaccess failus, Apache .htaccess fail� ie?kos kiekviename kataloge. Apache ie?ko .htaccess fail� visuose auk?tesniuose kataloguose tam, kad ?inot� visas direktyvas, kurias turi vykdyti. Taigi, jei � fail� kreipiamasi i? katalogo /www/htdocs/pavyzdys, Apache tur�s ie?koti ir ?i� fail�:
/.htaccess
/www/.htaccess
/www/htdocs/.htaccess
/www/htdocs/pavyzdys/.htaccess
Vadinasi, kiekvienam pri�jimui i? to katalogo reikalingi keturi papildomi kreipiniai ir .htaccess failai yra skaitomi kiekvien� kart�, kai tik kreipiamasi � dokument�. Tod�l naudojant .htaccess failus suma?�ja na?umas nepriklausomai nuo to, ar jie i? tikr�j� egzistuoja. B�tina kaip galima daugiau apriboti direktorijas, kuriose ie?koma .htaccess failo. Pvz.:
AllowOverride None
AllowOverride FileInfo AuthConfig Limit
Pagal ?ias direktyvas, .htaccess failai neie?komi niekur, i?skyrus vartotoj� public_html katalogus.
Saugumo problema. Suteikiant vartotojams leidim� keisti serverio konfig�racij� kyla gr�sm�, kad bus atlikta pakeitim�, kuri� negal�s kontroliuoti serverio administratorius.
Bet koks konfig�racijos pakeitimas lygiai taip pat efektyviai gali b�ti daromas
/www/virtuals/server1/htaccess faile para?yta direktyva
AddType text/pavyzdys .exm
yra ekvivalentus �ra?as httpd.conf faile:
AddType text/pavyzdys .exm
Autentifikacijos direktyvas rekomenduojama para?yti httpd.conf faile, o .htaccess naudoti tik tuo atveju, jei n�ra pri�jimo prie pagrindinio serverio konfig�racinio failo.
5. Apsauga nuo cURL funkcij�
open_basedir direktyvos teikiamas saugumas gali b�ti pa?eistas naudojant CURL funkcijas curl_init() ir curl_exec(), kurios PHP skriptui gali leisti prieiti prie fail�, esan�i� open_basedir priskirtos direktorijos i?or�je. Vartotojai, turintys teis� kurti ir modifikuoti PHP skriptus, gali apeiti open_basedir apribojim� ir nar?yti po vis� fail� sistem�.
Pvz.: jei php.ini faile open_basedir = /var/www/html, galima perskaityti /etc/passwd pasinaudojus cURL funkcijomis.
curl.php:
$ch = curl_init("file:///etc/passwd");
$file=curl_exec($ch);
echo $file
?>
/etc/passwd turin� galima pamatyti �vykd?ius komand�
links -dump http://www.kazkoksserveris.lt/curltest/curl.php
Toks pa?eid?iamumas pasteb�tas PHP 4.3.8 versijoje su CURL 7.10.6, ta�iau jis gali pasireik?ti ir kitose versijose.
Apsisaugojimas:
1. u?drausti cURL funkcij� palaikym� PHP.
2. pasinaudoti programos taisiniu (patch):
3. diff -ru php4-4.3.10.old/ext/curl/curl.c php4-4.3.10/ext/curl/curl.c
4. --- php4-4.3.10.old/ext/curl/curl.c 2005-01-20 14:20:15.000000000 +0000
5. +++ php4-4.3.10/ext/curl/curl.c 2005-01-20 15:34:06.000000000 +0000
6. @@ -682,6 +682,14 @@
7. WRONG_PARAM_COUNT;
8. }
9. + /* check open_basedir restriction */
10. + {
11. + char *u = Z_STRVAL_PP(url);
12. + if(!u || (!strncmp(u, "file://",7) && php_check_open_basedir((u+7) TSRMLS_CC)))
13. + RETURN_FALSE;
14. + }
15. alloc_curl_handle(&ch);
ch->cp = curl_easy_init();
________________________________________
PRIEDAI
I. Virtuali� host� k�rimas Apache serveryje. Virtual�s hostai gali b�ti kuriami trimis skirtingais b�dais pagal:
1. skirtingus portus
2. skirtingus IP adresus
3. skirtingus vardus
Galimas ir mi?rus b�das derinant i?vardintus b�dus tarpusavyje. Virtuali� host� (pagal skirtingus portus) suk�rimas httpd.conf faile:
Listen 80
Listen 8080
NameVirtualHost 111.22.33.44:80
NameVirtualHost 111.22.33.44:8080
DocumentRoot /home/vaida/public_html/Diena
ServerName server.litnet.lt
DocumentRoot /home/vaida/public_html/Naktis
ServerName server.litnet.lt
II. CURL
CURL Client URL bibliotekos funkcijos
PHP palaiko liburl � bibliotek�, kuri leid?ia prisijungti prie severi�, naudojan�i� �vairius protokolus. libcurl palaiko ?iuos protokolus: http, https, ftp, gopher, telnet, dict, file, ldap. ?ios funkcijos �d�tos � PHP 4.0.2.
Reikalavimai
Norint naudotis CURL funkcijomis, reikia suinstaliuoti CURL paket�.
� PHP 4.2.3 � CURL 7.9.0 ar auk?tesn� versij�
� PHP 4.3.0 � CURL 7.9.8 ar auk?tesn� versij�
� PHP 5.0.0 � CURL versij�, auk?tesn� nei 7.10.5
Instaliavimas
Norint naudotis CURL, reikia sukompiliuoti PHP su parametru curl[=DIR], kur DIR yra vieta tos direktorijos, kurioje saugomos �lib� ir �include� direktorijos. �include� direktorijoje yra katalogas �curl�, kuriame saugomi easy.h ir curl.h failai. �lib� direktorijoje yra �libcurl.a� failas. Pradedant nuo PHP 4.3.0 versijos, PHP galima sukonfig�ruoti taip, kad CURL b�t� galima naudoti URL srautams --with-curlswrappers.
Naudojimas
Kai sukompiliuojamas PHP su CURL palaikymu, galima prad�ti naudoti CURL funkcijas. Pagrindin� id�ja pagr�sta tokiais ?ingsniais:
1. Inicijuojama CURL sesija, naudojant curl_init()
2. Nustatomi parametrai siuntimui, naudojant curl_setopt()
3. Vykdoma sesija, naudojant curl_exec()
4. Baigiama sesija, naudojant curl_close()
curl_init - inicijuoja CURL sesij�
Apib�dinimas: curl_init() inicijuoja nauj� sesij� ir gr�?ina atsakym�, kuris bus naudojamas curl_setopt, curl_exec() ir curl_close funkcijose. Jei neprivalomas parametras urlnurodytas, CURLOPT_URL parametras nustatomas toks, kokia yra parametro vert� (automati?kai). Tai galima nustatyti ir rankiniu b�du, naudojant curl_setopt() funkcij�.
curl_exec - vykdo CURL sesij�
Apib�dinimas: ?i funkcija i?kvie�iama po to, kai inicijuojama CURL sesija ir visos opcijos tai sesijai nustatytos. Jos paskirtis yra papras�iausiai vykdyti anks�iau apibr�?t� CURL sesij� (paduodam� per ch).
Pvz.: naujos CURL sesijos inicijavimas ir svetain�s �k�limas � fail�
<$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://www.example.com/");
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_exec($ch);
curl_close($ch);
?>
Pagal: http://cert.litnet.lt, nuoroda i straipsni - http://cert.litnet.lt/dokumentai/apache_php_security.html
Rašyti komentarą
Turite prisijungti, norėdami parašyti komentarą.
Kad ilgai sakityt :D
Sveiki gal galetumete padeti sita viska padaryt web mano. mano skype dowyxz11