Existe uma versão anterior deste tutorial, escrita por Brennan Bearnes.
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, vamos discutir 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 18.04.
Antes de começar com este guia, será necessário concluir alguns passos básicos.
Primeiramente, vamos supor que o seu servidor tenha um usuário não** rai**z com privilégios sudo
, além de um firewall configurado com ufw
, como descrito noGuia de configuração inicial do servidor para o Ubuntu 18.04.
Também vamos presumir que você completou a instalação do LAMP (Linux, Apache, MySQL e PHP) no seu servidor Ubuntu 18.04. Se ainda não tiver feito isso, siga este guia de Como instalar uma pilha LAMP no Ubuntu 18.04.
Finalmente, existem considerações de segurança importantes ao se usar software como o phpMyAdmin, uma vez que ele:
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. Se não tiver um domínio existente configurado com um certificado SSL/TLS, siga este guia de como proteger o Apache com o Let’s Encrypt no Ubuntu 18.04. Isso irá exigir que você registre um nome de domínio, crie registros DNS para seu servidor e configure um host Virtual Apache.
Assim que terminar estes passos, você estará pronto para começar com este guia.
Para começar, instalaremos o phpMyAdmin a partir dos repositórios padrão do Ubuntu.
Isso é feito atualizando-se o índice de pacotes do seu servidor e, depois, usando o sistema de empacotament o apt
para pegar os arquivos e instalá-los no seu sistema:
- sudo apt update
- sudo apt install phpmyadmin php-mbstring php-gettext
Serão feitas algumas perguntas para configurar sua instalação corretamente.
Aviso: quando o prompt surgir, 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.
apache2
Yes
quando indagado quanto a se usará o dbconfig-common
para configurar o banco de dadosO 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 coisa que você precisa fazer é habilitar explicitamente a extensão do PHP mbstring
, o que pode ser feito digitando:
- sudo phpenmod mbstring
Depois disso, reinicie o Apache para as suas alterações serem reconhecidas:
- sudo systemctl restart apache2
O phpMyAdmin agora está instalado e configurado. 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.
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.
Nos sitemas 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 pspMyAdmin como seu usuário root do MySQL, será necessário mudar seu método de autenticação a partir do auth_socket
para o mysql_native_password
, se ainda não tiver feito isso. Para fazer isso, abra o prompt do MySQL do seu terminal:
- 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:
- SELECT user,authentication_string,plugin,host FROM mysql.user;
Output+------------------+-------------------------------------------+-----------------------+-----------+
| user | authentication_string | plugin | host |
+------------------+-------------------------------------------+-----------------------+-----------+
| root | | auth_socket | localhost |
| mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| debian-sys-maint | *8486437DE5F65ADC4A4B001CA591363B64746D4C | mysql_native_password | localhost |
| phpmyadmin | *5FD2B7524254B7F81B32873B1EA6D681503A5CA9 | mysql_native_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 trocar a senha
por uma senha forte de sua escolha:`
- ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
Então, execute o comando FLUSH
o qual diz para o servidor recarregar as tabelas de permissões e colocar as suas alterações em vigor:
- FLUSH PRIVILEGES;
Verifique novamente os métodos de autenticação utilizados pelos seus usuários para confirmar que **o raiz **já não autentica utilizando o plug-in auth_socket
:
- SELECT user,authentication_string,plugin,host FROM mysql.user;
Output+------------------+-------------------------------------------+-----------------------+-----------+
| user | authentication_string | plugin | host |
+------------------+-------------------------------------------+-----------------------+-----------+
| root | *DE06E242B88EFB1FE4B5083587C260BACB2A6158 | mysql_native_password | localhost |
| mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| debian-sys-maint | *8486437DE5F65ADC4A4B001CA591363B64746D4C | mysql_native_password | localhost |
| phpmyadmin | *5FD2B7524254B7F81B32873B1EA6D681503A5CA9 | mysql_native_password | localhost |
+------------------+-------------------------------------------+-----------------------+-----------+
5 rows in set (0.00 sec)
Através dessa saída é possível ver que o usuário raiz passará a autenticar usando uma senha. Agora, é possível fazer login na interface phpMyAdmin como seu usuário **raiz **com a senha que você definiu para ele aqui.
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:
- sudo mysql
Nota: se tiver a autenticação de senha habilitada, como descrito na seção anterior, será necessário usar um comando diferente para acessar a shell do MySQL. A sintaxe abaixo executará o seu cliente MySQL com privilégios regulares de usuário. Você somente terá privilégios de administrador dentro do banco de dados através desta autenticação:
- mysql -u root -p
A partir daí, crie um novo usuário e dê a ele uma senha forte:
- CREATE USER 'sammy'@'localhost' IDENTIFIED 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:
- GRANT ALL PRIVILEGES ON *.* TO 'sammy'@'localhost' WITH GRANT OPTION;
Despois disso, saia do shell do MySQL:
- 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
:
http://your_domain_or_IP/phpmyadmin
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:
Agora que é capaz de se conectar e interagir com o phpMyAdmin, tudo o que resta a se fazer é fortalecer a segurança dos seus sistemas para protegê-los de ataques.
Devido a sua onipresença, o phpMyAdmin é alvo conhecido de ataque. Você deverá tomar cuidado extra para evitar o acesso não autorizado. Uma das maneiras mais fáceis de fazer isso é colocar um gateway na frente do aplicativo inteiro, utilizando as funcionalidades integradas do Apache para autenticação e dautorização, ou seja, .htaccess
.
Para fazer isso, primeiro você deve habilitar o uso do arquivo .htaccess
, editando seu arquivo de configuração do Apache.
Edite o arquivo vinculado que foi colocado no seu diretório de configuração do Apache:
- sudo nano /etc/apache2/conf-available/phpmyadmin.conf
Adicione uma diretiva de AllowOverride All
na seção <Directory /usr/share/phpmyadmin>
do arquivo de configuração, desta forma:
<Directory /usr/share/phpmyadmin>
Options FollowSymLinks
DirectoryIndex index.php
AllowOverride All
. . .
Quando tiver adicionado essa linha, salve e feche o arquivo.
Para implementar as alterações feitas, reinicie o Apache:
- sudo systemctl restart apache2
Agora que o .htaccess
foi habilitado para 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:
- sudo nano /usr/share/phpmyadmin/.htaccess
Dentro desse arquivo, digite as seguintes informações:
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
:
- 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 sinaliz
ador -c, desta maneira:
- 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
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. Esta configuração adiciona uma camada adicional de segurança, o que é desejável considerando que o phpMyAdmin sofreu vulnerabilidades no passado.
Agora, você deve ter o phpMyAdmin configurado e pronto para usar no seu servidor Ubuntu 18.04. Ao utilizar esta interface, conseguirá criar facilmente bancos de dados, usuários, tabelas etc. 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.
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!
Muito útil, muito obrigado.