Ří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]


WEBovský počítadlo spočítalo, že si číslo počitadlo, které navštívilo od 17.října 1999 tyto stránky uložené na serveru Volny.cz
Tato stránka byla autorem naposledy editována 07.08.2007 13:27:24,
automatický update proveden 03.09.2007 22:23:44