Pesquisa de site

Como instalar e proteger o phpMyAdmin no Ubuntu 20.04


Uma versão anterior deste tutorial foi escrita por Brennan Bearnes.

Introdução

Embora muitos usuários precisem da funcionalidade de um sistema de gerenciamento de banco de dados como o MySQL, eles podem não se sentir à vontade para interagir com o sistema apenas a partir do prompt do MySQL.

O phpMyAdmin foi criado para que os usuários possam interagir com o MySQL através de uma interface web. Neste guia, discutiremos como instalar e proteger o phpMyAdmin para que você possa usá-lo com segurança para gerenciar seus bancos de dados em um sistema Ubuntu 20.04.

Pré-requisitos

Para completar este guia, você precisará de:

  • Um servidor Ubuntu 20.04. Este servidor deve ter um usuário não root com privilégios administrativos e um firewall configurado com ufw. Para configurar isso, siga nosso guia inicial de configuração do servidor para Ubuntu 20.04.
  • Uma pilha LAMP (Linux, Apache, MySQL e PHP) instalada em seu servidor Ubuntu 20.04. Se isso ainda não estiver concluído, você pode seguir este guia sobre como instalar uma pilha LAMP no Ubuntu 20.04.

Além disso, há importantes considerações de segurança ao usar software como o phpMyAdmin, pois:

  • Comunica-se diretamente com a instalação do MySQL
  • Lida com autenticação usando credenciais MySQL
  • Executa e retorna resultados para consultas SQL arbitrárias

Por esses motivos, e por ser um aplicativo PHP amplamente implantado e frequentemente alvo de ataques, você nunca deve executar o phpMyAdmin em sistemas remotos por meio de uma conexão HTTP simples.

Se você não tiver um domínio existente configurado com um certificado SSL/TLS, siga este guia para configurar um host virtual Apache.

Passo 1 — Instalando o phpMyAdmin

Você pode usar o APT para instalar o phpMyAdmin dos repositórios padrão do Ubuntu.

Como seu usuário sudo não raiz, atualize o índice de pacotes do seu servidor:

  1. sudo apt update

Depois disso, você pode instalar o pacote phpmyadmin. Junto com este pacote, a documentação oficial também recomenda que você instale algumas extensões PHP em seu servidor para habilitar certas funcionalidades e melhorar o desempenho.

Se você seguiu o tutorial de pré-requisito da pilha LAMP, vários desses módulos terão sido instalados junto com o pacote php. No entanto, é recomendável que você também instale estes pacotes:

  • php-mbstring: Um módulo para gerenciar strings não-ASCII e converter strings para diferentes codificações
  • php-zip: esta extensão suporta o upload de arquivos .zip para phpMyAdmin
  • php-gd: Ativa o suporte para a GD Graphics Library
  • php-json: Fornece PHP com suporte para serialização JSON
  • php-curl: Permite que o PHP interaja com diferentes tipos de servidores usando diferentes protocolos

Esteja ciente de que, se você estiver usando uma versão do PHP diferente da padrão instalada no tutorial de pré-requisito da pilha LAMP, será necessário instalar as versões apropriadas desses pacotes de módulo. Por exemplo, se você estiver usando a versão PHP 8.0, você precisará instalar o pacote php8.0-mbstring em vez do pacote padrão php-mbstring pacote.

Execute o seguinte comando para instalar esses pacotes em seu sistema. Observe, porém, que o processo de instalação exige que você faça algumas escolhas para configurar o phpMyAdmin corretamente. Vamos passar por essas opções em breve:

  1. sudo apt install phpmyadmin php-mbstring php-zip php-gd php-json php-curl

Aqui estão as opções que você deve escolher quando solicitado para configurar sua instalação corretamente:

  • Para a seleção do servidor, escolha apache2

Aviso: quando o prompt aparecer, \apache2 será realçado, mas não selecionado. Se você não pressionar SPACE para selecionar Apache, o instalador não moverá os arquivos necessários durante a instalação. Pressione SPACE, TAB e ENTER para selecionar Apache.

  • Selecione Sim quando perguntado se deseja usar dbconfig-common para configurar o banco de dados
  • Você será solicitado a escolher e confirmar uma senha de aplicativo MySQL para phpMyAdmin

