Internet ogledalo magazine: Apache Web Server (2) Apache Web Server (2) ================================================================================ Aleksandar Babović on 29/05/2009 03:08:00 Apache omogućuje zabranu gledanja sadržaja određenih direktorijuma svima, osim onima koji znaju pristupnu šifru. Mi ćemo pažnju fokusirati na postupak postavljanja osnovne autorizacije za određeni direktorijum ili Web stranicu. Kao što se iz naziva može zaključiti, osnovna autorizacija je najjednostavnija metoda postavljanja zaštite. Koristi se vrlo često. Princip rada osnovne autorizacije je krajnje jednostavan: zasniva se na otvaranju prozora u koji se upisuje korisničko ime i šifra kada se u Web pretraživaču pozove zaštićena stranica. Ukoliko korisnik zna tačno korisničko ime i šifru može nastaviti sa učitavanjem stranice; u suprotnom Apache server mu to neće dozvoliti. Konfiguracija autorizacije Postoje dva načina na koji se ovakva autorizacija može ostvariti. Ako administrator postavlja autorizaciju, on može upisivati naredbe unutar httpd.conf datoteke, dok ostali korisnici uglavnom nemaju ovlašćenja za to. Zato za ostale korisnike postoji mogućnost stvaranja .htaccess datoteke unutar bilo kojeg direktorijuma koji se želi zaštititi. Unutar .htaccess datoteke mogu se staviti i druge naredbe koje nisu vezane za autorizaciju već za konfiguraciju ponašanja Apache servera, ali ne sve (npr. ServerName). Najveća prednost u odnosu na pisanje naredbi unutar httpd.conf je što nakon pisanja naredbi u .htaccess datoteku Apache ne treba resetovati da bi novoupisane naredbe bile važeće. Potrebno je napomenuti da se naredbe upisane u .htaccess datoteku odnose na direktorijum u kom se ona nalazi, kao i sve poddirektorijume. Naime, Apache prilikom ulaska u direktorijum, pre nego što pošalje podatke Web browseru, traži datoteku .htaccess, pa u slučaju da je nađe sledi naredbe upisane u njoj, dok u suprotnom sledi naredbe upisane u httpd.conf. Da bi ovakav način ispravno funkcionisao u httpd.conf datoteci ne sme postojati linija: Allow Override None Navedenu liniju potrebno je izbrisati ili na nju postaviti komentar tako da postane nevažeća. U slučaju da navedena linija postoji Apache neće traži datoteku .htaccess; sve što je upisano u .htaccess neće važiti, pa stoga ni autorizacija neće raditi. Pri postavljanju autorizacije prvi korak je stvaranje datoteke u kojoj će biti upisani korisnici koji imaju dozvolu pristupa zaštićenim dokumentima. Potrebno je napraviti direktorijum /usr/local/apache/passwd u kom će biti smeštena passwords datoteka. # mkdir /usr/local/apache/passwd Stvaranje nove datoteke izvodi se naredbom htpasswd. Treba se pozicionirati u direktorijum /usr/local/apache/bin i “otkucati”: # ./htpasswd -c /usr/local/apache/passwd/passwords ime_korisnika posle čega ćemo biti upitani za šifru i potvrdu šifre. Nakon pravilnog unosa šifre stvorena je datoteka passwords u kojoj su upisani ime korisnika i šifra u enkriptovanom (zaštićenom) obliku. Potrebno je napomenuti da opcija -c (od reči Create) znači stvaranje datoteke ukoliko datoteka ne postoji. Ukoliko već postoji, postojeća datoteka će biti prebrisana. Za dodavanje novog korisnika ponoviti opisani postupak, ali bez opcije -c. Datoteku sa smeštenim korisnicima potrebno je zaštititi od neovlašćenog pristupa. Ukoliko je Apache Web Server konfigurisan da se pokreće kao korisnik nobody i grupa nogroup poželjno je “otkucati”: # chown nobody.nogroup /usr/local/apache/passwd/passwords # chmod 640 /usr/local/apache/passwd/passwords čime je dozvoljen pristup samo korisniku nobody i grupi nogroup, tj. Apache Web Serveru. Sledeći korak je konfigurisanje Apache servera da koristi passwords datoteku. Konfigurisanje se izvodi sledećim naredbama: AuthType - tip autorizacije koja se koristi (u ovom slučaju Basic) AuthName - me autorizacije (ispisuje se na prozoru koji se pojavljuje) AuthUserFile - lokacija datoteke sa šiframa korisnika AuthGroupFile - lokacija datoteke sa šiframa grupe, ako se koristi Require Zahtevi koji moraju biti ispunjeni da bi se zadovoljila autorizacija Kako je već ranije rečeno, ove naredbe mogu se smestiti u datoteku .htaccess ili u httpd.conf pod sekcijom . Navešćemo primer postavljanja osnovne autorizacije za direktorijum /usr/local/apache/htdocs/privatno, upisivanjem u httpd.conf. Primer: AuthType Basic AuthName "Samo za pozvane" AuthUserFile /usr/local/apache/passwd/passwords Require user pperic U navedenom primeru koristi se osnovna autorizacija; ime autorizacije je "Samo za pozvane". Datoteka /usr/local/apache/passwd/passwords će biti korišćena za proveru identiteta korisnika, pa samo korisnik sa imenom pperic može da vidi sadržaj zaštićenog direktorijuma, naravno, ako zna ispravnu šifru. Drugi način je stvaranje datoteke .htaccess u direktorijumu koji se želi zaštititi upisivanjem svih redova iz primera, osim redova koji u sebi sadrže . Potrebno je postaviti odgovarajuće ovlašćenje za pristup .htaccess datoteci i Web stranicama koje Apache treba prikazivati tako da on može da pročita njihov sadržaj. Primer: AuthType Basic AuthName "Samo za pozvane" AuthUserFile /usr/local/apache/passwd/passwords Require user pperic Moguće je postaviti da pristup bude odobren svim korisnicima upisanim u datoteku passwords naredbom Require valid-user. Ako se u direktorijumu nalazi datoteka index.html tada će ona biti učitana nakon odobrene autorizacije, tj. Web stranica se može zaštititi ako se postavi u zaštićeni direktorijum. U praksi je često potrebno omogućiti pristup više osoba nekom direktorijumu i u tu svrhu se može definisati grupa. Ovakav način postavljanja pristupa je pogodan jer se bez promene konfiguracionih datoteka Apache servera može nekoj osobi dozvoliti ili oduzeti pristup, tako što se ta osoba postavi ili izbriše iz grupe kojoj je pristup dozvoljen. Grupa se postavlja stvaranjem datoteke /usr/local/apache/passwd/groups (može biti i drugde), kao i upisivanjem u nju: Ime_grupe: ime_korisnika1 ime_korisnika2 ime_korisnika3 Takođe, korisnici moraju biti upisani i u datoteku passwords, a potrebno je dodati u httpd.conf ili u .htaccess linije AuthGroupFile /usr/local/apache/passwd/groups Require group Ime_grupe Ovim je završeno postavljanje osnovne autorizacije. Apache podržava i tzv. digest autorizaciju i autorizaciju pomoću baze podataka, ali one se koriste u izuzetno sigurnim sistemima i ne rade na svim Web pretraživačima, pa ih ovde nećemo opisivati. CGI i PHP aplikacije U ovom delu su ukratko opisani osnovni konfiguracioni postupci vezani za omogućavanje pokretanja i izvođenja CGI (engl. Common Gateway Interface), kao i PHP aplikacija na strani Apache Web Servera. Kako pomenute aplikacije, uz ASP i ASP.NET, danas predstavljaju neizostavni element bilo kog Web servera koji se koristi za obavljanje ozbiljnijih i složenijih zadataka, pre ili kasnije ukazaće se potreba za omogućavanjem ovih servisa. CGI CGI (engl. Common Gateway Interface) je prilično star ali još uvek često korišćen alat, koji omogućava razmenu informacija između korisnika i Web servera. CGI skripte mogu biti pisane u raznim programskim jezicima (najčešće Perl ili C) i kao takve predstavljaju aplikacije koje se na zahtev pretraživača, odnosno klijenta, izvršavaju na strani Web servera. Tipični primer komunikacije između klijenta i Web servera je slanje korisničkih podataka serveru putem Web formi ugrađenih u HTML stranicu, na temelju kojih će CGI skripta pokrenuta na serveru obaviti za nju predviđene zadatke i rezultat vratiti klijentu. Jednostavan primer Web forme, kojom će se pokrenuti CGI skripta na serveru, sa zadatkom da obradi podatke koje je korisnik uneo pomoću Web forme: METHOD=POST> Ime i Prezime : Password: U navedenom primeru ACTION atribut je naveden unutar HTML oznake, kojim se Web serveru navodi put i ime skripte koju treba izvršiti. Pritiskom na taster "Šalji!" aktiviraće se slanje unetih podataka Web serveru, koje će on dalje proslediti prozvanoj CGI skripti na obradu (ukoliko je to omogućeno). Nakon procesiranja primljenih podataka i na osnovu preduzetih radnji, CGI skripta može po potrebi obavestiti klijenta o učinjenim promenama. Ovde ćemo izneti korake koje je potrebno preduzeti kako bi se na Web serveru omogućilo pokretanje i izvođenje napisanih CGI skripti. Važno je pomenuti da inicijalna konfiguracija Apache Web Servera ne dozvoljava pokretanje CGI skripti, te da je potrebno modifikovati httpd.conf konfiguracionu datoteku ukoliko se to želi omogućiti. Na samom početku valja definisati direktorijum u kojem će se smeštati CGI skripte koje se žele izvoditi. Taj direktorijum može da se nalazi bilo gde unutar sistema datoteke, nezavisno od DocumentRoot konfiguracionog parametra Apache Web Servera. Nakon toga, u httpd.conf datoteci je potrebno dodati deo pomoću koga će se Apache server obavestiti da se u tom direktorijumu nalaze CGI izvršni programi, koje u slučaju zahteva za tom URL adresom treba tako i tretirati. Primer: AllowOverride None Options ExecCGI SetHandler cgi-script Ovim delom kôda Apache Web Server će znati da se unutar /var/www/cgi-bin/ direktorijuma nalaze CGI skripte, koje treba tretirati kao izvršne programe ukoliko se javi upit za URL adresom koja upućuje na navedeni direktorijum. Ključni parametar u ovom delu konfiguracije je Options ExecCGI, kojim se dozvoljava pokretanje i izvođenje CGI skripti smeštenih u direktorijumu na koji se ovaj deo konfiguracije odnosi. Uz ovakvu konfiguraciju Apache Web Servera, parametru ACTION unutar HTML oznake potrebno je navesti ceo put do skripte koja se želi pokrenuti nakon pritiska na taster submit. Uobičajena je praksa da se u konfiguraciji Apache Web Servera definiše alias, ime kojim će se omogućiti intuitivnije pristupanje CGI skriptama, pogotovo ukoliko se one nalaze negde duboko unutar sistema datoteke. U tu svrhu potrebno je dodati sledeći red: ScriptAlias /cgi-bin/ "/usr/local/apache/www/cgi-bin/" U ovom slučaju, svaki zahtev za URL adresom oblika http://www.ime_domena/cgi-bin/ime_skripte Apache će interpretirati kao zahtev za pokretanjem CGI skripte, koju će locirati unutar /usr/local/apache/www/cgi-bin alias direktorijuma. Napomena: svakoj CGI skripti kojoj želimo da omogućimo pokretanje potrebno je chmod naredbom postaviti ovlašćenje i izvođenja (execute bit). Naime, budući da je Web server iz sigurnosnih razloga najčešće pokrenut pod nobody korisničkim imenom, potrebno je execute flegove postaviti na način kojim će se Web serveru omogućiti pokretanje željene CGI skripte (npr. chmod 755 ime_skripte, će sigurno zadovoljiti). PHP PHP je jedan od najpopularnijih i najčešće korišćenih skript jezika u svetu Web programiranja. Popularnost je stekao jednostavnošću, kvalitetom i brojnim mogućnostima koje pruža. U PHP-u se mogu naći elementi objektno-orijentisanog programiranja preuzeti iz Jave, C++-a, a takođe se može pronaći i niz drugih vrlo korisnih elementa nasleđenih iz Perla. Ali, posebna snaga PHP-a dolazi do izražaja u situacijama kada se javlja potreba za integracijom sa bazama podataka, budući da PHP poseduje vrlo kvalitetno programsko okruženje dizajnirano upravo za te svrhe. Da bi se omogućilo pokretanje i izvođenje PHP skripta na Apache Web Serveru, prvi korak koji je potrebno preduzeti jeste nalaženje samog PHP programskog paketa (može se pronaći na www.php.net). Preporučuje se korišćenje što novije verzije ovog programskog paketa kako bi se osigurala potpuna kompatibilnost sa drugim delovima sistema (SQL, Apache ). PHP programski paket se može, između ostalih, dobiti i u tar.gz formatu, pa je u tom slučaju postupak instalacije sličan kao i kod ostalih tar.gz paketa. Otpakivanje arhive može se obaviti u jednom koraku naredbom: # tar -xzvf php.x.x.x.tar.gz Nakon toga potrebno je ući u novonastali php.x.x.x direktorijum i pokrenuti konfiguracionu skriptu. Potrebno je obratiti pažnju na parametre koji se prosleđuju toj skripti, budući da od njih zavisi kako će se PHP slagati sa ostalim komponentama sistema. Na primer, #./configure --with-apache=./apache_X.X.X –with-mysql=/usr/local/mysql naredba će pokrenuti konfiguraciju sa podrškom za integraciju sa bazom podataka MySQL, kao i Apache Web Serverom. Nije isključena mogućnost da će PHP programski paket jednako dobro raditi pokretanjem ./configure skripte bez parametara, ali se gore opisani postupak smatra regularnim i sigurnim. Naredbom ./configure --help mogu se izlistati sve opcije koje se mogu proslediti ./configure skripti za konfiguraciju PHP programskog modula, pa ih je poželjno analizirati kako bi se na taj način uvidele sve mogućnosti konfiguracije ovog programa. Posle toga sledi pokretanje “make” programa naredbama: # make # make install što će, ukoliko je sve uspešno prošlo, rezultovati instaliranim PHP programskim paketom. Sledeći korak je konfiguracija samog Apache Web Servera, kako bi se na taj način omogućilo pokretanje i izvođenje PHP skripti. U tu svrhu potrebno je dodati sledeće linije u Apache httpd.conf konfiguracionu datoteku: AddType application/x-httpd-php3 .php3 AddType application/x-httpd-php .php ScriptAlias /php3/ "/usr/local/bin/" Action application/x-httpd-php3 "/php3/php/" čime će se omogućiti izvođenje PHP skripti instaliranih na računaru. Ovim linijama Apache Web Serveru se omogućuje prepoznavanje i izvršavanje skripti u PHP jeziku. Definiše se tip aplikacije, lokacija gde će iste biti smeštene (/usr/local/bin) i interpreter koji će se pozivati pri njihovom izvršavanju.