Tutorial

Como instalar e proteger o phpMyAdmin no Ubuntu 20.04

Published on May 21, 2020

Manager, Developer Education

Português
Como instalar e proteger o phpMyAdmin no Ubuntu 20.04

Existe uma versão anterior deste tutorial, escrita por Brennan Bearnes.

Introdução

Embora muitos usuários precisam da funcionalidade de um sistema de gerenciamento de banco de dados como o MySQL, talvez não se sintam à vontade para interagir com o sistema unicamente 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 será necessário:

Além disso, existem algumas considerações de segurança importantes ao se utilizar um software como o phpMyAdmin, uma vez que ele:

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

Por isso e também por ser um aplicativo PHP amplamente utilizado - sendo alvo frequente de ataque, nunca execute o phpMyAdmin em sistemas remotos em uma conexão HTTP simples.

Caso você não tenha um domínio existente configurado com um certificado SSL/TLS, siga este guia sobre como proteger o Apache com o Let’s Encrypt no Ubuntu 20.04. Isso irá exigir que você registre um nome de domínio, crie registros DNS para seu servidor e configure um host Virtual Apache.

Passo 1 — Instalando o phpMyAdmin

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

Usando seu non-root sudo user, atualize o índice de pacotes do seu servidor:

  1. sudo apt update

Em seguida, você pode instalar o pacote phpmyadmin. Com esse 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 foram instalados 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 possui suporte de upload de arquivos .zip para o phpMyAdmin
  • php-gd: habilita o suporte para a biblioteca gráfica do GD
  • php-json: fornece o PHP com suporte para a serialização JSON
  • php-curl: permite que o PHP interaja com diferentes tipos de servidores usando protocolos diferentes

Execute o seguinte comando para instalar esses pacotes em seu sistema. No entanto, note que o processo de instalação exige que você faça algumas escolhas para configurar o phpMyAdmin corretamente. Analisaremos essas opções em instantes:

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

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

  • Na seleção do servidor, escolha apache2 <$>[warning] Aviso: quando o prompt aparecer, o “apache2” estará destacado, mas não estará selecionado. Se você apertar a tecla SPACE para selecionar o Apache, o instalador não irá mover os arquivos necessários durante a instalação. Aperte as teclas SPACE, TAB e, então, ENTER para selecionar o Apache. <$>
  • Selecione Yes quando indagado quanto a se usará o dbconfig-common para configurar o banco de dados
  • Será solicitado que escolha e confirme a senha do aplicativo MySQL para o phpMyAdmin

Nota: assumindo que você instalou o MySQL seguindo o Passo 2 do tutorial de pré-requisito da pilha LAMP, você pode ter decidido habilitar o plug-in de validação de senha. Assim como este artigo, habilitar este componente acionará um erro caso você tente definir uma senha para o usuário phpmyadmin:

erro de validação de senha do phpMyAdmin

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

  1. sudo mysql

Caso tenha habilitado a autenticação por senha para o usuário root do MySQL, execute este comando e, em seguida, digite sua senha quando solicitada:

  1. mysql -u root -p

A partir do prompt, execute o seguinte comando para desabilitar o componente de validação de senha. Observe que isso não desinstalará o componente, apenas impedirá que ele seja carregado em seu servidor MySQL:

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

Em seguida, feche o cliente do MySQL:

  1. exit

Em seguida, tente instalar o pacote phpmyadmin novamente. Ele funcionará como esperado:

  1. sudo apt install phpmyadmin

Assim que o phpMyAdmin for instalado, você pode abrir o prompt do MySQL novamente com o sudo mysql ou o mysql -u root -p e, em seguida, executar o seguinte comando para habilitar novamente o componente de validação de senha:

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

O processo de instalação adiciona o arquivo de configuração do Apache phpMyAdmin no diretório /etc/apache2/conf-enabled/, onde ele é lido automaticamente. A única tarefa deste tutorial que falta para terminar a configuração do Apache e do PGP para funcionarem com o phpMyAdmin, é de habilitar a extensão PHP mbstring. Isso pode ser feito digitando:

  1. sudo phpenmod mbstring