Nota: Supondo que você instalou o MySQL seguindo a Etapa 2 do tutorial de pré-requisito da pilha LAMP, você pode ter decidido habilitar o plug-in Validate Password. No momento em que este livro foi escrito, habilitar este componente irá disparar um erro quando você tentar definir uma senha para o usuário phpmyadmin:

Para resolver isso, selecione a opção abortar para parar o processo de instalação. Em seguida, abra o prompt do MySQL:

  1. sudo mysql

Ou, se você ativou a autenticação de senha para o usuário root do MySQL, execute este comando e digite sua senha quando solicitado:

  1. mysql -u root -p

No prompt, execute o seguinte comando para desativar o componente Validar senha. Observe que isso não irá realmente desinstalá-lo, mas apenas impedir que o componente seja carregado em seu servidor MySQL:

  1. UNINSTALL COMPONENT "file://component_validate_password";

Depois disso, você pode fechar o cliente MySQL:

  1. exit

Em seguida, tente instalar o pacote phpmyadmin novamente e ele funcionará conforme o esperado:

  1. sudo apt install phpmyadmin

Depois que o phpMyAdmin estiver instalado, você pode abrir o prompt do MySQL mais uma vez com sudo mysql ou mysql -u root -p e, em seguida, executar o seguinte comando para reativar o Validate Password componente:

  1. INSTALL COMPONENT "file://component_validate_password";

O processo de instalação adiciona o arquivo de configuração Apache phpMyAdmin no diretório /etc/apache2/conf-enabled/, onde é lido automaticamente. Para terminar de configurar o Apache e o PHP para funcionar com o phpMyAdmin, a única tarefa restante nesta seção do tutorial é habilitar explicitamente a extensão PHP mbstring, que você pode fazer digitando:

  1. sudo phpenmod mbstring

Após, reinicie o Apache para que suas alterações sejam reconhecidas:

  1. sudo systemctl restart apache2

O phpMyAdmin agora está instalado e configurado para funcionar com o Apache. No entanto, antes de poder fazer login e começar a interagir com seus bancos de dados MySQL, você precisará garantir que seus usuários MySQL tenham os privilégios necessários para interagir com o programa.

Etapa 2 — Ajustando a autenticação e os privilégios do usuário

Quando você instalou o phpMyAdmin em seu servidor, ele criou automaticamente um usuário de banco de dados chamado phpmyadmin que executa certos processos subjacentes para o programa. Em vez de fazer login como esse usuário com a senha administrativa definida durante a instalação, é recomendável fazer login como usuário root do MySQL ou como usuário dedicado ao gerenciamento de bancos de dados por meio da interface phpMyAdmin.

Configurando o acesso por senha para a conta root do MySQL

Em sistemas Ubuntu rodando MySQL 5.7 (e versões posteriores), o usuário root do MySQL é configurado para autenticar usando o plug-in auth_socket por padrão, em vez de uma senha. Isso permite maior segurança e usabilidade em muitos casos, mas também pode complicar as coisas quando você precisa permitir que um programa externo — como o phpMyAdmin — acesse o usuário.

Para fazer login no phpMyAdmin como seu usuário root do MySQL, você precisará mudar seu método de autenticação de auth_socket para um que faça uso de uma senha, caso ainda não o tenha feito. Para fazer isso, abra o prompt do MySQL no seu terminal:

  1. sudo mysql

Em seguida, verifique qual método de autenticação cada uma de suas contas de usuário do MySQL usa com o seguinte comando:

  1. SELECT user,authentication_string,plugin,host FROM mysql.user;
