Pesquisa de site

Como instalar e proteger o phpMyAdmin com Apache em um servidor CentOS 7


Introdução

Sistemas de gerenciamento de banco de dados relacional como MySQL e MariaDB são necessários para uma porção significativa de sites e aplicativos da web. No entanto, nem todos os usuários se sentem à vontade para administrar seus dados a partir da linha de comando.

Para resolver este problema, um projeto chamado phpMyAdmin foi criado para oferecer uma alternativa na forma de uma interface de gerenciamento baseada na web. Neste guia, demonstraremos como instalar e proteger uma configuração do phpMyAdmin em um servidor CentOS 7. Construiremos essa configuração no servidor web Apache, o servidor web mais popular do mundo.

Pré-requisitos

Antes de começarmos, existem alguns requisitos que precisam ser resolvidos.

Para garantir que você tenha uma base sólida sobre a qual construir este sistema, você deve executar nosso guia de configuração inicial do servidor para CentOS 7. Entre outras coisas, isso o orientará na configuração de um usuário não root com sudo acesso para comandos administrativos.

O segundo pré-requisito que deve ser cumprido para iniciar este guia é instalar uma pilha LAMP (Linux, Apache, MariaDB e PHP) em seu servidor CentOS 7. Esta é a plataforma que usaremos para servir nossa interface phpMyAdmin (MariaDB também é o software de gerenciamento de banco de dados que desejamos gerenciar). Caso você ainda não tenha uma instalação do LAMP em seu servidor, siga nosso tutorial de instalação do LAMP no CentOS 7.

Quando seu servidor estiver em um estado de funcionamento adequado após seguir esses guias, você poderá continuar com o restante desta página.

Primeiro Passo — Instale o phpMyAdmin

Com nossa plataforma LAMP já instalada, podemos começar imediatamente com a instalação do software phpMyAdmin. Infelizmente, o phpMyAdmin não está disponível no repositório padrão do CentOS 7.

Para obter os pacotes de que precisamos, teremos que adicionar um repositório adicional ao nosso sistema. O repositório EPEL (Extra Packages for Enterprise Linux) contém muitos pacotes adicionais, incluindo o pacote phpMyAdmin que estamos procurando.

O repositório EPEL pode ser disponibilizado para seu servidor instalando um pacote especial chamado epel-release. Isso reconfigurará sua lista de repositórios e lhe dará acesso aos pacotes EPEL.

Para instalar, basta digitar:

sudo yum install epel-release

Agora que o repositório EPEL está configurado, você pode instalar o pacote phpMyAdmin usando o sistema de empacotamento yum digitando:

sudo yum install phpmyadmin

A instalação será concluída. A instalação incluiu um arquivo de configuração do Apache que já foi implementado. Precisamos modificar um pouco isso para que funcione corretamente em nossa instalação.

Abra o arquivo em seu editor de texto agora para que possamos fazer algumas alterações:

sudo nano /etc/httpd/conf.d/phpMyAdmin.conf

Dentro, vemos alguns blocos de diretório com alguma lógica condicional para explicar a política de acesso ao nosso diretório. Existem dois diretórios distintos definidos e, dentro deles, configurações que serão válidas tanto para o Apache 2.2 quanto para o Apache 2.4 (que estamos executando).

Atualmente, esta configuração está configurada para negar o acesso a qualquer conexão que não seja feita do próprio servidor. Como estamos trabalhando em nosso servidor remotamente, precisamos modificar algumas linhas para especificar o endereço IP da sua conexão home.

Altere qualquer linha que leia Require ip 127.0.0.1 ou Allow from 127.0.0.1 para se referir ao endereço IP da sua conexão doméstica. Se precisar de ajuda para encontrar o endereço IP da sua conexão doméstica, consulte a próxima seção. Deve haver quatro locais no arquivo que devem ser alterados:

. . .
Require ip your_workstation_IP_address
. . .
Allow from your_workstation_IP_address
. . .
Require ip your_workstation_IP_address
. . .
Allow from your_workstation_IP_address
. . .

Quando terminar, reinicie o servidor web Apache para implementar suas modificações digitando:

sudo systemctl restart httpd.service

Com isso, nossa instalação do phpMyAdmin já está operacional. Para acessar a interface, vá para o nome de domínio do seu servidor ou endereço IP público seguido de /phpMyAdmin, em seu navegador:

