Guia técnico de instalação, integração com MariaDB e MySQL, configuração do PHP-FPM, segurança e diagnóstico.

Este tutorial também se aplica a Debian anterior ou PHP 8.3?

Sim, com adaptações. O phpMyAdmin não exige Debian 13, Apache específico ou exclusivamente PHP 8.4. Em Debian 12 e outros sistemas ainda suportados, confira a versão do pacote, suas correções, dependências, serviço FPM e socket. Nginx também pode servir a aplicação, com configuração própria.

Para avaliar a release 5.2.3, use o manual e o composer.json da própria versão. Compatibilidade declarada não comprova que todas as dependências e funções foram testadas no seu ambiente. Confira separadamente os avisos de segurança do pacote Debian antes de utilizá-lo em produção.

Documentação: Manual 5.2.3 · Composer da release · Pacote Trixie · Segurança Debian.

Aviso importante sobre segurança: na consulta realizada em 11 de novembro de 2026, o Debian Security Tracker ainda indicava quatro vulnerabilidades classificadas como vulneráveis e três como indeterminadas para o phpMyAdmin no Debian 13. Este artigo separa a instalação de laboratório da utilização em produção. Não disponibilize publicamente uma versão afetada. Antes de instalar em produção, confirme se os avisos foram corrigidos e se a versão candidata do APT contém as correções necessárias. Consulte o Debian Security Tracker.

O que é o phpMyAdmin?

O phpMyAdmin é uma aplicação web desenvolvida em PHP que permite administrar bancos de dados MySQL e MariaDB por meio de uma interface gráfica. Em vez de executar todas as operações diretamente pelo terminal, o administrador pode utilizar o navegador para gerenciar estruturas, usuários, consultas e dados.

Entre suas funcionalidades estão:

  • Criar, modificar e excluir bancos de dados.
  • Criar tabelas, índices e relacionamentos.
  • Executar consultas SQL.
  • Gerenciar usuários e privilégios.
  • Importar e exportar bancos de dados.
  • Consultar registros e estruturas.
  • Administrar views, triggers e procedimentos armazenados.

O phpMyAdmin é útil em ambientes de desenvolvimento, hospedagens e servidores que precisam de uma interface administrativa. Entretanto, ele não substitui o gerenciamento de permissões do banco: a conta utilizada continua limitada pelos privilégios definidos no próprio servidor.

Como funciona a arquitetura?

O phpMyAdmin não é um servidor de banco de dados. Ele funciona como uma aplicação intermediária entre o navegador e o MySQL ou MariaDB.

ComponenteFunção
Debian 13Sistema operacional.
Apache2Servidor HTTP.
PHP-FPMProcessamento dos scripts PHP.
PHPLinguagem utilizada pelo phpMyAdmin.
MariaDB/MySQLSistema de gerenciamento de banco de dados.
phpMyAdminInterface administrativa.

O fluxo é: o navegador envia uma requisição ao Apache; o Apache encaminha a execução PHP ao PHP-FPM; o phpMyAdmin conecta-se ao banco; e o resultado retorna ao navegador. Apache, PHP-FPM e banco de dados são componentes independentes e precisam ser verificados separadamente.

Requisitos do ambiente

O Debian 13 usa PHP 8.4 por padrão. Isso não torna PHP 8.4 o mínimo do phpMyAdmin: o manual da versão 5.2.3 informa PHP 7.2.5 ou superior e o composer.json dessa release declara ^7.2.5 || ^8.0, faixa que inclui 8.3 e 8.4. A página resumida de downloads consultada apresenta um limite diferente; por isso, confirme a release, suas dependências, correções e os testes do pacote, sem concluir incompatibilidade somente por aquela tabela.

Consulte a página oficial de downloads e requisitos e os patches do pacote Debian.

Para este procedimento, considere Debian 13, Apache2, PHP-FPM, MariaDB ou MySQL disponível, acesso administrativo ao sistema e conexão com os repositórios Debian. Os comandos administrativos abaixo consideram uma sessão como root. Se utilizar uma conta comum, acrescente sudo.

Verificar o ambiente antes da instalação

Não comece instalando pacotes sem verificar o que já existe. Isso evita conflitos entre versões e serviços.

Verificar o Debian

