Pesquisa de site

Como instalar e proteger o phpMyAdmin no Ubuntu 18.04


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 cliente de linha de comando 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 18.04.

Pré-requisitos

Para concluir este tutorial, você precisará do seguinte:

  • Um servidor rodando Ubuntu 18.04. Este servidor deve ter um usuário administrativo não raiz com privilégios sudo, bem como um firewall configurado com UFW. Para configurar isso, siga nosso guia inicial de configuração do servidor para Ubuntu 18.04.
  • Uma pilha LAMP instalada em seu servidor. Você pode seguir este guia sobre como instalar uma pilha LAMP no Ubuntu 18.04 para configurar isso.

Finalmente, há importantes considerações de segurança ao usar software como o phpMyAdmin, uma vez que:

  • 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.

Depois de concluir essas etapas, você estará pronto para começar com este guia.

Passo 1 — Instalando o phpMyAdmin

Para começar, instalaremos o phpMyAdmin dos repositórios padrão do Ubuntu.

Primeiro, atualize o índice de pacotes do seu servidor:

  1. sudo apt update

Em seguida, use apt para baixar os arquivos e instalá-los em seu sistema:

  1. sudo apt install phpmyadmin php-mbstring php-gettext

Isso fará algumas perguntas para configurar sua instalação corretamente.

Aviso: quando o prompt aparecer, \apache2 será realçado, mas não selecionado. Para selecionar Apache, pressione SPACE, TAB e ENTER .

Se você não clicar em SPACE para selecionar o Apache, o instalador não moverá os arquivos necessários durante a instalação.

  • Para a seleção do servidor, escolha apache2
  • 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

O processo de instalação adiciona o arquivo de configuração Apache phpMyAdmin no diretório /etc/apache2/conf-enabled/, onde é lido automaticamente. A única coisa que você precisa fazer é 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. 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 mysql_native_password se ainda não tiver feito isso. 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 | 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, 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 mysql_native_password BY 'password';

Em seguida, execute FLUSH PRIVILEGES que informa ao servidor para recarregar as tabelas de concessão e colocar suas novas alterações em vigor:

  1. FLUSH PRIVILEGES;

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 | 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)

Essa saída indica que o usuário raiz será autenticado 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

Alternativamente, 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

Observação: se a autenticação por senha estiver habilitada, conforme descrito na seção anterior, você precisará usar um comando diferente para acessar o shell do MySQL. O seguinte executará seu cliente MySQL com privilégios de usuário regulares e você só obterá privilégios de administrador no banco de dados autenticando:

  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 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 da web visitando o nome de domínio do seu servidor ou endereço IP público seguido por /phpmyadmin:

http://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ê será direcionado para a interface de usuário do phpMyAdmin:

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 das maneiras mais fáceis 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 seu arquivo de configuração do Apache.

Use seu editor de texto favorito para editar o arquivo vinculado que foi colocado em seu diretório de configuração do Apache. Este exemplo usa 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 FollowSymLinks
    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 habilitou o uso de .htaccess para seu aplicativo, você precisa criar um arquivo .htaccess 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

Agora, ao acessar seu subdiretório phpMyAdmin, você será solicitado a fornecer o nome de conta adicional e a senha que 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. Essa configuração adiciona uma camada adicional de segurança, o que é desejável, pois o phpMyAdmin sofreu vulnerabilidades no passado.

Conclusão

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