Řízení přístupu (Apache)
Teorie
Apache umí omezit přístup jak na základě IP adresy (či. jména počítače),
tak dle znalosti (či neznalosti) přístupového kódu (jméno, heslo). Nadále
popisuji druhou možnost.
Toto se může hodit jak na Freewebech či přímo u poskytovatelů připojení.
Podmínkou ale je, aby daný server měl zapnutu podporu .htaccess souborů...
Každému objektu (soubor, typ souboru, adresář) lze přiřadit realm --- něco
jako označení zóny. Při žádosti o přístup je požadován pár jméno/heslo
(pro daný realm). Pokud ho prohlížeč nezná, ptá se uživatele (většinou
si potom údaje pamatuje než z něj vyskočíte). Stejný realm můžete
nastavit pro více adresářů.
Uživatele lze sdružovat do skupin. Úroveň přístupu se může lišit dle
uživatele a členství ve skupině.
Jména a hesla nemají žádnou vazbu na systémová --- jsou uložena ve vámi
zvoleném souboru (hashnutá cryptem). Lze nechat Apache hesla ověřovat i
proti databázím v mSQL či DBM (co vím).
Praxe
Potřebujete aspoň dva soubory:
.htaccess --- sem se píšou všechna nastavení k adresáři
.users --- pro záznamy o uživatelích (někdy se jmenuje
.htpasswd)
Třetí ze souborů, který může (ale nemusí) být použit:
.groups --- pro záznamy o skupinách (někdy se jmenuje
.htgroup)
Vytvořím .htaccess . Může vypadat takhle:
# Zakážeme stahování souboru .users, .groups a .htaccess
<Files .*>
Order deny,allow
Deny from all
</Files>
# Asi nebudeme chtít, aby se zrovna tyhle stránky
# ukládaly do cache?
ExpiresDefault now
# Zajistime ověřování uživatelů dle seznamu
# Typ ověřování hesla
AuthType Basic
# Jméno "zony"
AuthName svet
# Hesla uzivatelu
AuthUserFile /home/doma/public_html/zona/.users
# Pozor - cesta /home/doma/public_html/zona/.users je jen příklad!
# Požádejte přes email o zaslání správné cesty. Nezapomeňte,
# že váš adresář není pro server rootovým adresářem, jak se vám
# po přihlášení via ftp jeví.
# pokud bychom měli soubor skupin zapsali bychom další řádek,
# já jej nechám zakomentovaný ...
# AuthGroupFile /dev/null
# Povolíme přístup komukoliv, kdo má heslo
require valid-user
# Alternativní zápis ...
# <Limit GET POST>
# require valid-user
# </Limit>
# Povolime pristup jenom anicce a mne
# require user anicka ja
Vytvoříme seznam uživatelů:
[w@linux zona]$ htpasswd -c .users ja
New password: (heslo)
Re-type new password: (heslo)
Adding password for user ja
[w@linux zona]$ htpasswd .users anicka
...
Volba -c říká "vytvoř soubor s hesly". Pokud ji
použijete na existující soubor, bude přepsán.
Přestože je můj příklad uveden pro Unix, lze jej použít i na Windows
platformách máte-li nainstalovaný Apache server. Hledejte jej v podadresáři
BIN ...
(Soubor se dá vytvářet třeba i tady: http://www.karlin.mff.cuni.cz/network/htpassword.php)
A zajistíme, že k souborům nebudou mít přístup ostatní uživatelé:
[w@linux zona] chmod g-rwx .??*
Když vynecháte otazníky, má to ten zábavný důsledek, že ostatním zakážete
i přístup k adresáři o úroveň výše (..).
Ale .htaccess nejen zabraňuje přístupu ...
Ukázka řádku v souboru .htaccess pro změnu stánky zobrazované
při zadání chybného dokumentu ("404 object not found") - předpokládáme,
že chyba404.html je soubor v kořenovém adresáři virtuálního
serveru:
ErrorDocument 404 /chyba404.html
Možné problémy
otázka: Zobrazí se 401_Error - Authorisatoin
required a to i když zadám správné heslo.
příčina: Asi máte špatně nebo nemáte zašifrované
heslo a stránky jsou na UNIXu.
řešení: Ještě jednou vytvořte soubor .htpasswd
otázka: Zobrazí se 500 INTERNAL ERROR
příčina: Asi jste udělali chybu v zadání adresy
do .htaccess souboru nebo jste se dopustili jiné chyby v .htaccess souboru
řešení: Znovu vytvořte .htaccess soubor podle
postupu výše.
otázka: Nic se neděje, složka se normálně otevírá
bez vyžádání hesla. (ani jednou se to neptalo)
příčina: Váš server zřejmě nepodporuje .htaccess
soubory.
řešení: Nahrajte si stránky na jiný server :-)
otázka: Jednou se to zeptalo na heslo, ale teď už
se to neptá.
příčina: Jde o nastavení prohlížeče, zda se
budete přihlašovat automaticky nebo zda budete zadávat heslo pokaždé. Ale
heslo bude vyžádáno od každého návštěvníka stránky.
Soubor .groups (.htgroup)
Soubor .htgroup je velice jednoduchý. Pro každou skupinu obsahuje jeden řádek,
na jehož začátku je název skupiny, následuje dvojtečka a seznam jejích členů
oddělených mezerou, tedy např. takto:
customer: jana emil josef
Poznámky
- Zrovna tak dobře můžete k přihlašování použít PHP skript a ověřování
hesel si zařídit v něm (třeba proti POP3 serveru či libovolné databázi).
- Docela zajímavou knihu o konfiguraci Apache (byť už trochu zastarala)
napsali Ben a Peter Laurie (možná půjde koupit na Vltavě).
(Ben Laurie a Peter Laurie: Apache, správa webového serveru. Computer
Press, Praha 1997)
[o úroveň výše]
|