cat /etc/os-release

Confirme que a distribuição é Debian 13, identificada como Trixie.

Verificar o Apache

apache2 -v
systemctl status apache2 --no-pager

Se ainda não estiver instalado:

apt update
apt install apache2 -y
systemctl enable --now apache2

Verificar o PHP e o PHP-FPM

php -v
systemctl list-units --type=service --all 'php*-fpm.service'
dpkg -l | grep -E 'php[0-9.]+-fpm'
ls -lah /run/php/

php -v apresenta a versão do PHP CLI, não necessariamente a versão utilizada pelas requisições web. O PHP-FPM é um serviço independente. Verifique o serviço e o socket efetivamente utilizados pelo Apache.

Verificar o banco de dados

systemctl status mariadb --no-pager
systemctl status mysql --no-pager

Se precisar instalar MariaDB:

apt update
apt install mariadb-server -y
systemctl enable --now mariadb

Não instale MariaDB e MySQL simultaneamente sem uma necessidade específica. Ambos podem utilizar a mesma porta de rede e causar conflitos.

Avaliar a segurança e a compatibilidade antes de instalar

Esta etapa é obrigatória. O fato de o APT encontrar um pacote não significa que ele esteja seguro para produção.

Consultar a versão disponível

apt update
apt-cache policy phpmyadmin
apt show phpmyadmin

Anote a versão instalada, a versão candidata, o repositório de origem e as dependências declaradas. A versão candidata é aquela que o APT pretende instalar; ela não deve ser considerada segura apenas porque está disponível.

Consultar as vulnerabilidades

Acesse o Debian Security Tracker — phpMyAdmin e confira especificamente o estado da versão trixie, correspondente ao Debian 13.

Na consulta de 11 de novembro de 2026, o rastreador apresentava quatro CVEs classificados como vulneráveis e três como indeterminados para Trixie. Essas classificações podem mudar após uma atualização de segurança. Consulte o rastreador novamente no momento da instalação. Uma vulnerabilidade indeterminada não deve ser interpretada como corrigida.

Decidir se a instalação pode continuar

Laboratório isolado: é possível utilizar a instalação para estudar a configuração, desde que não sejam usados dados reais, credenciais de produção ou acesso público.

Servidor de produção: não prossiga enquanto houver vulnerabilidades relevantes sem correção ou avaliação conclusiva. Aguarde uma versão corrigida e confirme sua disponibilidade no Debian. Uma senha não torna segura uma aplicação administrativa vulnerável.

Compatibilidade entre PHP 8.4 e phpMyAdmin

Para phpMyAdmin 5.2.3, o manual e as dependências da release aceitam PHP anterior a 8.4. Isso descreve compatibilidade declarada, não uma recomendação para voltar a versões de PHP fora de suporte. A tabela resumida do site diverge desses dados. O pacote Debian e uma instalação upstream também podem diferir nas dependências e correções aplicadas.

É necessário distinguir o projeto upstream do pacote Debian. O Debian pode aplicar patches e adaptações ao código distribuído em seus repositórios. A compatibilidade do pacote precisa ser avaliada a partir dos metadados, dependências, patches e testes da distribuição.

Não instale uma versão antiga do PHP apenas para contornar uma incompatibilidade sem avaliar as consequências de segurança e manutenção. Também não utilize uma versão de desenvolvimento do phpMyAdmin em produção apenas porque ela aparenta resolver o problema.

Instalar o phpMyAdmin em um laboratório

Os próximos procedimentos demonstram a instalação pelo pacote Debian. Não utilize esta etapa para disponibilizar uma versão vulnerável em produção.

Instalar o pacote

apt install phpmyadmin

Selecionar o servidor web

Quando aparecer a seleção do servidor web, escolha apache2. Utilize a barra de espaço para selecionar e Enter para confirmar.

Se a integração não tiver sido configurada corretamente, o assistente pode ser executado novamente:

dpkg-reconfigure -plow phpmyadmin

Não execute essa reconfiguração sem necessidade. Primeiro verifique se a integração já existe.

Configurar o dbconfig-common

