Úvod
Při nastavování webového serveru často existují části webu, ke kterým chcete omezit přístup. Webové aplikace často poskytují vlastní metody ověřování a autorizace, ale k omezení přístupu lze použít i samotný webový server, pokud jsou tyto metody nedostatečné nebo nedostupné.
V této příručce si ukážeme, jak chránit heslem prostředky na webovém serveru Apache běžícím v Ubuntu 14.04.
Předpoklady
Pro začátek budete potřebovat přístup k serverovému prostředí Ubuntu 14.04. K provádění úkolů správy budete potřebovat uživatele, který není root, s právy sudo
. Chcete-li se dozvědět, jak takového uživatele vytvořit, postupujte podle našeho průvodce úvodním nastavením serveru Ubuntu 14.04.
Instalace balíčku Apache Utilities
Pro vytvoření souboru, který bude uchovávat hesla potřebná pro přístup k našemu omezenému obsahu, použijeme nástroj s názvem htpasswd
. Ten se nachází v balíčku apache2-utils
v repozitářích Ubuntu.
Aktualizujte místní mezipaměť balíčků a nainstalujte balíček zadáním tohoto příkazu. Při této příležitosti se chopíme také serveru Apache2 v případě, že na serveru ještě není nainstalován:
- sudo apt-get update
- sudo apt-get install apache2 apache2-utils
Vytvoření souboru s heslem
Nyní máme přístup k příkazu htpasswd
. Pomocí něj můžeme vytvořit soubor s heslem, který může Apache použít k ověřování uživatelů. K tomuto účelu vytvoříme skrytý soubor s názvem .htpasswd
v našem konfiguračním adresáři /etc/apache2
.
Při prvním použití tohoto nástroje musíme přidat volbu -c
pro vytvoření uvedeného souboru. Na konci příkazu zadáme uživatelské jméno (v tomto příkladu sammy
), aby se v souboru vytvořila nová položka:
- sudo htpasswd -c /etc/apache2/.htpasswd sammy
Budete vyzváni k zadání a potvrzení hesla uživatele.
V případě dalších uživatelů, které chcete přidat, vynechte argument -c
:
- sudo htpasswd /etc/apache2/.htpasswd another_user
Pokud si zobrazíme obsah souboru, uvidíme uživatelské jméno a zašifrované heslo pro každý záznam:
- cat /etc/apache2/.htpasswd
Outputsammy:$apr1$lzxsIfXG$tmCvCfb49vpPFwKGVsuYz.another_user:$apr1$p1E9MeAf$kiAhneUwr.MhAE2kKGYHK.
Konfigurace ověřování hesel Apache
Teď, když máme soubor s našimi uživateli a hesly ve formátu, který Apache dokáže přečíst, musíme nakonfigurovat Apache tak, aby tento soubor kontroloval předtím, než začne servírovat náš chráněný obsah. To můžeme provést dvěma různými způsoby.
První možností je upravit konfiguraci Apache a přidat naši ochranu heslem do souboru virtuálního hostitele. To obecně poskytne lepší výkon, protože se vyhneme nákladům na čtení distribuovaných konfiguračních souborů. Pokud tuto možnost máte, doporučujeme tento způsob.
Pokud nemáte možnost upravit soubor virtuálního hostitele (nebo pokud již používáte soubory .htaccess files for other purposes), you can restrict access using an
.htaccessfile. Apache uses
.htaccess`, aby bylo možné nastavit určité konfigurační položky v rámci souboru v adresáři s obsahem. Nevýhodou je, že Apache musí tyto soubory znovu načítat při každém požadavku, který se týká daného adresáře, což může mít vliv na výkon.
Níže si vyberte možnost, která nejlépe vyhovuje vašim potřebám.
Konfigurace řízení přístupu v rámci definice virtuálního hostitele
Začněte otevřením souboru virtuálního hostitele, do kterého chcete přidat omezení. Pro náš příklad použijeme soubor 000-default.conf
, který obsahuje výchozího virtuálního hostitele nainstalovaného prostřednictvím balíčku Ubuntu apache:
- sudo nano /etc/apache2/sites-enabled/000-default.conf
Vnitřní soubor by měl po odstranění komentářů vypadat podobně:
<VirtualHost *:80> ServerAdmin webmaster@localhost DocumentRoot /var/www/html ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined</VirtualHost>
Ověřování se provádí na základě jednotlivých adresářů. Chcete-li nastavit ověřování, musíte se zaměřit na adresář, který chcete omezit, pomocí bloku <Directory ___>
. V našem příkladu omezíme celý kořenový adresář dokumentu, ale tento výpis můžete upravit tak, abyste se zaměřili pouze na konkrétní adresář v rámci webového prostoru:
<VirtualHost *:80> ServerAdmin webmaster@localhost DocumentRoot /var/www/html ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined <Directory "/var/www/html"> </Directory></VirtualHost>
V tomto adresářovém bloku zadejte, že chceme nastavit ověřování Basic
. Pro AuthName
zvolte název sféry, který se uživateli zobrazí při výzvě k zadání pověření. Pomocí direktivy AuthUserFile
nasměrujte Apache na soubor s heslem, který jsme vytvořili. Nakonec budeme pro přístup k tomuto prostředku vyžadovat valid-user
, což znamená, že kdokoli, kdo může ověřit svou totožnost pomocí hesla, bude mít přístup:
<VirtualHost *:80> ServerAdmin webmaster@localhost DocumentRoot /var/www/html ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined <Directory "/var/www/html"> AuthType Basic AuthName "Restricted Content" AuthUserFile /etc/apache2/.htpasswd Require valid-user </Directory></VirtualHost>
Po dokončení soubor uložte a zavřete. Restartujte Apache, abyste mohli implementovat zásady hesla:
- sudo service apache2 restart
Zadaný adresář by nyní měl být chráněn heslem.
Konfigurace řízení přístupu pomocí souborů .htaccess
Pokud si přejete nastavit ochranu heslem místo pomocí souborů .htaccess
, měli byste začít úpravou hlavního konfiguračního souboru Apache tak, aby povoloval soubory .htaccess
:
- sudo nano /etc/apache2/apache2.conf
Najděte blok <Directory>
pro adresář /var/www
, který obsahuje kořen dokumentu. Zapněte zpracování .htaccess
změnou směrnice AllowOverride
v tomto bloku z „None“ na „All“:
. . .<Directory /var/www/> Options Indexes FollowSymLinks AllowOverride All Require all granted</Directory>. . .
Po dokončení soubor uložte a zavřete.
Dále musíme přidat .htaccess
soubor do adresáře, který chceme omezit. V naší ukázce omezíme celý kořenový adresář dokumentu (celou webovou stránku), který je založen na adrese /var/www/html
, ale tento soubor můžete umístit do libovolného adresáře, ke kterému chcete omezit přístup:
- sudo nano /var/www/html/.htaccess
V tomto souboru zadejte, že chceme nastavit ověřování Basic
. Pro AuthName
zvolte název sféry, který se uživateli zobrazí při výzvě k zadání pověření. Pomocí direktivy AuthUserFile
nasměrujte Apache na soubor s hesly, který jsme vytvořili. Nakonec budeme pro přístup k tomuto zdroji vyžadovat valid-user
, což znamená, že kdokoli, kdo může ověřit svou totožnost pomocí hesla, bude mít přístup:
AuthType BasicAuthName "Restricted Content"AuthUserFile /etc/apache2/.htpasswdRequire valid-user
Uložení a zavření souboru. Restartujte webový server, aby byl heslem chráněn veškerý obsah v adresáři se souborem .htaccess
nebo pod ním:
- sudo service apache2 restart
Potvrzení ověření heslem
Pro potvrzení, že je obsah chráněn, zkuste k omezenému obsahu přistoupit ve webovém prohlížeči. Měla by se zobrazit výzva k zadání uživatelského jména a hesla, která vypadá takto:
Pokud zadáte správné pověření, bude vám umožněn přístup k obsahu. Pokud zadáte špatné pověření nebo stisknete tlačítko „Storno“, zobrazí se chybová stránka „Neautorizováno“:
Závěr
Teď byste měli mít vše, co potřebujete k nastavení základního ověřování webu. Mějte na paměti, že ochrana heslem by měla být kombinována se šifrováním SSL, aby se vaše přihlašovací údaje neposílaly na server v prostém textu. Chcete-li se dozvědět, jak vytvořit certifikát SSL s vlastním podpisem pro použití s Apachem, postupujte podle tohoto návodu. Chcete-li se dozvědět, jak nainstalovat komerční certifikát, postupujte podle tohoto návodu.