Tato stránka může sloužit jako odrazový můstek při zavádění omezení přístupu k webu. Pokud to s bezpečností myslíte vážně, je nezbytné prostudovat problematiku podrobněji, minimálně na webu Apache.

Zabezpečení stránek heslem

V adresáři, k jehož obsahu chcete přístup chránit heslem, vytvořte soubor .htaccess. V něm uveďte následující položky:

Nejdříve vynutíme šifrované spojení, aby se heslo nepřenášelo jako prostý text. Toho dosáhneme direktivou SSLRequireSSL:

SSLRequireSSL
Druhá možnost je přesměrovat nešifrované požadavky na šifrované:
RewriteEngine On
RewriteBase /
RewriteCond %{HTTPS} !=on                             
RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [R,L]
Další obsah souboru pak bude:
AuthName "jmeno oblasti"
AuthType Basic
AuthUserFile /cesta/k/souboru/s/hesly
require valid-user
Položka AuthName specifikuje název chráněné oblasti, který bude přistupujícím klientům zobrazován při dotazu na heslo (víceslovný řetězec je nutno uzavřít do uvozovek). Položka AuthUserFile odkazuje na soubor, kde jsou definována všechna povolená přístupová jména a hesla. Pro ilustraci předpokládejme, že .htaccess s následujícím obsahem je umístěn v adresáři /home/xnovak99/public_html/censored:
AuthName "Libri prohibiti"
AuthType Basic
AuthUserFile /home/xnovak99/public_html/.htpasswd
require valid-user
Potom je tímto specifikováno, že přístup k souborům v podstromu security (URL tedy začíná https://www.fi.muni.cz/~xnovak99/security) je autorizován až po zadání platného jména a hesla dle údajů ve zmíněném souboru .htpasswd.

Soubor odkázaný skrze AuthUserFile má následující textový tvar:

jmeno1: zakodovane_heslo1
jmeno2: zakodovane_heslo2
...
Hesla k jednotlivým platným přihlašovacím jménům musí být kódována klasickou unixovou šifrou crypt; k jejímu vygenerování lze použít např. perlovskou či C funkci crypt() nebo utilitu htpasswd. Příklad obsahu souboru s hesly:
bond:Xy9KgHmOmCESc
trubka:qWKFFmkF7LPjQ
Ohlásí-li se tedy zájemce o chráněnou oblast jménem "bond" a heslem "James" nebo jménem "trubka" a heslem "dcs.48", bude mu udělen přístup.

Soubor s hesly musí být přístupný WWW serveru, tedy čitelný pro uživatele apachefi. Ve vašem případě tedy lze realizovat oprávněním r pro ostatní a musí se nacházet v adresáři, který je již od kořene (/) průchozí pomocí oprávnění x pro ostatní. Bezpečnějším způsobem je použití ACL: setfacl -m u:apachefi:r .htaccess. To samé platí samozřejmě i pro soubory v oblasti chráněné heslem – musí být v souborovém systému přístupné, stejně jako nezabezpečené stránky. Je tedy zřejmé, že tento typ ochrany se uplatní jen proti lidem, kteří nemají na FI unixový účet. Chcete-li něco zabezpečit i před těmito uživateli, lze využít zmíněné ACL nebo jiné sofistikovanější metody.

Kerberos

Jednou z nich je použití Kerbera. Tento systém je používán na fakultních strojích nebo na Fadminu k autentizaci uživatelů. Nic vám nebrání použít jej i k autentizaci uživatelů vašich stránek. Jediným omezením je, že musí mít platný login. Heslo se použije fakultní.

Příklad konfigurace .htaccess:
AuthType Kerberos
AuthName "Kerberos Login"
KrbAuthRealm FI.MUNI.CZ
KrbMethodNegotiate off
KrbVerifyKDC on
Krb5Keytab /etc/httpd/kerberos/httpd.keytab
require user login1@FI.MUNI.CZ login2@FI.MUNI.CZ
Použití require valid-user by úspěšně autentizovalo každého, kdo má platný login na FI.

Kerberos + LDAP

Pokud chcete stránku zpřístupnit členům některých fakultních skupin (musí existovat unixová skupina, viz aisa$ getent group), je nutno použít autorizaci přes LDAP (autentizace zůstává Kerberos).

Konfigurace pro Kerberos vypadá stejně jako v předchozím příkladě, stačí přidat pouze tento řádek:

KrbLocalUserMapping on

Konfigurace autorizace s LDAP:

AuthLDAPUrl "ldaps://ldap.fi.muni.cz ldap1.fi.muni.cz/ou=People,dc=fi,dc=muni,dc=cz?uid"
AuthLDAPGroupAttribute memberUid
AuthLDAPGroupAttributeIsDN off

Přístup skupinám nebo jednotlivým uživatelům pak lze přidat pomocí kombinace RequireAny, Require ldap-user a Require ldap-group, například

<RequireAny>
    Require ldap-group cn=JMENO_SKUPINY,ou=Group,dc=fi,dc=muni,dc=cz
    Require ldap-group cn=JMENO_JINE_SKUPINY,ou=Group,dc=fi,dc=muni,dc=cz
    Require ldap-user LOGIN_UZIVATELE
</RequireAny>

Řízení přístupu ke stránkám dle adresy/jména klienta

V adresáři, který chcete takto ošetřit, vytvořte soubor .htaccess a přidejte do něj následující řádky:

Require ip IP1 IP2 …
Require host hostname1 hostname2 …

Pouze klienti explicitně vytýčení pomocí Require … budou mít k danému podstromu webu přístup. Parametrů může být libovolný počet (oddělují se mezerou). Parametrem může být

  • Pro Require ip
    • IP adresa: 10.0.0.240
    • adresový prefix: 10.0.0 (stejný význam jako 10.0.0.0/24)
    • IP adresa s maskou: 10.0.0.0/255.0.0.0
    • adresa syntaxe CIDR: 10.0.0.0/8
    • IPv6 adresa: 2001:718:801:235::b
    • IPv6 adresa s maskou: 2001:718:801:230::/64
  • Pro Require host
    • doménové jméno nebo jeho sufix: fi.muni.cz (odpovídá tedy klientům "fi.muni.cz", "node2.fi.muni.cz", ale neodpovídá "fifi.muni.cz" – před specifikovaným sufixem se vždy uvažuje pomyslná tečka, pakliže tam není explicitně uvedena)

Pokud potřebujete naopak povolit přístup všem kromě některých vybraných strojů/domén, je k dispozici direktiva <RequireAll>. Zamezení přístupu z domény nekde.cz by vypadalo takto:

<RequireAll>
    Require not host nekde.cz
    Require all granted
</RequireAll>

Pro podrobnější informace viz dokumentace Apache 2.4.

Odpovědný kontakt: unix(atsign)fi(dot)muni(dot)cz