Autorizace prostřednictvím .htaccess


Úvod

Vyvstane-li potřeba omezit přístup k nějaké části www stromu, je namístě použít některou z metod autorizace. Jedna z nich, která je založena na standardní funkci webového serveru a tak neklade na uživatele téměř žádné nároky, je autorizace prostřednictvím direktiv v souborech .htaccess a .htpasswd.

Autorizace je prováďěna na základě dvojice jméno/heslo, která se nachází v souboru .htpasswd. Oba soubory, .htaccess i .htpasswd jsou soubory textové, takže k modifikaci postačí jakýkoli textový editor. Omezení přístupu pak funguje rekurzivně od adresáře, kde se nachází soubor .htaccess, tedy pokrývá i všechny podadresáře a soubory v nich.

Tvorba autorizačních souborů

Nejříve je vhodné vytvořit soubor s hesly .htpasswd. Toto je nejjednodušší realizovat přímo na serveru (v našem případě radio-home), kde je nainstalována utilita htpasswd. V okně terminálu přejdete do adresáře, kde chcete budoucí soubor .htpasswd mít, a spustíte příkaz

 htpasswd -c .htpasswd jméno_prvního_uživatele

tím se vytvoří nový soubor .htpasswd obsahující jméno a heslo prvního uživatele. Heslo se do tohoto souboru ukládá již v zašifrované podobě. (Hesla jsou šifrována klasickým DES algoritmem).

Další uživatele přidáte jednoduše (nyní již bez volby -c)

 htpasswd .htpasswd jméno_dalšího_uživatele

Smazat uživatele lze v jakémkoli textovém editoru tak, že v souboru .htpasswd smažete řádek s příslušným jménem a heslem.

Například vytvoříme soubor s heslem pro uživatele navstevnik a heslo host. Výpis z okna terminálu vypadá např. takto:

[pavel@local tmp]$ htpasswd -c .htpasswd navstevnik
New password:
Re-type new password:
Adding password for user navstevnik


Vytvoří se soubor .htpasswd s následujícím obsahem:

navstevnik:uJnnreCzu4lFM

Dále přidáme dalšího uživatele, např. student1 s heslem rn800523:

[pavel@local tmp]$ htpasswd .htpasswd student1
New password:
Re-type new password:
Adding password for user student1

Soubor .htpasswd se změní:

navstevnik:uJnnreCzu4lFM
student1:mIAWCRA5Y6meQ

Z bezpečnostních důvodů by se měl soubor .htpasswd nacházet mimo oblast www stránek.

Vlastní proces autorizace je zabezpečen existencí souboru .htaccess v adresáři , k němuž chcete omezit přístup z webu (zabezpečení se tedy netýká klasického přístupu k souborům na serveru přes ssh či sambu). Jakmile web server (zde apache) dostane požadavek, při němž vstoupí do adresáře s .htaccess, provede direktivy v tomto souboru obsažené a tedy i zmíněnou autorizaci.

Vytvořte v příslušném adresáři soubor .htaccess a umístěte do něj tento obsah:

AuthUserFile /cesta/k/vasemu/souboru/.htpasswd
AuthGroupFile /dev/null
AuthName "Soukroma autorizacni stranka"
AuthType Basic

require valid-user

První položka AuthUserFile obsahuje celou cestu k umístění vašeho souboru s hesly .htpasswd. Tento se může nacházet na vámi zvoleném místě, opět opakuji, doporučuji umístit mimo oblast vašich www stránek. K souboru musí být nastavena práva pro čtení pro ostatní (chmod o+r) a celá cesta k tomuto souboru musí být alespoň průchozí pro ostatní (adresáře chmod o+x), jinak apache soubor nenačte a na stránky nepustí nikoho (tedy ani oprávněné uživatele). Soubor se obecně nemusí jmenovat .htpasswd, můžete ho nazvat jakkoli a příslušně změnit cestu v AuthUserFile a název při tvorbě pomocí htpasswd.

Direktiva AuthGroupFile slouží k nastavení cesty k souboru , obsahujícímu skupiny uživatelů. Takto lze omezit přístup do konkrétního adresáře na omezenou skupinu uživatelů. V souboru se nacházejí samostatné řádky odpovídající jednotlivým skupinám uživatelů a to vždy název_skupiny: uživatel1 uživatel2 uživatel3 atd. Jednotliví uživatelé jsou definováni v již zmiňovaném souboru .htpasswd. Pokud nepoužíváme skupiny, nastavíme cestu na /dev/null.

Direktiva AuthName obsahuje název oblasti, kterou chcete zabezpečit. Může obsahovat vámi zvolený název zabezpečené oblasti. Pokud název obsahuje mezery, je ho nutno uzavřít do uvozovek.

Direktiva AuthType slouží k volbě typu autorizace. Zde volíme zpravidla Basic pro základní autorizaci.

Poslední direktiva require specifikuje vlastní omezení přístupu. Argumenty mohou být tyto.

require user uživatel1 [uživatel2] ...

kdy je přístup omezen pouze na vyjmenované uživatele (ze skupiny uživatelů definovaných v .htpasswd),

require group název_skupiny1 [název_skupiny2] ...

kdy je přístup omezen pouze na vyjmenované skupiny (definované v souboru uvedeném v direktivě AuthGroup),

require valid-user

kdy je přístup umožněn všem uživatelům definovaným v .htpasswd.

Kombinací těchto argumentů v jednotlivých .htaccess souborech lze např. zpřístupnit stránky všem autorizovaným uživatelům a určitou část souborů (adresářů) pouze vybraným uživatelům.

Soubor .htaccess by měl mít nastavená práva stejně jako výše uváděný .htpasswd, aby apache mohl tento soubor najít a přečíst.
Pokud je vše vytvořeno korektně a správně nastaveno, při zadání URL z autorizované oblasti se objeví autorizační okno.

autorizacni okno

Po zadání korektního jména a hesla pak již následuje otevření příslušné stránky. Jednoduchý příklad stránek s autorizací naleznete zde (pro autorizaci uveďte jméno host a heslo host).

Užitečné odkazy

Další informace o .htaccess a autorizaci lze najít např. na stránce Comprehensive guide to .htaccess nebo manuál HTTP serveru Apache.


S připomínkami a náměty kontaktujte prosím autora: Ing. Pavel Puričer, puricer@fel.cvut.cz.
Poslední změna: 31. října 2002