http://server_domain_or_IP/phpMyAdmin

Para entrar, use um par de nome de usuário/senha de um usuário MariaDB válido. O usuário root e a senha administrativa do MariaDB são uma boa escolha para começar. Você poderá então acessar a interface administrativa:

Encontre seu endereço IP

Você precisará saber o endereço IP do computador que está usando para acessar seus bancos de dados para concluir a etapa acima. Esta é uma precaução de segurança para que pessoas não autorizadas não possam se conectar ao seu servidor.

Nota: Este não é o endereço IP do seu VPS, é o endereço IP do seu computador doméstico ou do trabalho.

Você pode descobrir como a grande web vê seu endereço IP visitando um destes sites em seu navegador:

  • Qual é o meu endereço IP?
  • Qual é o meu IP?
  • Meu endereço IP

Compare alguns sites diferentes e verifique se todos oferecem o mesmo valor. Use esse valor no arquivo de configuração acima.

Etapa dois — Proteja sua instância do phpMyAdmin

A instância phpMyAdmin instalada em nosso servidor deve ser totalmente utilizável neste ponto. No entanto, ao instalar uma interface da Web, expusemos nosso sistema MySQL ao mundo exterior.

Mesmo com a tela de autenticação incluída, isso é um grande problema. Devido à popularidade do phpMyAdmin combinada com a grande quantidade de dados aos quais ele fornece acesso, instalações como essas são alvos comuns para invasores.

Implementaremos duas estratégias simples para diminuir as chances de nossa instalação ser direcionada e comprometida. Mudaremos a localização da interface de /phpMyAdmin para outra coisa para contornar algumas das tentativas automatizadas de força bruta do bot. Também criaremos um gateway de autenticação adicional no nível do servidor da Web que deve ser passado antes mesmo de chegar à tela de login do phpMyAdmin.

Alterando o local de acesso do aplicativo

Para que nosso servidor web Apache funcione com phpMyAdmin, nosso arquivo de configuração phpMyAdmin Apache usa um alias para apontar para a localização do diretório dos arquivos.

Para alterar a URL onde nossa interface phpMyAdmin pode ser acessada, basta renomear o alias. Abra o arquivo de configuração do phpMyAdmin Apache agora:

sudo nano /etc/httpd/conf.d/phpMyAdmin.conf

Na parte superior do arquivo, você verá duas linhas parecidas com esta:

Alias /phpMyAdmin /usr/share/phpMyAdmin
Alias /phpmyadmin /usr/share/phpMyAdmin

Essas duas linhas são nossos aliases, o que significa que, se acessarmos o nome de domínio ou endereço IP de nosso site, seguido por /phpMyAdmin ou /phpmyadmin, o conteúdo será exibido para nós em /usr/share/phpMyAdmin.

Queremos desabilitar esses aliases específicos, pois eles são fortemente visados por bots e usuários mal-intencionados. Em vez disso, devemos decidir sobre nosso próprio alias. Deve ser fácil de lembrar, mas não fácil de adivinhar. Não deve indicar a finalidade do local do URL. No nosso caso, iremos com /nothingtosee.

Para aplicar as alterações pretendidas, devemos remover ou comentar as linhas existentes e adicionar as nossas:

# Alias /phpMyAdmin /usr/share/phpMyAdmin
# Alias /phpmyadmin /usr/share/phpMyAdmin
Alias /nothingtosee /usr/share/phpMyAdmin

Quando terminar, salve e feche o arquivo.

Para implementar as alterações, reinicie o serviço da web:

sudo systemctl restart httpd.service

Agora, se você for para o local anterior da instalação do phpMyAdmin, receberá um erro 404:

http://server_domain_or_IP/phpMyAdmin

No entanto, sua interface phpMyAdmin estará disponível no novo local que selecionamos:

http://server_domain_or_IP/nothingtosee

Configurando um portal de autenticação de servidor da Web

O próximo recurso que queríamos para nossa instalação era um prompt de autenticação que o usuário deveria passar antes de ver a tela de login do phpMyAdmin.

Felizmente, a maioria dos servidores da Web, incluindo o Apache, fornece esse recurso nativamente. Só precisaremos modificar nosso arquivo de configuração do Apache para usar um arquivo de autorização.