O instalador poderá perguntar se deseja utilizar o dbconfig-common. Esse mecanismo facilita a criação e configuração do banco interno utilizado pelos recursos adicionais do phpMyAdmin. Se optar por utilizá-lo, confirme a configuração automática, informe as credenciais solicitadas e guarde a senha em local seguro. Não reutilize a senha de root do sistema operacional.

O banco interno utilizado pelo phpMyAdmin não é o mesmo que os bancos das aplicações administradas.

Verificar a instalação

ls -lah /etc/phpmyadmin/
ls -lah /usr/share/phpmyadmin/
ls -lah /etc/apache2/conf-available/ | grep phpmyadmin

Se a configuração do Apache estiver disponível e ainda não estiver habilitada:

a2enconf phpmyadmin

Não crie links simbólicos manualmente sem verificar a integração fornecida pelo pacote.

Configurar o Apache2 com PHP-FPM

O Apache precisa encaminhar os arquivos PHP para o serviço PHP-FPM. No Debian, o pacote PHP-FPM fornece uma configuração própria para integrar o serviço ao Apache.

Identificar a versão instalada

systemctl list-unit-files --type=service 'php*-fpm.service'

No exemplo abaixo será utilizada a versão 8.4. Se o servidor utilizar outra versão, substitua o número.

systemctl status php8.4-fpm --no-pager

Instalar o PHP-FPM caso necessário

apt install php8.4-fpm

Habilitar os módulos do Apache

a2enmod proxy_fcgi setenvif
a2enconf php8.4-fpm
systemctl enable --now php8.4-fpm

O arquivo de integração é fornecido pelo pacote php8.4-fpm. Não misture PHP-FPM com mod_php sem uma razão técnica e uma configuração planejada.

Validar a configuração

apache2ctl configtest
systemctl reload apache2

O resultado esperado do teste é Syntax OK.

Confirmar o socket utilizado

ls -lah /run/php/
grep -R "php.*fpm.sock" /etc/apache2/conf-enabled/

O socket configurado deve existir e corresponder ao serviço PHP-FPM ativo. Não presuma que o Apache utiliza PHP 8.4 apenas porque php -v apresentou essa versão.

Restringir o acesso ao phpMyAdmin

O phpMyAdmin deve ser tratado como uma ferramenta administrativa. Uma medida simples para um laboratório é restringir o acesso pelo Apache a conexões locais.

Criar uma configuração específica

Antes de criar o arquivo, verifique se já existe uma configuração personalizada:

ls -lah /etc/apache2/conf-available/

Crie o arquivo:

nano /etc/apache2/conf-available/phpmyadmin-local.conf

Conteúdo:

<Directory /usr/share/phpmyadmin>
    Require local
</Directory>

Habilite e valide:

a2enconf phpmyadmin-local
apache2ctl configtest
systemctl reload apache2

Entender a limitação do Require local

A diretiva Require local avalia o endereço de origem da conexão recebida pelo Apache. Se um proxy executado na própria máquina encaminhar a requisição, o Apache pode enxergar o proxy como origem local. Assim, uma requisição originalmente feita pela internet pode acabar sendo considerada local.

Por isso, Require local não é proteção suficiente quando existe um proxy intermediário.

No caso do Cloudflare Tunnel:

  • Não crie uma rota pública diretamente para o phpMyAdmin.
  • Se já existir uma rota, remova-a enquanto não houver uma política de acesso adequada.
  • Utilize Cloudflare Access com política restritiva quando houver necessidade de acesso remoto.
  • Mantenha controles adicionais na origem.
  • Não confie apenas em um endereço difícil de adivinhar.

Consulte a documentação do Apache sobre controle de acesso, do Cloudflare Tunnel e do Cloudflare Access.

Criar um usuário específico no MariaDB

Não utilize a conta root do banco de dados para operações cotidianas pelo navegador. O MariaDB frequentemente configura o usuário root para autenticação pelo socket Unix. Isso permite administração local pelo sistema operacional, mas não significa que a mesma conta deva ser utilizada no formulário de login do phpMyAdmin.

Acessar o MariaDB e criar um banco

mariadb
CREATE DATABASE app_db
    CHARACTER SET utf8mb4
    COLLATE utf8mb4_unicode_ci;

Criar um usuário administrativo para esse banco

CREATE USER 'app_admin'@'localhost'
IDENTIFIED BY 'SUBSTITUA_POR_UMA_SENHA_FORTE';

