Pesquisa de site

12 Práticas recomendadas de segurança MySQL/MariaDB para Linux


O MySQL é o sistema de banco de dados de código aberto mais popular do mundo e o MariaDB (um fork do MySQL) é o sistema de banco de dados de código aberto que mais cresce no mundo. Depois de instalar o servidor MySQL, ele fica inseguro em sua configuração padrão e protegê-lo é uma das tarefas essenciais no gerenciamento geral de banco de dados.

Leia também: Aprenda MySQL/MariaDB para iniciantes – Parte 1

Isto contribuirá para fortalecer e aumentar a segurança geral dos servidores Linux, já que os invasores sempre verificam vulnerabilidades em qualquer parte de um sistema, e os bancos de dados foram, no passado, áreas-alvo importantes. Um exemplo comum é a força bruta da senha root do banco de dados MySQL.

Neste guia, explicaremos as melhores práticas úteis de segurança do MySQL/MariaDB para Linux.

1. Instalação segura do MySQL

Este é o primeiro passo recomendado após a instalação do servidor MySQL, para proteger o servidor de banco de dados. Este script facilita melhorar a segurança do seu servidor MySQL, solicitando que você:

  • defina uma senha para a conta root, se você não a definiu durante a instalação.
  • desabilite o login do usuário root remoto removendo contas root que são acessíveis de fora do host local.
  • remova contas de usuários anônimos e teste o banco de dados que, por padrão, pode ser acessado por todos os usuários, até mesmo usuários anônimos.
mysql_secure_installation

Após executá-lo, defina a senha de root e responda à série de perguntas digitando [Sim/S] e pressione [Enter].

2. Vincule o servidor de banco de dados ao endereço de loopback

Esta configuração restringirá o acesso de máquinas remotas, informando ao servidor MySQL para aceitar apenas conexões de dentro do host local. Você pode configurá-lo no arquivo de configuração principal.

vi /etc/my.cnf	                   [RHEL/CentOS]	
vi /etc/mysql/my.conf                    [Debian/Ubuntu] 
OR
vi /etc/mysql/mysql.conf.d/mysqld.cnf    [Debian/Ubuntu] 

Adicione a seguinte linha abaixo na seção [mysqld].

bind-address = 127.0.0.1

3. Desative LOCAL INFILE no MySQL

Como parte do fortalecimento da segurança, você precisa desabilitar local_infile para impedir o acesso ao sistema de arquivos subjacente de dentro do MySQL usando a seguinte diretiva na seção [mysqld].

local-infile=0

4. Altere a porta padrão do MYSQL

A variável Port define o número da porta MySQL que será usada para escutar conexões TCP/IP. O número da porta padrão é 3306 mas você pode alterá-lo na seção [mysqld] conforme mostrado.

Port=5000

5. Habilite o log do MySQL

Os logs são uma das melhores maneiras de entender o que acontece em um servidor. Em caso de ataque, você pode ver facilmente qualquer atividade relacionada à intrusão nos arquivos de log. Você pode ativar o log do MySQL adicionando a seguinte variável na seção [mysqld].

log=/var/log/mysql.log

6. Defina a permissão apropriada em arquivos MySQL

Certifique-se de ter as permissões apropriadas definidas para todos os arquivos e diretórios de dados do servidor MySQL. O arquivo /etc/my.conf só deve ser gravável no root. Isso impede que outros usuários alterem as configurações do servidor de banco de dados.

chmod 644 /etc/my.cnf

7. Exclua o histórico do MySQL Shell

Todos os comandos que você executa no shell do MySQL são armazenados pelo cliente mysql em um arquivo de histórico: ~/.mysql_history. Isso pode ser perigoso, porque para qualquer conta de usuário que você criar, todos os nomes de usuário e senhas digitados no shell serão registrados no arquivo de histórico.

cat /dev/null > ~/.mysql_history

8. Não execute comandos MySQL na linha de comando

Como você já sabe, todos os comandos digitados no terminal são armazenados em um arquivo de histórico, dependendo do shell que você está usando (por exemplo ~/.bash_history para bash). Um invasor que conseguir acessar esse arquivo de histórico poderá ver facilmente todas as senhas registradas nele.

Não é altamente recomendável digitar senhas na linha de comando, algo como isto:

mysql -u root -ppassword_

Ao verificar a última seção do arquivo de histórico de comandos, você verá a senha digitada acima.

history 

A maneira apropriada de conectar o MySQL é.

mysql -u root -p
Enter password:

9. Definir usuários de banco de dados específicos do aplicativo

Para cada aplicação em execução no servidor, conceda acesso apenas ao usuário responsável pelo banco de dados de uma determinada aplicação. Por exemplo, se você tiver um site wordpress, crie um usuário específico para o banco de dados do site wordpress da seguinte maneira.

mysql -u root -p
MariaDB [(none)]> CREATE DATABASE osclass_db;
MariaDB [(none)]> CREATE USER 'osclassdmin'@'localhost' IDENTIFIED BY 'osclass@dmin%!2';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON osclass_db.* TO 'osclassdmin'@'localhost';
MariaDB [(none)]> FLUSH PRIVILEGES;
MariaDB [(none)]> exit

e lembre-se de sempre remover contas de usuários que não gerenciam mais nenhum banco de dados de aplicativos no servidor.

10. Use plug-ins e bibliotecas de segurança adicionais

O MySQL inclui vários plug-ins de segurança para: autenticar tentativas de clientes para se conectar ao servidor mysql, validação de senha e armazenamento seguro de informações confidenciais, todos disponíveis na versão gratuita.

Você pode encontrar mais aqui: https://dev.mysql.com/doc/refman/5.7/en/security-plugins.html

11. Altere as senhas do MySQL regularmente

Este é um conselho comum de segurança de informações/aplicativos/sistema. A frequência com que você faz isso dependerá inteiramente da sua política de segurança interna. No entanto, pode evitar que “bisbilhoteiros” que possam estar rastreando sua atividade por um longo período de tempo obtenham acesso ao seu servidor mysql.

MariaDB [(none)]> USE mysql;
MariaDB [(none)]> UPDATE user SET password=PASSWORD('YourPasswordHere') WHERE User='root' AND Host = 'localhost';
MariaDB [(none)]> FLUSH PRIVILEGES;

12. Atualize o pacote do servidor MySQL regularmente

É altamente recomendável atualizar os pacotes mysql/mariadb regularmente para acompanhar as atualizações de segurança e correções de bugs, do repositório do fornecedor. Normalmente os pacotes nos repositórios padrão do sistema operacional estão desatualizados.

yum update
apt update

Após fazer qualquer alteração no servidor mysql/mariadb, sempre reinicie o serviço.

systemctl restart mariadb		#RHEL/CentOS
systemctl restart mysql		#Debian/Ubuntu

Leia também: 15 dicas úteis para ajuste e otimização de desempenho do MySQL/MariaDB

Isso é tudo! Adoramos ouvir de você através do formulário de comentários abaixo. Compartilhe conosco quaisquer dicas de segurança do MySQL/MariaDB que faltam na lista acima.