Abra o arquivo de configuração do phpMyAdmin Apache em seu editor de texto novamente:

sudo nano /etc/httpd/conf.d/phpMyAdmin.conf

Dentro do bloco de diretório /usr/share/phpMyAdmin, mas fora de qualquer um dos blocos internos, precisamos adicionar uma diretiva de substituição. Isso parecerá assim:

. . .
<Directory /usr/share/phpMyAdmin/>
   AllowOverride All
   <IfModule mod_authz_core.c>
   . . .
</Directory>
. . .

Isso nos permitirá especificar detalhes de configuração adicionais em um arquivo chamado .htaccess localizado dentro do próprio diretório phpMyAdmin. Usaremos esse arquivo para configurar nossa autenticação de senha.

Salve e feche o arquivo quando terminar.

Reinicie o serviço da Web para implementar essa alteração:

sudo systemctl restart httpd.service

Crie um arquivo .htaccess

Agora que temos a diretiva override em nossa configuração, o Apache procurará um arquivo chamado .htaccess dentro do diretório /usr/share/phpMyAdmin. Se encontrar um, usará as diretivas contidas nele para complementar seus dados de configuração anteriores.

Nosso próximo passo é criar o arquivo .htaccess dentro desse diretório. Use seu editor de texto para fazer isso agora:

sudo nano /usr/share/phpMyAdmin/.htaccess

Dentro deste arquivo, precisamos inserir as seguintes informações:

AuthType Basic
AuthName "Admin Login"
AuthUserFile /etc/httpd/pma_pass
Require valid-user

Vamos ver o que cada uma dessas linhas significa:

  • AuthType Basic: Esta linha especifica o tipo de autenticação que estamos implementando. Este tipo implementará autenticação de senha usando um arquivo de senha.
  • AuthName: define a mensagem para a caixa de diálogo de autenticação. Você deve manter isso genérico para que usuários não autorizados não obtenham conhecimento sobre o que está sendo protegido.
  • AuthUserFile: define a localização do arquivo de senha real que será usado para autenticação. Isso deve estar fora dos diretórios que estão sendo servidos. Vamos criar este arquivo em um momento.
  • Exigir usuário válido: Especifica que somente usuários autenticados devem ter acesso a este recurso. Isso é o que realmente impede a entrada de usuários não autorizados.

Quando terminar de inserir essas informações, salve e feche o arquivo.

Crie o arquivo de senha para autenticação

Agora que especificamos o local para nosso arquivo de senhas por meio do uso da diretiva AuthUserFile em nosso arquivo .htaccess, precisamos criar e preencher o arquivo de senhas.

Isso pode ser feito com o uso de um utilitário Apache chamado htpasswd. Chamamos o comando passando o local onde gostaríamos de criar o arquivo e o nome de usuário para o qual gostaríamos de inserir os detalhes de autenticação:

sudo htpasswd -c /etc/httpd/pma_pass username

O sinalizador -c indica que isso criará um arquivo inicial. A localização do diretório é o caminho e o nome do arquivo que serão usados para o arquivo. O nome de usuário é o primeiro usuário que gostaríamos de adicionar. Você será solicitado a inserir e confirmar uma senha para o usuário.

Se você deseja adicionar usuários adicionais para autenticação, pode chamar o mesmo comando novamente sem o sinalizador -c e com um novo nome de usuário:

sudo htpasswd /etc/httpd/pma_pass seconduser

Com nosso arquivo de senha criado, um gateway de autenticação foi implementado e agora devemos ver um prompt de senha na próxima vez que visitarmos nosso site:

http://server_domain_or_IP/nothingtosee

Depois de inserir suas credenciais, você será direcionado para a página de login normal do phpMyAdmin. Essa camada adicional de proteção ajudará a manter seus logs do MySQL livres de tentativas de autenticação, além do benefício adicional de segurança.

Conclusão

Agora você pode gerenciar seus bancos de dados MySQL a partir de uma interface web razoavelmente segura. Essa interface do usuário expõe a maior parte da funcionalidade disponível no prompt de comando do MySQL. Você pode visualizar bancos de dados e esquemas, executar consultas e criar novos conjuntos e estruturas de dados.