GRANT ALL PRIVILEGES ON app_db.*
TO 'app_admin'@'localhost';

SHOW GRANTS FOR 'app_admin'@'localhost';
EXIT;

O usuário possui privilégios amplos dentro do banco app_db, incluindo operações que podem excluir ou modificar dados. Isso é diferente de conceder privilégios globais sobre todos os bancos do servidor.

Para aplicações, o ideal é criar outra conta com permissões específicas, como leitura e gravação, sem conceder privilégios administrativos desnecessários.

Diferenças entre MariaDB e MySQL

Os comandos básicos de criação de usuários e concessão de privilégios são semelhantes. Entretanto, os métodos de autenticação podem variar conforme a versão e a configuração do servidor.

No MariaDB, consulte:

SELECT User, Host, plugin
FROM mysql.user;

No MySQL, também é possível consultar as contas e os métodos de autenticação, respeitando as permissões administrativas da instalação. Não altere o método de autenticação do usuário root apenas para permitir login pelo navegador.

Configurar a autenticação do phpMyAdmin

O método cookie permite que o usuário informe suas credenciais do banco na tela de login. Isso evita armazenar uma senha administrativa fixa diretamente na configuração da aplicação.

Verificar a configuração

ls -lah /etc/phpmyadmin/

No pacote Debian, o arquivo principal costuma ser /etc/phpmyadmin/config.inc.php. Verifique se existe um segredo configurado para a proteção dos cookies.

Gerar um segredo aleatório

openssl rand -hex 32

O comando gera uma sequência hexadecimal aleatória. A configuração de blowfish_secret deve respeitar o formato esperado pela versão instalada.

$cfg['blowfish_secret'] = sodium_hex2bin(
    'SUBSTITUA_PELO_HEXADECIMAL_GERADO'
);

O exemplo utiliza sodium_hex2bin() para converter a representação hexadecimal em bytes. Não copie o texto ilustrativo como segredo real.

Antes de alterar a configuração, faça backup do arquivo, confirme se a extensão Sodium está disponível, verifique se o segredo já está configurado e preserve as configurações fornecidas pelo pacote Debian.

php -m | grep -i sodium

A versão do PHP utilizada pelo FPM também precisa possuir a extensão necessária. Consulte a documentação de configuração do phpMyAdmin.

Configurar extensões e limites do PHP

O funcionamento do phpMyAdmin depende de extensões PHP. Entre as extensões importantes estão:

ExtensãoUtilização
mysqliComunicação com MySQL/MariaDB.
mbstringManipulação de strings multibyte.
curlComunicação HTTP.
zipOperações com arquivos ZIP.
gdProcessamento de imagens.
xmlManipulação de XML.
sodiumRecursos criptográficos.
opensslRecursos criptográficos e TLS.

O pacote Debian pode declarar dependências e instalar extensões automaticamente. Antes de instalar qualquer extensão adicional, consulte:

php -m

Confira também a versão utilizada pelo PHP-FPM e os pacotes instalados. Não instale extensões de uma versão diferente daquela utilizada pelo serviço FPM.

Verificar limites de upload

grep -E 'upload_max_filesize|post_max_size|memory_limit|max_execution_time' \
/etc/php/8.4/fpm/php.ini

Os valores precisam ser coerentes entre si. Por exemplo, post_max_size deve ser maior que upload_max_filesize, pois a requisição HTTP também possui outros dados além do arquivo enviado. O limite de memória e o tempo máximo de execução também precisam ser considerados.

Não aumente esses valores sem necessidade. Após alterar o arquivo:

systemctl restart php8.4-fpm
systemctl reload apache2

Testar a instalação

Não considere a instalação concluída apenas porque a página de login abriu. Valide cada componente.

Testar o Apache e o PHP-FPM

systemctl is-active apache2
systemctl is-active php8.4-fpm
apache2ctl configtest

Os serviços devem retornar active e o teste de configuração deve retornar Syntax OK.

Testar a aplicação localmente

curl -I http://127.0.0.1/phpmyadmin/

O Apache deve localizar a aplicação. Uma resposta HTTP 200 ou um redirecionamento esperado indica que o recurso foi encontrado. Se retornar 403, investigue as regras de autorização. Se retornar 404, verifique o Alias e a configuração do pacote.