Depois disso, reinicie o Apache para as suas alterações serem reconhecidas:

  1. sudo systemctl restart apache2

O phpMyAdmin está instalado e configurado para funcionar com o Apache. Entretanto, antes de fazer login e começar a interagir com seus bancos de dados do MySQL, será necessário garantir que seus usuários do MySQL tenham os privilégios necessários para interagir com o programa.

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

Quando você instalou o phpMyAdmin no 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 que você faça log in como usuário root do MySQL ou como um usuário dedicado para gerenciar os bancos de dados através da interface phpMyAdmin.

Configurando a senha de acesso para a conta de raiz do MySQL

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

Para fazer login no phpMyAdmin como seu usuário root do MySQL, será necessário mudar seu método de autenticação de auth_socket para um método que utilize senha, se ainda não tiver feito isso. Para fazer isso, abra o prompt do MySQL do seu terminal:

  1. sudo mysql

Em seguida, verifique quais os métodos de autenticação cada conta de usuário do seu MySQL utilizam 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, é possível ver que o usuário root autenticou usando o plug-in auth_socket. Para configurar a conta root para autenticar com uma senha, execute o comando ALTER USER. Certifique-se de alterar a password para uma senha forte da sua escolha:

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

Nota: a instrução anterior, ALTER USER, configura o usuário root do MySQL para autenticar-se com o plug-in caching_sha2_password. De acordo com a documentação oficial do MySQL, o caching_sha2_password é o plug-in de autenticação preferencial do MySQL, pois ele fornece uma criptografia de senha mais segura do que o mysql_native_password, que é o plug-in mais antigo (mas ainda assim bastante utilizado).

No entanto, algumas versões do PHP não funcionam de maneira confiável com o caching_sha2_password. O PHP informou que esse problema foi corrigido na versão do PHP 7.4, mas caso você ache um erro ao tentar fazer login no phpMyAdmin, como opção, defina o root para autenticar-se com o mysql_native_password:

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

Em seguida, verifique os métodos de autenticação utilizados pelos seus usuários para confirmar que o root já não é autenticado 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)

Através dessa saída é possível ver que o usuário root passará a autenticar usando uma senha. Agora, é possível fazer login na interface phpMyAdmin como seu usuário root com a senha que você definiu para ele aqui.

Configurando a senha de acesso para um usuário do MySQL dedicado

Como alternativa, alguns podem achar que é melhor eles se conectarem ao phpMyAdmin com um usuário dedicado. Para fazer isso, abra a shell do MySQL novamente:

  1. sudo mysql

Se você tiver a autenticação por senha habilitada para o root user, como descrito na seção anterior, você precisará executar o seguinte comando e digitar sua senha quando solicitada para poder 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 da versão do PHP que você instalou, aconselhamos definir seu novo usuário para autenticar-se com o mysql_native_password em vez do caching_sha2_password:

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

Então, conceda ao seu novo usuário os privilégios apropriados. Por exemplo, é possível conceder os privilégios de usuário para todas as tabelas dentro do banco de dados, além do poder de adicionar, alterar e remover os privilégios de usuário, com este comando:

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

Despois disso, saia do shell do MySQL:

  1. exit

Agora, é possível acessar a interface Web, acessando o nome de domínio ou endereço IP público do seu servidor seguido por /phpmyadmin:

https://your_domain_or_IP/phpmyadmin

phpMyAdmin login screen

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

Quando fazer login, verá a interface de usuário que se parecerá com isso:

phpMyAdmin user interface

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

Passo 3 — Protegendo sua instância phpMyAdmin

Devido a sua onipresença, o phpMyAdmin é alvo conhecido de ataque. Você deverá tomar cuidado extra para evitar o acesso não autorizado. Uma maneira de fazer isso é colocar um gateway na frente do aplicativo inteiro utilizando a autenticação integrada .htaccess e as funcionalidades da autorização.

Para fazer isso, você deve primeiro habilitar o uso da substituição do arquivo .htaccess através da edição do arquivo de configuração Apache da sua instalação do phpMyAdmin.

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

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

