6 de setembro de 2020

O bug do root no MariaDB no Debian e similares

O assunto aqui é Banco de Dados!

Se você já instalou um servidor de banco de dados no Debian, Ubuntu, Raspbian, etc. sabe que é preciso um procedimento pra deixar o servidor prontinho para uso.

Nas versões recentes do Debian, Ubuntu e outros, o servidor MySQL, que passou a ser proprietário, foi substituído por sua versão OpenSource que é o MariaDB. Na prática, o sistema é o mesmo (com algumas diferenças muito técnicas, que não é objeto desse artigo), e substitui o MySQL na maioria das aplicações web. Só que há um recurso na instalação que atrapalha um pouco o acesso ao root (o usuário administrativo do servidor de banco de dados).

Acontece que quando é instalado banco de dados, o MariaDB instala por padrão o plugin Unix Socket para a autenticação e ativa para o usuário root. Isso faz com que a autenticação por linha de comando, ou o acesso usando o PHPMyAdmin falhe, mesmo inserindo a senha correta, caso tenha sido definida pelo comando mysql_secure_installation.

Isso pode ser frustrante para administradores de banco de dados que utilizam a forma tradicional de acesso, pois o Unix Socket utiliza a autenticação do sistema para acesso ao banco de dados, o que para alguns casos não é prático, fora que distribuições Debian não oferecem, por segurança, acesso direto ao usuário root em uma máquina local, sendo necessária a utilização do comando sudo para comandos com privilégios administrativos. Para resolver isso, é preciso fazer com que o usuário root tenha como método de autenticação a forma tradicional, que é a autenticação por senha gravada no próprio banco de dados.

Então, iremos seguir os seguintes passos, sendo que estes passos devem ser feitos pelo root, ou para usuários com privilégios administrativos (usuários membros do grupo sudoers e com o sudo instalado no sistema Debian). Usaremos a segunda opção.

  1. Primeiramente iremos interromper o processo do servidor do banco de dados.
    $ sudo service mysql stop
  2. Depois iremos iniciar o servidor do banco de dados, mas de forma segura e sem as configurações:
    $ sudo mysqld_safe --skip-grant-tables &&
  3. Assim poderemos acessar o banco de dados sem exigir autenticação digitando o seguinte comando:
    $ sudo mysql -u root
  4. Será exibido o prompt de comando do MySQL, assim:
    Welcome to the MariaDB monitor.  Commands end with ; or \g.
    Your MariaDB connection id is 492
    Server version: 10.3.23-MariaDB-0+deb10u1 Raspbian 10

    Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

    Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

    MariaDB [(none)]>
  5. Digitamos no prompt os comandos para remover o Unix Socket como modo de acesso do usuário root, alterando o usuário e atualizando os privilégios no servidor e depois saímos:
    MariaDB [(none)]> UPDATE mysql.user SET plugin = '' WHERE user = 'root' AND plugin = 'unix_socket';
    MariaDB [(none)]> FLUSH PRIVILEGES;
    MariaDB [(none)]> \q
  6. Reinicie o servidor de banco de dados:
    $ sudo service mysql restart
Agora, é possível usar o Unix Socket para acessar o banco de dados usando o root, porém apenas em linha de comando, o que impossibilitaria o uso do usuário root no PHPMyAdmin, por exemplo, seguindo os seguintes comandos:

$ sudo su
# mysql -u root

Mantendo o Unix Socket, o acesso ao banco de dados é realizado pelo sistema, o que tornaria o processo mais seguro, porém mais trabalhoso para usuários administradores de banco de dados.

Nenhum comentário:

Postar um comentário