Testar o acesso por túnel SSH

Em outro computador, execute:

ssh -N -L 8080:127.0.0.1:80 usuario@IP_DO_SERVIDOR

Mantenha o terminal aberto e acesse http://127.0.0.1:8080/phpmyadmin/. O túnel encaminha a conexão para o Apache local e permite acessar a ferramenta sem criar uma rota pública. Utilize um usuário SSH comum, com autenticação por chave, e não habilite login remoto de root apenas para facilitar o acesso.

Testar autenticação e consulta SQL

Entre com o usuário criado anteriormente e abra o banco app_db. Crie uma tabela de teste, insira um registro, execute uma consulta e exclua os dados de teste.

SELECT
    VERSION() AS versao_banco,
    CURRENT_USER() AS usuario_conectado;

A consulta permite verificar a versão do banco e a conta efetivamente autenticada.

Testar o bloqueio externo

A partir de uma máquina externa, tente acessar o endereço público do servidor, se houver alguma rota configurada. O acesso direto ao phpMyAdmin deve estar bloqueado. Faça a validação considerando Apache diretamente, proxy reverso, Cloudflare Tunnel, outros VirtualHosts e regras de firewall. Não considere o ambiente seguro apenas porque uma tentativa isolada retornou HTTP 403.

Resolver problemas comuns

Erro 403 Forbidden

Possíveis causas: diretiva Require local, proxy encaminhando requisições, permissões incorretas ou outra regra de autorização. Verifique:

apache2ctl -S
apache2ctl configtest
tail -n 100 /var/log/apache2/error.log

Erro 404 Not Found

Verifique se a configuração está habilitada e se os arquivos existem:

a2query -c phpmyadmin
ls -lah /usr/share/phpmyadmin/
ls -lah /etc/apache2/conf-enabled/

Não crie um Alias ou link simbólico sem verificar a configuração já fornecida pelo pacote.

Erro 500 Internal Server Error

tail -n 100 /var/log/apache2/error.log
journalctl -u php8.4-fpm -n 100 --no-pager

Investigue extensões ausentes, erros de sintaxe, incompatibilidade de versões, permissões incorretas e configurações inválidas.

Erro 502 Bad Gateway

systemctl status php8.4-fpm --no-pager
ls -lah /run/php/

Compare o socket existente com o caminho definido na configuração do Apache.

Falha de autenticação no banco

Verifique usuário, senha, host associado à conta, privilégios, método de autenticação e estado do serviço de banco de dados. No MariaDB:

mariadb -e "SELECT User, Host, plugin FROM mysql.user;"

Não conceda privilégios globais apenas para resolver um erro de autenticação.

Erro durante importação de arquivos

grep -E 'upload_max_filesize|post_max_size|memory_limit|max_execution_time' \
/etc/php/8.4/fpm/php.ini

Confira também o banco:

SHOW VARIABLES LIKE 'max_allowed_packet';

Aumente os limites somente quando necessário e considere o impacto no consumo de memória e no desempenho.

Fazer backup das configurações

Antes de atualizar ou remover o phpMyAdmin, preserve os arquivos de configuração.

mkdir -p /root/backup-phpmyadmin
cp -a /etc/phpmyadmin /root/backup-phpmyadmin/
cp -a /etc/apache2/conf-available/phpmyadmin-local.conf \
/root/backup-phpmyadmin/
chmod 700 /root/backup-phpmyadmin

Se o arquivo personalizado não existir, não execute a cópia correspondente.

Fazer backup dos bancos

Para MariaDB:

mariadb-dump --all-databases \
--single-transaction \
--routines \
--events \
> /root/backup-phpmyadmin/bancos.sql
chmod 600 /root/backup-phpmyadmin/bancos.sql

Esse comando gera um arquivo com todos os bancos. O conteúdo pode incluir informações sensíveis, portanto não deve ser publicado ou armazenado sem proteção. Para bancos grandes ou ambientes de produção, estabeleça uma política de backup com retenção, armazenamento externo e testes de restauração. O backup das configurações não substitui o backup dos bancos.

Atualizar o phpMyAdmin

