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 do banco de dados.
Isso contribuirá para fortalecer e aumentar a segurança geral do servidor Linux, pois 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 de root para o banco de dados MySQL.
Neste guia, explicaremos o MySQL/MariaDB útil melhor prática de segurança 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 a melhoria da segurança do seu servidor MySQL, solicitando que você:
- defina uma senha para a conta root, caso não a tenha definido durante a instalação.
- desabilite o login de usuário root remoto removendo contas root acessíveis de fora do host local.
- remova contas de usuários anônimos e banco de dados de teste que, por padrão, pode ser acessado por todos os usuários, mesmo usuários anônimos.
# mysql_secure_installation
Depois de executá-lo, defina a senha de root e responda a série de perguntas digitando [Sim/S ] e pressione [Enter] .
2. Vincular servidor de banco de dados ao endereço de loopback
Esta configuração irá restringir o acesso de máquinas remotas, ela diz ao servidor MySQL para aceitar somente conexões de dentro do localhost. 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 em
[mysqld]
seção. bind-address = 127.0.0.1
3. Desabilitar 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 em
[mysqld]
seção. local-infile=0
4. Alterar a porta padrão do MYSQL
O Porto A variável 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 no [mysqld] seção como mostrado.
Port=5000
5. Ativar log do MySQL
Os logs são uma das melhores maneiras de entender o que acontece em um servidor, em caso de ataques, você pode ver facilmente qualquer atividade relacionada à intrusão dos arquivos de log. Você pode habilitar o log do MySQL adicionando a seguinte variável no
[mysqld]
seção. log=/var/log/mysql.log
6. Definir 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 /etc/my.conf arquivo só deve ser gravável para root. Isso impede que outros usuários alterem as configurações do servidor de banco de dados.
# chmod 644 /etc/my.cnf
7. Excluir histórico do shell do MySQL
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 a partir da linha de comando
Como você já sabe, todos os comandos que você digita 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 pode ver facilmente as senhas registradas nele.
Não é altamente recomendável digitar senhas na linha de comando, algo assim:
# 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 aplicativo executado no servidor, conceda acesso apenas a um usuário responsável pelo banco de dados de um determinado aplicativo. 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 '[email protected]%!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 estejam mais gerenciando nenhum banco de dados de aplicativos no servidor.
10. Use plugins e bibliotecas de segurança adicionais
O MySQL inclui vários plugins de segurança para:autenticar tentativas de clientes de se conectar ao servidor mysql, validação de senha e armazenamento seguro para 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/sistemas. A frequência com que você faz isso dependerá inteiramente de sua política de segurança interna. No entanto, isso pode impedir que “snoopers” 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
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 estejam faltando na lista acima.