Adicione uma diretriz de AllowOverride All na seção <Directory /usr/share/phpmyadmin> do arquivo de configuração, desta forma:

/etc/apache2/conf-available/phpmyadmin.conf
<Directory /usr/share/phpmyadmin>
    Options FollowSymLinks
    DirectoryIndex index.php
    AllowOverride All
    . . .

Quando tiver adicionado essa linha, salve e feche o arquivo. Se você utilizou o nano para editor o arquivo, faça isso pressionando CTRL + X, Y e, depois, ENTER.

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

  1. sudo systemctl restart apache2

Agora que o arquivo .htaccess foi habilitado para uso em seu aplicativo, será necessário criar um arquivo que realmente implemente alguma segurança.

Para que isso seja bem-sucedido, o arquivo deve ser criado dentro do diretório do aplicativo. Crie o arquivo necessário e o abra no seu editor de texto com privilégios raiz, digitando:

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

Dentro desse arquivo, digite as seguintes informações:

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

Eis o que cada uma dessas linhas significa:

  • AuthType Basic: esta linha especifica o tipo de autenticação que você está implementando. Esse tipo irá implementar a autenticação por senha, utilizando um arquivo de senha.
  • AuthName: define a mensagem da caixa de diálogo da autenticação. Você deve manter essas definições com texto vago, no intuito de evitar que usuários não autorizados tenham acesso às informações sobre o que estiver sendo protegido.
  • AuthUserFile: define o local do arquivo de senha que será usado para autenticação. Esse arquivo deve permanecer fora dos diretórios que estão sendo atendidos. Criaremos esse arquivo em breve.
  • Require valid-user: especifica que apenas os usuários autenticados devem receber acesso a este recurso. Isto é o que realmente impede os usuários não autorizados de entrarem.

Quando você terminar, salve e feche o arquivo.

O local que você selecionou para seu arquivo de senha foi /etc/phpmyadmin/.htpasswd. Agora, é possível criar este arquivo e encaminhá-lo para um usuário inicial com o utilitário htpasswd:

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

Será solicitado que selecione e confirme uma senha para o usuário que está criando. Depois disso, o arquivo é criado com a senha verificada que você digitou.

Se quiser inserir um usuário adicional, será necessário fazer isso sem o sinalizador -c, desta maneira:

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

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

https://domain_name_or_IP/phpmyadmin

phpMyAdmin apache password

Após digitar a autenticação do Apache, você será levado para a página de autenticação regular do phpMyAdmin para digitar suas credenciais do MySQL. Ao adicionar um conjunto extra de credenciais não-MySQL, você está fornecendo uma camada adicional de segurança ao seu banco de dados. Isso é o que queremos, pois, o phpMyAdmin ficou vulnerável a ameaças de segurança anteriormente.

Conclusão

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

Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.

Learn more about our products

About the authors
Default avatar

Manager, Developer Education

Technical Writer @ DigitalOcean

Still looking for an answer?

Ask a questionSearch for more help

Was this helpful?
 
2 Comments


This textbox defaults to using Markdown to format your answer.

You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!

Thanks all the Digital Ocean team for the useful content always!

I did everything right until the root authentication change from auth_socket to use password.

But now I can’t open MySQL with sudo mysql.

I have an error that I can’t solve. :(

https://snipboard.io/1RlY5k.jpg

Try DigitalOcean for free

Click below to sign up and get $200 of credit to try our products over 60 days!

Sign up

Join the Tech Talk
Success! Thank you! Please check your email for further details.

Please complete your information!

Featured on Community

Get our biweekly newsletter

Sign up for Infrastructure as a Newsletter.

Hollie's Hub for Good

Working on improving health and education, reducing inequality, and spurring economic growth? We'd like to help.

Become a contributor

Get paid to write technical tutorials and select a tech-focused charity to receive a matching donation.

Welcome to the developer cloud

DigitalOcean makes it simple to launch in the cloud and scale up as you grow — whether you're running one virtual machine or ten thousand.

Learn more