O phpMyAdmin pisałem choćby podczas opisu instalacji i konfiguracji serwera WWW na przykładzie Raspberry Pi (Raspbian/Debian).

Dziś wrócę na chwilę do tego tematu – ustawimy dodatkowe zabezpieczenie (nazwa użytkownika i hasło).

Apache2: phpMyAdmin i .htaccess

Zaczniemy od utworzenia pliku .htaccess:

sudo nano /usr/share/phpmyadmin/.htaccess

i w treści dodajemy:

AuthType Basic
AuthName "Wymagana autoryzacja"
AuthUserFile /ścieżka/do/pliku/z/hasłem/.htpasswd
Require valid-user

Następnie tworzymy plik z hasłem:

sudo htpasswd -c /ścieżka/do/pliku/z/hasłem/.htpasswd nazwa_użytkownika

Lub z wykorzystaniem trochę bardziej skomplikowanego algorytmu:

sudo htpasswd -c -B bcrypt /ścieżka/do/pliku/z/hasłem/.htpasswd nazwa_użytkownika

I jeszcze troszkę podkręcamy:

sudo htpasswd -c -C7 -B bcrypt /ścieżka/do/pliku/z/hasłem/.htpasswd nazwa_użytkownika

Pojawi się monit o wpisanie hasła dla tego użytkownika – co oczywiście robimy.

Aktywacja obsługi plików .htaccess

…pewnie trzeba dodać obsługę plików .htaccess do konfiguracji „wirtualnego hosta”.

Połączenie zwykłe:

sudo nano /etc/apache2/sites-enable/000-default

Połączenie szyfrowane (SSL):

sudo nano /etc/apache2/sites-enable/default-ssl

I dodajemy zaraz pod „</Directory>” taki wpis:

<Directory /usr/share/phpmyadmin/>
AllowOverride ALL
</Directory>

Dostęp tylko z wybranych adresów IP

Możemy też – dodatkowo lub zamiast – zezwolić na dostęp do phpMyAdmin tylko ze zdefiniowanych adresów IP.

W tym celu ponownie edytujemy (lub tworzymy) plik .htaccess:

sudo nano /usr/share/phpmyadmin/.htaccess

i w treści wpisujemy:

order deny,allow
deny from all
allow from Adres_IP

Można też zezwolić na dostęp z konkretnego zakresu, np. w ramach sieci LAN:

allow from 10.*.*.*
allow from 10.0.0.0-10.255.255.255
allow from 10.0-255.0-255.0-255

Restart Apache

Na koniec zmian (tych i wcześniejszych) robimy restart serwera:

sudo service apache2 restart

Nginx i strona na hasło (np. phpMyAdmin)

W przypadku serwera Nginx nie ma wprawdzie obsługi plików .htaccess, ale podobny efekt – dostęp do katalogu/adresu – możemy ustawić za pomocą edycji pliku vHosta, np.:

sudo nano /etc/nginx/sites-enabled/default

i w danej „lokalizacji” dodajemy:

auth_basic "Wymagana autoryzacja";
auth_basic_user_file /ścieżka/do/pliku/z/hasłem/.htpasswd;

Dla phpMyAdmin będzie to wyglądało tak:

location /phpmyadmin {
[...]
auth_basic "Wymagana autoryzacja";
auth_basic_user_file /ścieżka/do/pliku/z/hasłem/.htpasswd;
[...]
}

Na koniec restart lub odświeżenie ustawień serwera:

sudo service nginx restart
sudo service nginx reload

Plik z hasłem (.htpasswd) dla Nginxa ma taki sam format jak dla Apache2, więc można wygenerować go tym samym narzędziem…

STOP – Wymagana autoryzacja

I cieszymy się np. dostępem do phpMyAdmin z dodatkowym uwierzytelnieniem:

(!) Zgłoś błąd na stronie