Introducere
Când configurați un server web, există adesea secțiuni ale site-ului la care doriți să restricționați accesul. Aplicațiile web oferă adesea propriile metode de autentificare și autorizare, dar serverul web în sine poate fi folosit pentru a restricționa accesul dacă acestea sunt inadecvate sau indisponibile.
În acest ghid, vom demonstra cum să protejăm cu parolă activele pe un server web Apache care rulează pe Ubuntu 14.04.
Precondiții
Pentru a începe, veți avea nevoie de acces la un mediu de server Ubuntu 14.04. Veți avea nevoie de un utilizator non-root cu privilegii sudo
pentru a putea efectua sarcini administrative. Pentru a învăța cum să creați un astfel de utilizator, urmați ghidul nostru de configurare inițială a serverului Ubuntu 14.04.
Instalați pachetul Apache Utilities
Pentru a crea fișierul care va stoca parolele necesare pentru a accesa conținutul nostru restricționat, vom folosi un utilitar numit htpasswd
. Acesta se găsește în pachetul apache2-utils
din cadrul depozitelor Ubuntu.
Actualizați memoria cache a pachetului local și instalați pachetul prin tastarea acestei comenzi. Vom profita de această ocazie pentru a lua și serverul Apache2 în cazul în care acesta nu este încă instalat pe server:
- sudo apt-get update
- sudo apt-get install apache2 apache2-utils
Crearea fișierului de parole
Acum avem acces la comanda htpasswd
. O putem folosi pentru a crea un fișier de parole pe care Apache îl poate folosi pentru a autentifica utilizatorii. Vom crea în acest scop un fișier ascuns numit .htpasswd
în directorul nostru de configurare /etc/apache2
.
Prima dată când folosim acest utilitar, trebuie să adăugăm opțiunea -c
pentru a crea fișierul specificat. Specificăm un nume de utilizator (sammy
în acest exemplu) la sfârșitul comenzii pentru a crea o nouă intrare în cadrul fișierului:
- sudo htpasswd -c /etc/apache2/.htpasswd sammy
Vă va fi cerut să furnizați și să confirmați o parolă pentru utilizator.
Lăsați argumentul -c
pentru orice utilizator suplimentar pe care doriți să-l adăugați:
- sudo htpasswd /etc/apache2/.htpasswd another_user
Dacă vizualizăm conținutul fișierului, putem vedea numele de utilizator și parola criptată pentru fiecare înregistrare:
- cat /etc/apache2/.htpasswd
Outputsammy:$apr1$lzxsIfXG$tmCvCfb49vpPFwKGVsuYz.another_user:$apr1$p1E9MeAf$kiAhneUwr.MhAE2kKGYHK.
Configurați autentificarea parolei Apache
Acum că avem un fișier cu utilizatorii și parolele noastre într-un format pe care Apache îl poate citi, trebuie să configurăm Apache pentru a verifica acest fișier înainte de a servi conținutul nostru protejat. Putem face acest lucru în două moduri diferite.
Prima opțiune este de a edita configurația Apache și de a adăuga protecția noastră prin parolă la fișierul virtual host. Acest lucru va oferi, în general, o performanță mai bună, deoarece evită cheltuiala cu citirea fișierelor de configurare distribuite. Dacă aveți această opțiune, această metodă este recomandată.
Dacă nu aveți posibilitatea de a modifica fișierul virtual host (sau dacă folosiți deja fișierele .htaccess files for other purposes), you can restrict access using an
.htaccessfile. Apache uses
.htaccess` pentru a permite ca anumite elemente de configurare să fie setate într-un fișier dintr-un director de conținut. Dezavantajul este că Apache trebuie să recitească aceste fișiere la fiecare solicitare care implică directorul, ceea ce poate avea un impact asupra performanțelor.
Alegeți opțiunea care se potrivește cel mai bine nevoilor dumneavoastră mai jos.
Configurarea controlului accesului în cadrul definiției gazdei virtuale
Începeți prin a deschide fișierul gazdei virtuale la care doriți să adăugați o restricție. Pentru exemplul nostru, vom folosi fișierul 000-default.conf
care conține gazda virtuală implicită instalată prin pachetul apache din Ubuntu:
- sudo nano /etc/apache2/sites-enabled/000-default.conf
În interior, cu comentariile eliminate, fișierul ar trebui să arate similar cu acesta:
<VirtualHost *:80> ServerAdmin webmaster@localhost DocumentRoot /var/www/html ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined</VirtualHost>
Autentificarea se face pe bază de director. Pentru a configura autentificarea, va trebui să vizați directorul pe care doriți să îl restricționați cu un bloc <Directory ___>
. În exemplul nostru, vom restricționa întreaga rădăcină a documentului, dar puteți modifica această listă pentru a viza doar un anumit director din spațiul web:
<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>
În acest bloc de directoare, specificați că dorim să setăm autentificarea Basic
. Pentru AuthName
, alegeți un nume de domeniu care va fi afișat utilizatorului atunci când i se solicită acreditările. Utilizați directiva AuthUserFile
pentru a direcționa Apache către fișierul de parole pe care l-am creat. În cele din urmă, vom avea nevoie de un valid-user
pentru a accesa această resursă, ceea ce înseamnă că oricine care își poate verifica identitatea cu o parolă va avea acces:
<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>
Salvați și închideți fișierul când ați terminat. Reporniți Apache pentru a implementa politica de parole:
- sudo service apache2 restart
Directorul pe care l-ați specificat ar trebui să fie acum protejat prin parolă.
Configurarea controlului accesului cu fișiere .htaccess
Dacă doriți să configurați protecția prin parolă folosind în schimb fișiere .htaccess
, ar trebui să începeți prin editarea fișierului principal de configurare Apache pentru a permite fișierele .htaccess
:
- sudo nano /etc/apache2/apache2.conf
Căutați blocul <Directory>
pentru directorul /var/www
care conține rădăcina documentului. Activați procesarea .htaccess
schimbând directiva AllowOverride
din acel bloc de la „None” la „All”:
. . .<Directory /var/www/> Options Indexes FollowSymLinks AllowOverride All Require all granted</Directory>. . .
Salvați și închideți fișierul când ați terminat.
În continuare, trebuie să adăugăm un fișier .htaccess
la directorul pe care dorim să-l restricționăm. În demonstrația noastră, vom restricționa întreaga rădăcină a documentului (întregul site web) care se află la /var/www/html
, dar puteți plasa acest fișier în orice director la care doriți să restricționați accesul:
- sudo nano /var/www/html/.htaccess
În acest fișier, specificați că dorim să setăm autentificarea Basic
. Pentru AuthName
, alegeți un nume de domeniu care va fi afișat utilizatorului atunci când i se solicită acreditările. Utilizați directiva AuthUserFile
pentru a direcționa Apache către fișierul de parole pe care l-am creat. În cele din urmă, vom avea nevoie de un valid-user
pentru a accesa această resursă, ceea ce înseamnă că oricine care își poate verifica identitatea cu o parolă va putea intra:
AuthType BasicAuthName "Restricted Content"AuthUserFile /etc/apache2/.htpasswdRequire valid-user
Salvați și închideți fișierul. Reporniți serverul web pentru a proteja cu parolă tot conținutul din sau de sub directorul cu fișierul .htaccess
:
- sudo service apache2 restart
Confirmați autentificarea cu parolă
Pentru a confirma că conținutul este protejat, încercați să accesați conținutul restricționat într-un browser web. Ar trebui să vi se prezinte o solicitare de nume de utilizator și parolă care arată astfel:
Dacă introduceți acreditările corecte, vi se va permite să accesați conținutul. Dacă introduceți acreditările greșite sau apăsați „Cancel” (Anulează), veți vedea pagina de eroare „Unauthorized” (neautorizat):
Concluzie
Ar trebui să aveți acum tot ce vă trebuie pentru a configura autentificarea de bază pentru site-ul dumneavoastră. Rețineți că protecția prin parolă ar trebui să fie combinată cu criptarea SSL, astfel încât acreditările dvs. să nu fie trimise către server în text simplu. Pentru a învăța cum să creați un certificat SSL auto-semnat pentru a-l utiliza cu Apache, urmați acest ghid. Pentru a afla cum să instalați un certificat comercial, urmați acest ghid.
.