SKILL LEVEL: SYSADMIN/ADVANCED - TIME: 5-10 MINS
Úvod
V tomto tutoriálu vám ukážeme, jak chránit webovou stránku nebo jen složku na webu heslem. V tomto příkladu použijeme nejpopulárnější webový server, Apache2, nicméně podobné metody lze provést i s jinými webovými servery.
Metoda, kterou budeme používat, je základní ověřovací systém, ale lze jej snadno nastavit a umožňuje vám rychle zabezpečit váš web před ostatními lidmi na velkém špatném internetu. Tato metoda se opírá o vytvoření kombinace uživatelského jména a hesla pro vaše stránky. Můžete přidat libovolný počet uživatelských jmen, ale nezapomeňte, že každé heslo budete muset udržovat.
Předpoklady
V tomto příkladu používáme serverovou edici Ubuntu 16.04. Bude to fungovat také na Ubuntu 14.04 a téměř na každé jiné distribuci Linuxu, pokud používáte webový server Apache 2.
V Ubuntu se přihlásíte jako standardní uživatel a pomocí sudo zadáte příkazy root (privilegovaný/superuser). Pokud máte na serveru přihlášení root, můžete místo toho použít toto. Nebudete muset používat sudo, ale pro veškerou bezpečnou správu serveru se doporučuje, abyste prováděli akce pomocí sudo a pracovali jako normální uživatel (bez oprávnění root) k provádění administrativních úloh.
Instalace balíčku Apache Utilities Package
Abychom vytvořili soubor, který bude ukládat hesla potřebná pro přístup k našemu omezenému obsahu, použijeme nástroj nazvaný htpasswd
, který je součástí balíčku apache2-utils. Chcete-li nainstalovat apache2-utils, spusťte následující příkazy:
sudo apt-get update
sudo apt-get install apache2-utils
Výše uvedené předpokládá, že již máte nainstalovaný Apache2 (pokud ne, sudo apt-get install apache2).
Vytvořte soubor s hesly
Nyní máme přístup k htpasswd
příkaz. Můžeme to použít k vytvoření souboru s hesly, který může Apache použít k ověření uživatelů. Pro tento účel vytvoříme skrytý soubor s názvem .htpasswd
v našem /etc/apache2
konfigurační adresář. Všimněte si, že soubory s předponou tečkou (.) jsou automaticky skryté ve standardním výpisu adresáře (např. nejsou zobrazeny pomocí příkazu ls). Pokud je chcete zobrazit, použijte ls -la (dlouhý seznam, všechny soubory).
Při prvním použití tohoto nástroje musíme přidat -c
možnost vytvořit zadaný soubor. Zadáme uživatelské jméno (sammy
v tomto příkladu) na konci příkazu k vytvoření nové položky v souboru:
sudo htpasswd -c /etc/apache2/.htpasswd sammy
Budete požádáni o zadání a potvrzení hesla pro uživatele.
Vynechejte -c
argument pro případné další uživatele, které chcete přidat:
sudo htpasswd /etc/apache2/.htpasswd another_user
Pokud si prohlížíme obsah souboru, můžeme vidět uživatelské jméno a šifrované heslo pro každý záznam:
cat /etc/apache2/.htpasswd
sammy:$apr1$lzxsIfXG$tmCvCfb49vpPFwKGVsuYz.
another_user:$apr1$p1E9MeAf$kiAhneUwr.MhAE2kKGYHK.
Konfigurovat ověřování hesla Apache
Nyní, když máme soubor s našimi uživateli a hesly ve formátu, který Apache umí číst, musíme nakonfigurovat Apache, aby tento soubor zkontroloval před poskytováním našeho chráněného obsahu. Můžeme to udělat 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 vyhnete nákladům na čtení distribuovaných konfiguračních souborů. Pokud máte tuto možnost, doporučujeme tuto metodu.
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 souboru v adresáři obsahu. Nevýhodou je, že Apache musí tyto soubory znovu číst při každém požadavku, který zahrnuje adresář, což může ovlivnit výkon.
Níže 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, ke kterému chcete přidat omezení. V našem příkladu použijeme 000-default.conf
soubor, který obsahuje výchozího virtuálního hostitele nainstalovaného prostřednictvím balíčku Apache Ubuntu:
- sudo nano /etc/apache2/sites-enabled/000-default.conf
Uvnitř, s odstraněnými komentáři, by měl soubor vypadat podobně jako tento:
/etc/apache2/sites-enabled/000-default.conf<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
Autentizace se provádí pro každý adresář. Chcete-li nastavit ověřování, budete muset cílit na adresář, který chcete omezit, pomocí <Directory ___>
blok. V našem příkladu omezíme kořenový adresář celého dokumentu, ale tento výpis můžete upravit tak, aby cílil pouze na konkrétní adresář ve webovém 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 určete, že chceme nastavit Basic
autentizace. Pro AuthName
, zvolte název sféry, který se uživateli zobrazí při výzvě k zadání přihlašovacích údajů. Použijte AuthUserFile
direktiva, která ukazuje Apache na soubor hesel, který jsme vytvořili. Nakonec budeme vyžadovat valid-user
pro přístup k tomuto zdroji, což znamená, že kdokoli, kdo může ověřit svou totožnost pomocí hesla, bude moci v:
<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í uložte a zavřete soubor. Restartujte Apache, abyste implementovali své zásady pro 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 pomocí .htaccess
místo toho byste měli začít úpravou hlavního konfiguračního souboru Apache tak, aby umožňoval .htaccess
soubory:
sudo nano /etc/apache2/apache2.conf
Najděte <Directory>
blok pro /var/www
adresář, který obsahuje kořen dokumentu. Zapněte .htaccess
zpracování změnou parametru AllowOverride
direktiva v tomto bloku z „None“ na „All“:
. . .
<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
. . .
Po dokončení uložte a zavřete soubor.
Dále musíme přidat .htaccess
soubor do adresáře, který chceme omezit. V naší ukázce omezíme kořenový adresář celého dokumentu (celý web), který je založen na /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 určete, že chceme nastavit Basic
autentizace. Pro AuthName
, zvolte název sféry, který se uživateli zobrazí při výzvě k zadání přihlašovacích údajů. Použijte AuthUserFile
direktiva, která ukazuje Apache na soubor hesel, který jsme vytvořili. Nakonec budeme vyžadovat valid-user
pro přístup k tomuto zdroji, což znamená, že kdokoli, kdo může ověřit svou totožnost pomocí hesla, bude moci v:
/var/www/html/.htaccess
AuthType Basic
AuthName "Restricted Content"
AuthUserFile /etc/apache2/.htpasswd
Require valid-user
Uložte a zavřete soubor. Restartujte webový server, aby byl veškerý obsah v adresáři nebo pod ním chráněn heslem pomocí .htaccess
soubor:
- restartování služby sudo apache2
Potvrďte ověření hesla
Chcete-li si ověřit, že je váš obsah chráněn, pokuste se získat přístup k omezenému obsahu ve webovém prohlížeči. Mělo by se vám zobrazit uživatelské jméno a heslo, které vypadá takto:
Pokud zadáte správné přihlašovací údaje, bude vám povolen přístup k obsahu. Pokud zadáte nesprávné přihlašovací údaje nebo stisknete „Zrušit“, zobrazí se chybová stránka „Neoprávněné“:
Závěr
Nyní byste měli mít vše, co potřebujete k nastavení základního ověřování pro váš web. Veškerá ochrana heslem by měla být kombinována se šifrováním SSL, aby vaše přihlašovací údaje nebyly odesílány na server v prostém textu.
Děkujeme lidem z digitalocean.com za část obsahu na této stránce. Určitě se na ně podívejte, mají úžasné webhostingové služby, které vyhovují každému rozpočtu!