Polski

Instalacja i zabezpieczenie phpMyAdmin na VPS Linux

2 min
Hosting VPS/VDS

phpMyAdmin to wygodny interfejs webowy dla MariaDB i MySQL, a zarazem jeden z najczęściej skanowanych adresów w Internecie. Ten poradnik pokazuje dwie instalacje na Twoim VPS Linux Infrawire: pakiet apt z Apache oraz ręczną instalację za Nginx, a potem środki, które trzymają go z dala od botów.

📋 Wymagania wstępne

  • VPS z Ubuntu 24.04 lub Debianem 12 z dostępem root lub sudo (adres IP i hasło roota znajdziesz w panelu klienta)
  • Działający stos LAMP (opcja A) lub LEMP (opcja B) z MariaDB
  • Twój własny publiczny adres IP, zwany poniżej ADMIN_IP

1. Opcja A: pakiet apt z Apache

Bash
apt update apt install -y phpmyadmin php-mbstring php-zip php-gd php-curl

W instalatorze zaznacz apache2 spacją (musi pojawić się gwiazdka), następnie odpowiedz „Tak”, aby skonfigurować bazę przez dbconfig-common, i ustaw hasło dla wewnętrznego konta phpMyAdmin. Potem przeładuj Apache:

Bash
phpenmod mbstring systemctl reload apache2

phpMyAdmin jest teraz dostępny pod adresem http://VPS_IP/phpmyadmin.

2. Osobny użytkownik bazy danych

Nigdy nie loguj się jako root. W MariaDB na Ubuntu i Debianie root używa uwierzytelniania unix_socket, a phpMyAdmin i tak go odrzuci: zostaw tak i utwórz zwykłe konto.

Bash
mariadb
SQL
CREATE USER 'pmauser'@'localhost' IDENTIFIED BY 'STRONG_PASSWORD'; GRANT ALL PRIVILEGES ON appdb.* TO 'pmauser'@'localhost'; FLUSH PRIVILEGES; EXIT;

Nadaj uprawnienia tylko do baz, którymi użytkownik naprawdę zarządza. Nie włączaj AllowNoPassword w konfiguracji.

3. Ukrycie adresu URL i uwierzytelnianie (Apache)

Zmień domyślny alias na losowy i utwórz plik z hasłami:

Bash
SUFFIX=$(openssl rand -hex 6); echo "pma-$SUFFIX" sed -i "s#Alias /phpmyadmin#Alias /pma-$SUFFIX#" /etc/phpmyadmin/apache.conf htpasswd -c /etc/phpmyadmin/.htpasswd USER

Następnie dodaj te linie wewnątrz istniejącego bloku <Directory /usr/share/phpmyadmin> w /etc/phpmyadmin/apache.conf:

Apache
1AuthType Basic 2AuthName 'Restricted area' 3AuthUserFile /etc/phpmyadmin/.htpasswd 4<RequireAll> 5 Require valid-user 6 Require ip ADMIN_IP 7</RequireAll>

Bez <RequireAll> Apache zaakceptowałby którykolwiek z warunków; z nim wymagane są jednocześnie hasło i adres IP.

Bash
apache2ctl configtest && systemctl reload apache2

4. Opcja B: ręczna instalacja za Nginx

Zainstaluj zależności, a następnie pobierz najnowsze wydanie z oficjalnej strony phpMyAdmin (zastąp VERSION aktualnym numerem):

Bash
apt install -y nginx php-fpm php-mysql php-mbstring php-xml php-zip php-gd php-curl apache2-utils cd /tmp wget https://files.phpmyadmin.net/phpMyAdmin/VERSION/phpMyAdmin-VERSION-all-languages.tar.gz tar xzf phpMyAdmin-VERSION-all-languages.tar.gz mkdir -p /var/www/pma mv phpMyAdmin-VERSION-all-languages /var/www/pma/pma-SECRET cd /var/www/pma/pma-SECRET cp config.sample.inc.php config.inc.php openssl rand -hex 16

Zastąp pma-SECRET losową nazwą. Edytuj config.inc.php i wklej wygenerowaną wartość (32 znaki) jako sekret:

PHP
$cfg['blowfish_secret'] = 'RANDOM_32_CHARS'; $cfg['TempDir'] = '/var/lib/phpmyadmin/tmp';
Bash
mkdir -p /var/lib/phpmyadmin/tmp chown www-data:www-data /var/lib/phpmyadmin/tmp chmod 700 /var/lib/phpmyadmin/tmp chown -R root:www-data /var/www/pma chmod 640 /var/www/pma/pma-SECRET/config.inc.php htpasswd -c /etc/nginx/.htpasswd USER

Dodaj ten blok wewnątrz server { ... } swojej witryny. W Debianie 12 gniazdo to php8.2-fpm.sock, a nie php8.3-fpm.sock:

Nginx
1location ^~ /pma-SECRET/ { 2 allow ADMIN_IP; 3 deny all; 4 auth_basic 'Restricted area'; 5 auth_basic_user_file /etc/nginx/.htpasswd; 6 root /var/www/pma; 7 index index.php; 8 9 location ~ \.php$ { 10 include snippets/fastcgi-php.conf; 11 fastcgi_pass unix:/run/php/php8.3-fpm.sock; 12 } 13}
Bash
nginx -t && systemctl reload nginx

5. Najbezpieczniej: tunel SSH

Jeśli nie chcesz żadnej publicznej ekspozycji, udostępnij interfejs tylko z samego VPS i otwórz tunel ze swojego komputera:

Bash
ssh -L 8080:127.0.0.1:80 USER@VPS_IP

Podczas otwartej sesji wejdź na http://127.0.0.1:8080/pma-SECRET/. W Apache zamień w bloku Require ip ADMIN_IP na Require local; w Nginx użyj allow 127.0.0.1;. To rozwiązuje też problem zmiennego domowego adresu IP.

6. Weryfikacja zabezpieczeń

Bash
curl -sI http://VPS_IP/phpmyadmin | head -n 1 curl -sI http://VPS_IP/pma-SECRET/ | head -n 1

Pierwsze żądanie musi zwrócić 404. Drugie zwraca 403 z każdego adresu innego niż ADMIN_IP, a z Twojego 401, dopóki nie podasz hasła basic auth. Udostępniaj phpMyAdmin wyłącznie przez HTTPS, inaczej hasła przesyłane są jawnym tekstem.

🛠️ Rozwiązywanie problemów

404 Not Found. Alias lub nazwa location nie zgadza się z wpisanym adresem albo nie przeładowano serwera WWW.

403 Forbidden dla Ciebie. Zmienił się Twój publiczny adres IP. Zaktualizuj ADMIN_IP lub przejdź na tunel SSH.

„The mbstring extension is missing” lub pusta strona. Zainstaluj php-mbstring, następnie uruchom phpenmod mbstring (Apache) lub zrestartuj php8.3-fpm (Nginx).

Access denied dla roota. To oczekiwane i pożądane. Zaloguj się na użytkownika utworzonego w kroku 2.


🎉 phpMyAdmin jest zainstalowany, ukryty i ograniczony: tylko Ty masz dostęp do swoich baz danych.

Bądź na bieżąco z najnowszymi ofertami, zniżkami i promocjami specjalnymi.

Zobacz promocje

Używamy plików cookie

Używamy plików cookie analitycznych, aby ulepszać nasz serwis. Nie sprzedajemy danych stronom trzecim. Więcej w polityce prywatności.