wtorek, 26 maja 2015

[APACHE] Autoryzacja za pomocą .htpasswd

TRUE
461398784422923059
W Apache'u możemy ograniczyć dostęp do dowolnego katalogu za pomocą ustawienia wymogu autoryzacji. Jest to bardzo przydatna opcja, dzięki której możemy ograniczyć dostęp np. do testowych wersji projektów dla swoich klientów na zasadzie konieczności podania loginu oraz hasła użytkownika. Jest to prosta autoryzacja oparta na dwóch plikach, które w tym artykule przygotujemy - pliku .htpasswd, w którym będziemy przechowywać nasze hasła, oraz pliku .htaccess, który będzie z tego pliku korzystał w celu autoryzacji użytkownika.

O ile jednak plik .htaccess utworzymy w zwykłym notatniku, to już z plikiem .htpasswd będzie więcej zachodu, gdyż tego pliku nie jesteśmy w stanie przygotować "odręcznie". Wynika to z faktu, iż hasła przechowywane w tym pliku zapisywane są w formie szyfrowanej, zatem skorzystać będziemy musieli z jakiegoś narzędzia generującego nasze hasła w formie zaszyfrowanej.

.htpasswd

Pierwszym i podstawowym narzędziem służacym do generowania pliku z hasłami jest udostępnione w pakiecie z serwerem Apache konsolowe narzędzie o nazwie:
[code]htpasswd.exe[/code]
Innym sposobem na utworzenie pliku z hasłami jest skorzystanie z któregoś z dostępnych on-line generatorów.

Oto ich krótka lista:
http://www.htaccesstools.com/htpasswd-generator/
http://www.askapache.com/online-tools/htpasswd-generator/
http://aspirine.org/htpasswd_en.html
http://www.htpasswdgenerator.net/

Jak wygląda taki plik z hasłami?
Jest to zwykły plik tekstowy o postaci:
[code]login1:hasło1
login2:hasło2
login3:hasło3
...itd
[/code]

Przykład pliku .htpasswd:
[code]
marek:$apr1$mFL7znbn$cQMJYoAf5gSXw0d2GAGNx.
anna:$apr1$ggN.pSSf$Dld5WOZkHlPP03g534R0X/
janusz:$apr1$GCpfbZ26$omnuEq040nxzQlYkYum.j.
...itd
[/code]

Użytkowników może być dowolna ilość, należy jednak pamiętać, aby każdy z nich określony był w oddzielnej linijce, na zasadzie:
[code]nazwa_użytkownika1:hasło_użytkownika1
nazwa_użytkownika2:hasło_użytkownika2
nazwa_użytkownika3:hasło_użytkownika3[/code]
Skorzystamy teraz z wbudowanego w Apache narzędzia, aby wygenerować nasz plik z hasłami.
Na początek mała uwaga - plik z hasłami przechowujemy w folderze niedostępnym z zewnątrz.
Stwórzmy sobie jakiś wydzielony folder, np.:
[code]C:\top_secret[/code]
w Windowsie
lub
[code]/home/użytkownik/top_secret[/code]
na Linuxie
i tam zapisujmy hasła.
Ważne jest jedynie, aby folder nie był dostępny z poziomu WWW.

Składnia poleceń narzędzia htpasswd wygląda następująco:
[code]htpasswd.exe -parametr "/ŚCIEŻKA/DO/PLIKU/Z/HASŁAMI" nazwa_użytkownika[/code]

Utwórzmy więc np. użytkownika o nazwie janusz i dowolnym haśle.
Narzędzie pracuje w terminalu, wejdźmy więc do terminalu/konsoli i wpiszmy:
[code]htpasswd.exe -c "C:\top_secret\.htpasswd" janusz[/code]
Wciśnijmy ENTER, podajmy dwukrotnie hasło i to wszystko - plik został wygenerowany.

O ile wszystko wykonaliśmy poprawnie, plik C:\top_secret\.htpasswd powinień wyglądać jakoś tak:
[code]janusz:$apr1$R0L9yuuR$5yFjvKY5zzjcimetH3l.L.[/code]
Kolejnego użytkownika do tego pliku dodamy tak samo, ale pominiemy teraz parametr -c (skrót od create). Dodajmy kolejnego użytkownika np. o nazwie anna i dowolnym haśle:
[code]htpasswd.exe "C:\top_secret\.htpasswd" anna[/code]
Nasz plik ma już dwóch użytkowników:
[code]
janusz:$apr1$zEw590ap$o9OvCKEbofz5v2SFE9SQJ0
anna:$apr1$AQA3qYnC$z32ZOrJNJWExBL6Y0BKIl0
[/code]

.htaccess

Teraz czas na zabawę z plikiem .htaccess.
Załóżmy, że na naszym serwerze posiadamy katalog:
[code]C:\WWW\top_secret_area[/code]
który chcemy zabezpieczyć hasłem.

Utwórzmy w nim plik .htaccess i wpiszmy do niego to co poniższe:
[code]
AuthType basic
AuthName "Top Secret Area"
AuthUserFile C:/top_secret/.htpasswd
Require valid-user
[/code]
Zapiszmy plik.
Teraz po koleji co tak naprawdę zrobiliśmy:
  • AuthType - określa sposób autoryzacji, może to być basic, lub digest, my wykorzystamy basic
  • AuthName - to nazwa wyświetlana po wejściu do chronionego zasobu, może być dowolna
  • AuthUserFile - podajemy pełną ścieżkę do pliku z hasłami
  • Require - wymieniamy po spacjach nazwy użytkowników, lub grup które mogą się logować, albo podajemy valid-user, które oznacza, że logować może się każdy użytkownik opisany w pliku z hasłami. W przypadku podawania użytkownika:
    Require user nazwa_użytkownika1 nazwa_użytkownika2 itd...
    W przypadku grup:
    Require group nazwa_grupy1 nazwa_grupy2 itd.....

Jeśli wszystko wykonaliśmy poprawnie, to po wejściu do naszego katalogu:
[code]http://localhost/top_secret_area[/code]
wyświetli nam się prośba o podanie loginu i hasła w celu uzyskania dostępu do zawartości.
Od tej chwili jedynie określeni przez nas użytkownicy mają dostęp do tego folderu.

Możemy też określać nazwy grup użytkowników, którzy mogą się logować:
W przypadku takim, tworzymy plik z grupami np.:
[code]C:\top_secret\groups[/code]
I wpisujemy w nim np.:
[code]tajna_grupa: janusz anna[/code]
Grup możemy dodać kilka, każdą w oddzielnej linijce, np.:
[code]tajna_grupa: janusz anna
inna_grupa: adam marek[/code]
Gdy mamy już plik z definicjami grup, dołączamy go do .htaccess i określamy kto może się logować tym razem podając grupę, a nie pojedyńczych użytkowników:
[code]
AuthType basic
AuthName "Top Secret Area"
AuthUserFile C:/top_secret/.htpasswd
AuthGroupFile C:/top_secret/groups
Require group tajna_grupa
[/code]
Uwaga: aby móc skorzystać z modułu autoryzacji w pliku .htaccess nasz katalog musi mieć ustawioną w konfiguracji httpd.conf dyrektywę AllowOverride na wartość all lub conajmniej na AuthConfig.

3 komentarze:

Masz sugestię? Znalazłeś błąd? Napisz komentarz! :)

webmaester.pl - profesjonalne projektowanie WWW i webaplikacji
webmaester.pl - profesjonalne projektowanie WWW i webaplikacji