Instalar e proteger o phpMyAdmin num VPS Linux

3 min
Alojamento VPS/VDS

O phpMyAdmin é uma interface web prática para MariaDB e MySQL, mas também um dos URL mais analisados da Internet. Este guia apresenta duas instalações no seu VPS Linux Infrawire, o pacote apt com Apache e uma instalação manual atrás do Nginx, e depois as medidas que o mantêm fora do alcance dos bots.

📋 Pré-requisitos

  • Um VPS com Ubuntu 24.04 ou Debian 12, com acesso root ou sudo (o IP e a palavra-passe root estão na sua área de cliente)
  • Uma stack LAMP (opção A) ou LEMP (opção B) funcional com MariaDB
  • O seu próprio IP público, designado ADMIN_IP abaixo

1. Opção A: instalar o pacote apt com Apache

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

No instalador, selecione apache2 com a barra de espaço (deve aparecer um asterisco), responda "Sim" para configurar a base de dados com o dbconfig-common e defina uma palavra-passe para a conta interna do phpMyAdmin. Depois recarregue o Apache:

Bash
phpenmod mbstring systemctl reload apache2

O phpMyAdmin já está disponível em http://VPS_IP/phpmyadmin.

2. Criar um utilizador de base de dados dedicado

Nunca inicie sessão como root. No MariaDB em Ubuntu e Debian, o root usa autenticação unix_socket e o phpMyAdmin recusá-lo-á de qualquer forma: deixe assim e crie uma conta normal.

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

Conceda direitos apenas sobre as bases de dados que o utilizador realmente gere. Não ative AllowNoPassword na configuração.

3. Ocultar o URL e adicionar autenticação (Apache)

Substitua o alias predefinido por um aleatório e crie um ficheiro de palavras-passe:

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

Depois adicione estas linhas dentro do bloco <Directory /usr/share/phpmyadmin> existente em /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>

Sem <RequireAll>, o Apache aceitaria qualquer uma das condições; com ele, são exigidas a palavra-passe e o IP.

Bash
apache2ctl configtest && systemctl reload apache2

4. Opção B: instalação manual atrás do Nginx

Instale as dependências e depois descarregue a versão mais recente a partir do site oficial do phpMyAdmin (substitua VERSION pelo número atual):

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

Substitua pma-SECRET por um nome aleatório. Edite config.inc.php e cole o valor gerado (32 caracteres) como segredo:

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

Adicione este bloco dentro do server { ... } do seu site. No Debian 12, o socket é php8.2-fpm.sock em vez de 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. A opção mais segura: um túnel SSH

Se não quer qualquer exposição pública, deixe a interface acessível apenas a partir do VPS e abra um túnel a partir do seu computador:

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

Enquanto a sessão estiver aberta, aceda a http://127.0.0.1:8080/pma-SECRET/. No Apache, restrinja o bloco com Require local em vez de Require ip ADMIN_IP; no Nginx, use allow 127.0.0.1;. Isto resolve também o problema de um IP doméstico que muda.

6. Verificar a proteção

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

O primeiro pedido deve devolver 404. O segundo devolve 403 a partir de qualquer IP diferente de ADMIN_IP, e 401 a partir do seu até indicar a palavra-passe da autenticação básica. Sirva também o phpMyAdmin apenas por HTTPS; caso contrário, as palavras-passe circulam em claro.

🛠️ Resolução de problemas

404 Not Found. O alias ou o nome da location não corresponde ao URL escrito, ou o servidor web não foi recarregado.

403 Forbidden para si. O seu IP público mudou. Atualize ADMIN_IP ou passe para o túnel SSH.

"The mbstring extension is missing" ou página em branco. Instale php-mbstring e execute phpenmod mbstring (Apache) ou reinicie php8.3-fpm (Nginx).

Access denied para root. É o esperado e desejável. Inicie sessão com o utilizador dedicado criado no passo 2.


🎉 O phpMyAdmin está instalado, oculto e restrito: só você acede às suas bases de dados.

Fique a par das últimas ofertas, descontos e promoções especiais.

Ver promoções

Utilizamos cookies

Utilizamos cookies analíticos para melhorar a sua experiência no nosso site. Nenhum dado é vendido a terceiros. Saiba mais na nossa política de privacidade.