Antes de atualizar, verifique se existe uma nova versão corrigida, se os avisos de segurança foram resolvidos, se a versão é compatível com o PHP-FPM instalado, se os patches da distribuição estão disponíveis e se existe backup recente.

apt update
apt-cache policy phpmyadmin

Se a versão corrigida estiver disponível e a atualização for apropriada:

apt install --only-upgrade phpmyadmin

Depois, valide:

apache2ctl configtest
systemctl status apache2 --no-pager
systemctl status php8.4-fpm --no-pager

Consulte novamente o Debian Security Tracker. O simples fato de o APT concluir uma atualização não comprova que todos os problemas de segurança foram resolvidos. Evite instalar versões de desenvolvimento ou pacotes de repositórios não confiáveis apenas para obter uma versão numericamente maior.

Remover o phpMyAdmin

Se a ferramenta não for mais necessária, desabilite as configurações relacionadas:

a2disconf phpmyadmin-local
a2disconf phpmyadmin
apache2ctl configtest
systemctl reload apache2

Se alguma configuração não estiver habilitada, a mensagem correspondente pode ser ignorada após confirmar o estado atual.

Remova o pacote:

apt remove phpmyadmin

O comando remove preserva arquivos de configuração. Se também desejar remover esses arquivos:

apt purge phpmyadmin

Faça isso somente depois de confirmar os backups e entender o impacto. Não execute apt autoremove --purge automaticamente. Revise a lista de pacotes que o APT pretende remover para evitar excluir dependências utilizadas por outros sites. A remoção do phpMyAdmin não significa que os bancos de dados das aplicações devam ser excluídos.

Boas práticas de segurança

  • Instale somente versões com correções de segurança disponíveis.
  • Não exponha versões vulneráveis na internet.
  • Restrinja o acesso por VPN ou túnel SSH.
  • Utilize Cloudflare Access quando houver necessidade de acesso remoto por proxy.
  • Não dependa exclusivamente de Require local atrás de um proxy.
  • Utilize HTTPS quando houver comunicação por rede.
  • Crie contas específicas para cada banco.
  • Evite utilizar root pelo navegador.
  • Conceda somente os privilégios necessários.
  • Utilize senhas fortes e exclusivas.
  • Mantenha o Debian e seus pacotes atualizados.
  • Monitore logs e tentativas de autenticação.
  • Faça backups e teste a restauração.
  • Remova a ferramenta quando ela não for mais necessária.

Pratique: Administrar um banco de teste sem abrir o painel para a internet.

Use este roteiro para transformar a leitura em uma verificação concreta.

  1. Confirme a versão do pacote, o socket FPM e os módulos PHP usados pela aplicação web. A versão do PHP no terminal não basta para comprovar essa integração.
  2. Prefira um caminho de acesso restrito, como o túnel SSH descrito no tutorial, e use uma conta de banco limitada ao esquema de teste.
  3. Teste um acesso autorizado e um acesso vindo de fora da origem permitida. Verifique se páginas de diagnóstico, arquivos de configuração e backups continuam indisponíveis por HTTP.

Como conferir o resultado

O painel funcionar não significa que deve ficar público. Reavalie a exposição após editar aliases ou regras Directory do Apache; uma regra mais ampla pode desfazer a restrição. Antes de atualizar, mantenha um backup e uma forma de recuperar a configuração.

Continue o estudo: Servidor PHP no Linux: Apache, SSH e MySQL ou MariaDB · Segurança no Linux: SSH, firewall, aplicações e backups.

Conclusão

O phpMyAdmin facilita a administração de bancos MySQL e MariaDB, mas sua instalação exige atenção à compatibilidade, às permissões e principalmente à segurança.

No Debian 13, é necessário considerar a versão do PHP-FPM, as adaptações do pacote Debian e os requisitos declarados pelo projeto upstream. Também é fundamental compreender que um acesso restrito pelo Apache não garante proteção quando existe um proxy reverso ou Cloudflare Tunnel intermediando as requisições.

A recomendação é utilizar o phpMyAdmin somente em uma versão corrigida, com acesso administrativo restrito, contas de banco específicas e backups testados.

Uma interface gráfica facilita o trabalho, mas não pode se transformar em uma porta de entrada para todo o servidor.

Referências oficiais