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
Output
sammy:$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:

/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>

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:

/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 <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:

/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 <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”:

/etc/apache2/apache2.conf
. . .<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:

/var/www/html/.htaccess
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.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.