Řízení přístupových práv v Apache 2.4: pozor na nové konfigurační volby

14. 9. 2022
Doba čtení: 3 minuty

Sdílet

 Autor: Depositphotos
Dnes lehce nakoukneme na možnosti řízení přístupových práv k jednotlivým adresářům www serveru Apache pro verzi 2.4 a vyšší. Soustředíme se na některé změny proti starším verzím, které mohou způsobit nekompatibilitu.

Cílem tohoto článku je tyto změny nastínit a v případě potřeby podnítit k dalšímu studiu. Oproti předchozím verzím zde došlo k významným úpravám a staré konfigurace pomocí direktiv Order v další verzí již nemusí fungovat. Proto je vhodné používat již nový způsob.

Základní definice přístupu nyní vypadá přibližně takto:

<Directory /var/www/>
    Options Indexes FollowSymLinks
    AllowOverride None
    Require all granted
</Directory>

Zde se díváme na konfiguraci výchozího adresáře pro webové stránky v Debianu, Ubuntu a distribucí z nich vycházejících. Půjdeme se podívat na jednotlivé položky této konfigurace. Adresář určíme pomocí označení  Directory.

<Directory /var/www/>
    ...
</Directory>

Pomocí definice Options můžeme povolit nebo omezit chování webu v tomto adresáři. Jsou zde široké možnosti. Podíváme se na dva nejčastější a důležité parametry.

  • Indexes  – Umožní zobrazit obsah dotyčného adresáře. Podmínkou pro zobrazení je, že zde není obsažen soubor daný příkazem DirectoryIndex, typicky například index.html nebo  index.php.
  • FollowSymLinks  – Povolení symbolických odkazů. Zde záleží na konstrukci vašich webových stránek, zda jsou využívány odkazy v souborovém systému.

AllowOverride povoluje, nastavuje nebo zakazuje použití konfiguračních souborů .htaccess. Toto je důležité především u webů, kde je více vlastníků jednotlivých webových stránek. Typicky to platí třeba pro webhostingové společnosti.

Pro běžné použití se používá nejčastěji nastavení None (zakazuje samostatnou konfiguraci) a All (Povoluje veškeré konfigurace v samostatných konfiguračních souborech). Možností je více, v případě potřeby navštivte stránku s dokumentací.

Nyní hlavní změna v nastavení. Jde o nastavení pomocí volby Require. Tato volba nahrazuje bývalé nastavení pomocí Order denny, allow, Allow from a podobně. Možností máme opravdu mnoho. Záleží na tom, které moduly máme obsaženy ve své instalaci Apache. Všechny zde uvedené moduly jsou již v naprosté většině distribucí v základní instalaci Apache2 z repozitářů. V distribucích na bázi Debianu se balíček s těmito módy jmenuje  apache2-bin.

Základní modul mod_authz_core poskytuje:

  • Require all granted  – přístup je vždy povolen bez podmínek.
  • Require all denied  – vždy zakázaný přístup bez podmínek.
  • Require env env-var [env-var] ...  – přístup je povolen pouze když je nastavena jedna z uvedených proměnných prostředí.
  • Require method http-method [http-method] ...  – přístup povolen pouze pro některé http metody, například potřeba šifrování HTTPS.
  • Require expr expression  – přístup povolen pokud je výraz vyhodnocen jako pravdivý.

Některé další moduly pro užitečné rozšíření možnosti konfigurace řízení přístupu jsou: mod_authz_user, mod_authz_host, mod_authz_groupfile. Jaké jsou v nich skryté další možnosti použití?

  • Require user userid [userid] ...  – přístup pouze pro vyjmenované uživatele.
  • Require group group-name [group-name] ...  – povolen pouze přístup uživatelů ve skupině.
  • Require valid-user  – povolen přístup existujících uživatelů.
  • Require ip 10 172.20 192.168.2  – přístup je povolen pouze z uvedených IP adres. Je možné tyto adresy zadat i rozsahem.
  • Require forward-dns example.org  – povolen přístup klientovi, jehož IP adresa byla přeloženo z domény example.org.

Požadavek můžeme negovat pomocí parametru not, ovšem potom si zde již nevystačíme s jednoduchým zápisem. Protože nepravda v takovém případě nemůže být splněna. Maximálně vrátí neutrální výsledek. Takže použijeme pro odmítnutí jedné adresy tento zápis.

bitcoin_skoleni

<RequireAll>
    Require all granted
    Require not ip 10.252.46.165
</RequireAll>

Co jsme to použili? Jde o autorizační skupinu. Jsou k dispozici tyto:

  • RequireAny  – Pro splnění musí být jako úspěšná vyhodnocena alespoň jedna podmínka.
  • RequireAll  – Pro splnění musí být nesmí žádná podmínka selhat a alespoň jedna musí být úspěšná.
  • RequireNone  – Zde nesmí uspět žádná z uvedených podmínek.

Je možno použít pro složitější autorizace i vnoření jednotlivých skupin do sebe. Doufám že tento náhled někomu pomůže přepracovat nastavení svého webu podle nových konfiguračních pravidel dříve než začne mít problém s neplatnou konfigurací.

Autor článku

Od roku 2008 se zabývá Linuxem a open-source softwarem. Má zkušenost systémového administrátora Linuxu z příspěvkové organizace. Ve volném čase se kromě počítačů věnuje také fotografování a úpravě fotografií.