Prístup k súborom na serveri môžeme zakázať/povoliť na základe nasleducúcich parametrov:
- kompletné meno domény (napr.: user.apache.org) alebo doména, do ktorej user patrí (apache.org)
- kompletná IP adresa alebo časť IP adresy (adresa siete)
- IP adresa spolu s maskou siete
Order, Deny, Allow
Podľa čoho obmedzujeme, to už vieme. Teraz si povieme o tom ako obmedzujeme…
Najprv zadefinujeme priority, ktoré sa uplatnia v prípade, že užívateľ, snažiaci sa o prístup na server je uvedený aj v zozname direktívy Deny aj v zozname Allow. Definujeme pomocou direktívy Order :
Order Allow,Deny #Deny (zamietnutie) má vyššiu prioritu
alebo
Order Deny,Allow #vyššiu prioritu má Allow (povolenie)
Ďalej nasleduje samotný zoznam IP adries, domén a pod., ktoré budú odmietnuté respektíve prijaté, napr.:
Deny from all
Allow from apache.org
K tomuto príkladu sa ešte vrátime, teraz niečo o už spomenutých prioritách.
Pokiaľ je užívateľ uvedený v zozname direktívy Allow alebo v zozname Deny (čiže nie v oboch súčasne), podľa názvu direktívy server určí jeho budúcnosť – buď ho príjme(Allow) alebo odmietne(Deny). Pokiaľ je user súčasne v oboch zoznamoch, alebo ani v jednom postupuje sa podľa direktívy Order, a to tak, že rozhoduje direktíva, ktorá je v Order zapísaná za čiarkou a má teda vyššiu prioritu.
Niekoľko príkladov pre lepšie pochopenie:
Order Deny,Allow
Deny From All
#Odmietnutý je všetok prístup k dokumentom
Order Allow,Deny
#To isté – odmietnutý je všetok prístup k súborom
Order Deny,Allow
Deny From apache.org
#Odmietnutý je prístup k dokumentom zo serveru apache.org
Order Deny,Allow
Deny From All
Allow From apache.org
#Odmietnutý je všetok prístup k súborom, okrem požiadaviek z apache.org
V konfiguračnom súbore pravdepodobne nájdeme aj tieto riadky:
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
Jednu direktívu v tejto definícii poznáme z minula (Options), o druhej (AllowOverride) sa dozvieme až v budúcej časti . Čo je ale podstatné je to, že nanajvýš vhodné do tohoto zápisu je vložiť riadky, ktoré implicitne zakážu prístup ku všetkým dokumentom na serveri, teda:
<Directory />
Options FollowSymLinks
AllowOverride None
Order Allow,Deny
Deny from all
</Directory>
Zabránime tým prístupu nepovolaných osôb k súborom ktoré nie sú pre nich určené. Oblasti, ktoré naopak prístupné majú byť, nakonfigurujeme napríklad týmto spôsobom:
<Directory /home/httpd>
… direktívy …
Order Allow,Deny
Allow from all
… direktívy …
</Directory>
Vlastnosti prekrývajúcich sa oblastí
V predchádzajúcej časti sme sa naučili definovať oblasti. Nevyšlo ale miesto na vysvetlenie spôsobu určovania konfigurácie adresárov, ktoré sa v definíciach oblastí nachádzajú viac krát, a teda sa prekrývajú, respektíve nie sú uvedené vôbec, ale patria do nejakej oblasti.
Majme definície oblastí pre adresáre:
/, /home, /home/httpd/, /home/httpd/www/user
Dokument, o ktorý užívateľ žiada, je umiestnený v: /home/httpd/www/user/osobne/ .
Otázka: akú konfiguráciu použije Apache pre túto oblasť ?
Odpoveď: najprv server načíta konfiguráciu pre oblasti, ktoré sú definované a do ktorých daný objekt patrí (teda: /, /home, /home/httpd, /home/httpd/www/user) a skombinuje ich. Výsledok je aplikovaný na žiadaný adresár. Skutočne jednoduchý príklad:
<Directory />
AllowOverride None
Order Allow,Deny
Deny from all
</Directory>
<Directory /home>
Order Allow,Deny
Allow from all
</Directory>
<Directory /home/httpd>
AllowOverride All
Order Allow,Deny
Deny from all
</Directory>
<Directory /home/httpd/www/user>
Order Allow,Deny
Allow from all
</Directory>
Potom adresár /home/httpd/www/user/osobne/ bude prístupný aj napriek tomu, že nie je priamo definovaný ako oblasť a uplatní sa v ňom naviac aj AllowOverride All.
Je tu ale jedna výnimka, a tou je práve direktíva Options. Vysvetlím znova na príklade.
Sú dané tieto definície oblastí:
<Directory />
Options ExecCGI
</Directory>
<Directory /home/httpd>
Options FollowSymLinks
</Directory>
Potom pre adresár /home/httpd je uplatnená iba direktíva FollowSymLinks, neplatí tu už ExecCGI. Pokiaľ potrebujeme aby platila aj vo vnútri oblasti /home/httpd, použijeme prefix „+“ pre pridanie direktívy k parametrom Options posledne definovanej oblasti, respektíve „-“ pre odobranie. Za direktívou Options sa parametre uvádzajú buď všetky s prefixmi, alebo všetky bez prefixov. Vyššie uvedený príklad by sme mohli pre platnosť ExecCGI v adresári /home/httpd prepísať takto:
<Directory />
Options ExecCGI
</Directory>
<Directory /home/httpd>
Options +FollowSymLinks
</Directory>
Apache to vlastne interpretuje ako pridanie parametra FollowSymLinks ku parametru ExecCGI – teda pridanie FollowSymLinks k najbližšej definícii oblasti. Iný príklad:
<Directory />
Options Indexes FollowSymLinks
</Directory>
<Directory /home>
Options -Indexes
</Directory>
<Directory /home/httpd/user>
Options +ExecCGI
</Directory>
V adresári /home/httpd/user bude možné používať symbolické linky a spúšťať CGI skripty. Inak povedané, uplatnia sa tu parametre FollowSymLinks a ExecCGI direktívy Options.
V ďalšom pokračovaní sa naučíme konfigurovať oblasti pomocou oddelených súborov .htaccess a vysvetlíme si s tým súvisiacu direktívu AllowOverride.