Output
+------------------+-------------------------------------------+-----------------------+-----------+ | user | authentication_string | plugin | host | +------------------+-------------------------------------------+-----------------------+-----------+ | root | | auth_socket | localhost | | mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | caching_sha2_password | localhost | | mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | caching_sha2_password | localhost | | debian-sys-maint | *8486437DE5F65ADC4A4B001CA591363B64746D4C | caching_sha2_password | localhost | | phpmyadmin | *5FD2B7524254B7F81B32873B1EA6D681503A5CA9 | caching_sha2_password | localhost | +------------------+-------------------------------------------+-----------------------+-----------+ 5 rows in set (0.00 sec)

Neste exemplo, você pode ver que o usuário root de fato autentica usando o plug-in auth_socket. Para configurar a conta raiz para autenticar com uma senha, execute o seguinte comando ALTER USER. Certifique-se de alterar password para uma senha forte de sua escolha:

  1. ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'password';

Nota: A instrução ALTER USER anterior define o usuário raiz do MySQL para autenticar com o plug-in caching_sha2_password. De acordo com a documentação oficial do MySQL, caching_sha2_password é o plug-in de autenticação preferido do MySQL, pois fornece criptografia de senha mais segura do que o antigo, mas ainda amplamente usado, mysql_native_password.

No entanto, algumas versões do PHP não funcionam de forma confiável com caching_sha2_password. O PHP relatou que este problema foi corrigido a partir do PHP 7.4, mas se você encontrar um erro ao tentar fazer login no phpMyAdmin mais tarde, você pode querer configurar o root para autenticar com mysql_native_password:

  1. ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

Em seguida, verifique os métodos de autenticação empregados por cada um de seus usuários novamente para confirmar que o root não autentica mais usando o plug-in auth_socket:

  1. SELECT user,authentication_string,plugin,host FROM mysql.user;
Output
+------------------+-------------------------------------------+-----------------------+-----------+ | user | authentication_string | plugin | host | +------------------+-------------------------------------------+-----------------------+-----------+ | root | *DE06E242B88EFB1FE4B5083587C260BACB2A6158 | caching_sha2_password | localhost | | mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | caching_sha2_password | localhost | | mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | caching_sha2_password | localhost | | debian-sys-maint | *8486437DE5F65ADC4A4B001CA591363B64746D4C | caching_sha2_password | localhost | | phpmyadmin | *5FD2B7524254B7F81B32873B1EA6D681503A5CA9 | caching_sha2_password | localhost | +------------------+-------------------------------------------+-----------------------+-----------+ 5 rows in set (0.00 sec)

Você pode ver nesta saída que o usuário raiz se autenticará usando uma senha. Agora você pode fazer login na interface do phpMyAdmin como seu usuário root com a senha que você definiu aqui.

Configurando o acesso por senha para um usuário MySQL dedicado

Como alternativa, alguns podem achar que é mais adequado ao seu fluxo de trabalho conectar-se ao phpMyAdmin com um usuário dedicado. Para fazer isso, abra o shell do MySQL novamente:

  1. sudo mysql

Se você tiver a autenticação de senha habilitada para seu usuário root, conforme descrito na seção anterior, você precisará executar o seguinte comando e inserir sua senha quando solicitado para se conectar:

  1. mysql -u root -p

A partir daí, crie um novo usuário e dê a ele uma senha forte:

  1. CREATE USER 'sammy'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'password';

Nota: Novamente, dependendo de qual versão do PHP você instalou, você pode querer configurar seu novo usuário para autenticar com mysql_native_password ao invés de caching_sha2_password:

  1. ALTER USER 'sammy'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

Em seguida, conceda ao novo usuário os privilégios apropriados. Por exemplo, você pode conceder privilégios de usuário a todas as tabelas do banco de dados, bem como o poder de adicionar, alterar e remover privilégios de usuário, com este comando:

  1. GRANT ALL PRIVILEGES ON *.* TO 'sammy'@'localhost' WITH GRANT OPTION;

Depois disso, saia do shell do MySQL:

  1. exit

Agora você pode acessar a interface web visitando o nome de domínio do seu servidor ou endereço IP público seguido por /phpmyadmin:

https://your_domain_or_IP/phpmyadmin

Faça login na interface, como root ou com o novo nome de usuário e senha que você acabou de configurar.

Ao fazer login, você verá a interface do usuário, que será mais ou menos assim:

