- Introduction
- Wymagania wstępne
- Instalacja pakietu Apache Utilities Package
- Utwórz plik z hasłem
- Konfigurowanie uwierzytelniania hasłem Apache
- Konfigurowanie kontroli dostępu w ramach definicji hosta wirtualnego
- Konfigurowanie kontroli dostępu za pomocą plików .htaccess
- Potwierdź uwierzytelnianie hasłem
- Wniosek
Introduction
Przy konfigurowaniu serwera WWW, często istnieją sekcje witryny, do których chcesz ograniczyć dostęp. Aplikacje internetowe często dostarczają własnych metod uwierzytelniania i autoryzacji, ale sam serwer WWW może być użyty do ograniczenia dostępu, jeśli są one nieodpowiednie lub niedostępne.
W tym przewodniku zademonstrujemy, jak chronić hasłem zasoby na serwerze WWW Apache działającym na Ubuntu 14.04.
Wymagania wstępne
Aby zacząć, potrzebny jest dostęp do środowiska serwerowego Ubuntu 14.04. Będziesz potrzebował użytkownika non-root z uprawnieniami sudo
w celu wykonywania zadań administracyjnych. Aby dowiedzieć się, jak utworzyć takiego użytkownika, postępuj zgodnie z naszym przewodnikiem po wstępnej konfiguracji serwera Ubuntu 14.04.
Instalacja pakietu Apache Utilities Package
Aby utworzyć plik, który będzie przechowywał hasła potrzebne do uzyskania dostępu do naszej zastrzeżonej zawartości, użyjemy narzędzia o nazwie htpasswd
. Znajdziemy je w pakiecie apache2-utils
w repozytoriach Ubuntu.
Zaktualizuj lokalną pamięć podręczną pakietów i zainstaluj pakiet, wpisując to polecenie. Skorzystamy z okazji, aby również złapać serwer Apache2 w przypadku, gdy nie jest on jeszcze zainstalowany na serwerze:
- sudo apt-get update
- sudo apt-get install apache2 apache2-utils
Utwórz plik z hasłem
Mamy teraz dostęp do polecenia htpasswd
. Możemy jej użyć do stworzenia pliku z hasłem, którego Apache będzie mógł użyć do uwierzytelnienia użytkowników. Utworzymy w tym celu ukryty plik o nazwie .htpasswd
w naszym katalogu konfiguracyjnym /etc/apache2
.
Przy pierwszym użyciu tego narzędzia musimy dodać opcję -c
, aby utworzyć określony plik. Podajemy nazwę użytkownika (sammy
w tym przykładzie) na końcu polecenia, aby utworzyć nowy wpis w pliku:
- sudo htpasswd -c /etc/apache2/.htpasswd sammy
Zostaniesz poproszony o podanie i potwierdzenie hasła dla użytkownika.
Opuść argument -c
w przypadku dodatkowych użytkowników, których chcesz dodać:
- sudo htpasswd /etc/apache2/.htpasswd another_user
Jeśli przejrzymy zawartość pliku, możemy zobaczyć nazwę użytkownika i zaszyfrowane hasło dla każdego rekordu:
- cat /etc/apache2/.htpasswd
Outputsammy:$apr1$lzxsIfXG$tmCvCfb49vpPFwKGVsuYz.another_user:$apr1$p1E9MeAf$kiAhneUwr.MhAE2kKGYHK.
Konfigurowanie uwierzytelniania hasłem Apache
Teraz, gdy mamy plik z naszymi użytkownikami i hasłami w formacie, który Apache może odczytać, musimy skonfigurować Apache, aby sprawdzał ten plik przed serwowaniem naszej chronionej zawartości. Możemy to zrobić na dwa różne sposoby.
Pierwszą opcją jest edycja konfiguracji Apache i dodanie naszej ochrony hasłem do pliku wirtualnego hosta. To generalnie daje lepszą wydajność, ponieważ pozwala uniknąć kosztów czytania rozproszonych plików konfiguracyjnych. Jeśli masz taką możliwość, ta metoda jest zalecana.
Jeśli nie masz możliwości modyfikacji pliku wirtualnego hosta (lub jeśli już używasz plików .htaccess files for other purposes), you can restrict access using an
.htaccessfile. Apache uses
.htaccess` w celu umożliwienia ustawienia pewnych elementów konfiguracji w pliku w katalogu zawartości. Wadą jest to, że Apache musi ponownie odczytać te pliki na każde żądanie, które dotyczy katalogu, co może wpłynąć na wydajność.
Wybierz opcję, która najlepiej odpowiada twoim potrzebom poniżej.
Konfigurowanie kontroli dostępu w ramach definicji hosta wirtualnego
Zacznij od otwarcia pliku hosta wirtualnego, do którego chcesz dodać ograniczenie. Dla naszego przykładu użyjemy pliku 000-default.conf
, który zawiera domyślnego wirtualnego hosta zainstalowanego przez pakiet apache Ubuntu:
- sudo nano /etc/apache2/sites-enabled/000-default.conf
Wewnątrz, z usuniętymi komentarzami, plik powinien wyglądać podobnie do tego:
<VirtualHost *:80> ServerAdmin webmaster@localhost DocumentRoot /var/www/html ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined</VirtualHost>
Uwierzytelnianie odbywa się na zasadzie per-directory. Aby skonfigurować uwierzytelnianie, musisz wskazać katalog, który chcesz ograniczyć za pomocą bloku <Directory ___>
. W naszym przykładzie ograniczymy cały korzeń dokumentu, ale możesz zmodyfikować ten listing, aby ograniczyć się do określonego katalogu w przestrzeni WWW:
<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>
W tym bloku katalogu określ, że chcemy ustawić uwierzytelnianie Basic
. Dla AuthName
wybierz nazwę królestwa, która będzie wyświetlana użytkownikowi podczas monitów o poświadczenia. Użyj dyrektywy AuthUserFile
aby wskazać Apache’owi plik z hasłem, który stworzyliśmy. Wreszcie, będziemy wymagać valid-user
, aby uzyskać dostęp do tego zasobu, co oznacza, że każdy, kto może zweryfikować swoją tożsamość za pomocą hasła, zostanie wpuszczony:
<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>
Zapisz i zamknij plik, gdy skończysz. Zrestartuj Apache, aby wdrożyć politykę haseł:
- sudo service apache2 restart
Katalog, który określiłeś, powinien być teraz chroniony hasłem.
Konfigurowanie kontroli dostępu za pomocą plików .htaccess
Jeśli chcesz skonfigurować ochronę hasłem za pomocą plików .htaccess
, powinieneś zacząć od edycji głównego pliku konfiguracyjnego Apache, aby zezwolić na pliki .htaccess
:
- sudo nano /etc/apache2/apache2.conf
Znajdź blok <Directory>
dla katalogu /var/www
, który przechowuje korzeń dokumentu. Włącz przetwarzanie .htaccess
poprzez zmianę dyrektywy AllowOverride
w tym bloku z „None” na „All”:
. . .<Directory /var/www/> Options Indexes FollowSymLinks AllowOverride All Require all granted</Directory>. . .
Zapisz i zamknij plik, gdy skończysz.
Następnie musimy dodać plik .htaccess
do katalogu, który chcemy ograniczyć. W naszej demonstracji ograniczymy cały korzeń dokumentu (całą witrynę), który znajduje się pod adresem /var/www/html
, ale możesz umieścić ten plik w dowolnym katalogu, do którego chcesz ograniczyć dostęp:
- sudo nano /var/www/html/.htaccess
W tym pliku określ, że chcemy skonfigurować uwierzytelnianie Basic
. Dla AuthName
wybierz nazwę królestwa, która będzie wyświetlana użytkownikowi podczas pytania o poświadczenia. Użyj dyrektywy AuthUserFile
aby wskazać Apache’owi plik z hasłem, który stworzyliśmy. Wreszcie, będziemy wymagać valid-user
, aby uzyskać dostęp do tego zasobu, co oznacza, że każdy, kto może zweryfikować swoją tożsamość za pomocą hasła, zostanie wpuszczony:
AuthType BasicAuthName "Restricted Content"AuthUserFile /etc/apache2/.htpasswdRequire valid-user
Zapisz i zamknij plik. Uruchom ponownie serwer WWW, aby chronić hasłem całą zawartość w lub poniżej katalogu z plikiem .htaccess
:
- sudo service apache2 restart
Potwierdź uwierzytelnianie hasłem
Aby potwierdzić, że zawartość jest chroniona, spróbuj uzyskać dostęp do zastrzeżonej zawartości w przeglądarce internetowej. Powinno zostać wyświetlone zapytanie o nazwę użytkownika i hasło, które wygląda następująco:
Jeśli wprowadzisz poprawne dane uwierzytelniające, uzyskasz dostęp do zawartości. Jeśli wprowadzisz błędne poświadczenia lub klikniesz „Anuluj”, zobaczysz stronę błędu „Nieautoryzowany”:
Wniosek
Powinieneś teraz mieć wszystko, czego potrzebujesz, aby skonfigurować podstawowe uwierzytelnianie dla swojej witryny. Pamiętaj, że ochrona hasłem powinna być połączona z szyfrowaniem SSL, aby Twoje dane uwierzytelniające nie były wysyłane do serwera w postaci zwykłego tekstu. Aby dowiedzieć się, jak utworzyć własny certyfikat SSL dla Apache, postępuj zgodnie z tym przewodnikiem. Aby dowiedzieć się, jak zainstalować komercyjny certyfikat, skorzystaj z tego poradnika.