Agora que você pode se conectar e interagir com o phpMyAdmin, tudo o que resta fazer é fortalecer a segurança do seu sistema para protegê-lo de invasores.

Etapa 3 — Protegendo sua instância do phpMyAdmin

Devido à sua onipresença, o phpMyAdmin é um alvo popular para invasores, e você deve tomar cuidado extra para evitar o acesso não autorizado. Uma maneira de fazer isso é colocar um gateway na frente de todo o aplicativo usando as funcionalidades de autenticação e autorização .htaccess integradas do Apache.

Para fazer isso, você deve primeiro habilitar o uso de substituições de arquivo .htaccess editando o arquivo de configuração do Apache da instalação do phpMyAdmin.

Use seu editor de texto preferido para editar o arquivo phpmyadmin.conf que foi colocado em seu diretório de configuração do Apache. Aqui, usaremos nano:

  1. sudo nano /etc/apache2/conf-available/phpmyadmin.conf

Adicione uma diretiva AllowOverride All na seção do arquivo de configuração, assim:

<Directory /usr/share/phpmyadmin>
    Options SymLinksIfOwnerMatch
    DirectoryIndex index.php
    AllowOverride All
    . . .

Depois de adicionar esta linha, salve e feche o arquivo. Se você usou nano para editar o arquivo, faça-o pressionando CTRL + X, Y e, em seguida, ENTER .

Para implementar as alterações feitas, reinicie o Apache:

  1. sudo systemctl restart apache2

Agora que você habilitou o uso de arquivos .htaccess para seu aplicativo, você precisa criar um para realmente implementar alguma segurança.

Para que isso seja bem-sucedido, o arquivo deve ser criado dentro do diretório do aplicativo. Você pode criar o arquivo necessário e abri-lo em seu editor de texto com privilégios de root digitando:

  1. sudo nano /usr/share/phpmyadmin/.htaccess

Dentro deste arquivo, insira as seguintes informações:

AuthType Basic
AuthName "Restricted Files"
AuthUserFile /etc/phpmyadmin/.htpasswd
Require valid-user

Aqui está o que cada uma dessas linhas significa:

  • AuthType Basic: Esta linha especifica o tipo de autenticação que você está 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 nenhuma informação sobre o que está sendo protegido.
  • AuthUserFile: define a localização do arquivo de senha que será usado para autenticação. Isso deve estar fora dos diretórios que estão sendo servidos. Criaremos este arquivo em breve.
  • Require valid-user: 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, salve e feche o arquivo.

O local que você selecionou para o arquivo de senha foi /etc/phpmyadmin/.htpasswd. Agora você pode criar este arquivo e passá-lo a um usuário inicial com o utilitário htpasswd:

  1. sudo htpasswd -c /etc/phpmyadmin/.htpasswd username

Você será solicitado a selecionar e confirmar uma senha para o usuário que está criando. Depois, o arquivo é criado com a senha hash que você digitou.

Se você quiser inserir um usuário adicional, precisará fazê-lo sem o sinalizador -c, assim:

  1. sudo htpasswd /etc/phpmyadmin/.htpasswd additionaluser

Em seguida, reinicie o Apache para ativar a autenticação .htaccess:

  1. sudo systemctl restart apache2

Agora, quando você acessar seu subdiretório phpMyAdmin, será solicitado o nome da conta adicional e a senha que você acabou de configurar:

https://domain_name_or_IP/phpmyadmin

Depois de inserir a autenticação do Apache, você será direcionado para a página de autenticação normal do phpMyAdmin para inserir suas credenciais do MySQL. Ao adicionar um conjunto extra de credenciais não MySQL, você fornece ao seu banco de dados uma camada adicional de segurança. Isso é desejável, já que o phpMyAdmin era vulnerável a ameaças de segurança no passado.

Conclusão

Agora você deve ter o phpMyAdmin configurado e pronto para uso em seu servidor Ubuntu 20.04. Usando esta interface, você pode criar bancos de dados, usuários e tabelas, bem como realizar as operações usuais, como excluir e modificar estruturas e dados.