MySQL
MySQL é um sistema de gerenciamento de banco de dados relacional de código aberto. Este guia mostrará como proteger e auditar um servidor MySQL. O nome é uma combinação de “My”, o nome da filha do cofundador Michael Widenius, e “SQL”, a abreviação de Structured Query Language.
Antes de começar
-
Certifique-se de ter seguido os guias de Introdução e Protegendo seu servidor. Certifique-se de que o nome de host do Linode está definido.
Verifique o nome de host do seu Linode. O primeiro comando deve mostrar seu nome de host curto e o segundo deve mostrar seu nome de domínio totalmente qualificado (FQDN).
hostname hostname -f
Observação Se você tiver um nome de domínio registrado para o seu site, adicione o domínio ao servidor Linode no qual você planeja instalar a pilha LAMP. Se você não tiver um nome de domínio registrado, substitua
example.com
com o endereço IP do servidor Linode nas seguintes instruções. -
Atualize seu sistema:
sudo yum update
Observação Este guia foi escrito para um usuário não root. Comandos que requerem privilégios elevados são prefixados com
sudo
. Se você não estiver familiarizado com osudo
comando, você pode verificar nosso guia de usuários e grupos. -
Para proteger e auditar o MySQL, você precisa ter um servidor Linux com oMySQL Server
serviços em execução. Para obter informações sobre como instalar o MySQL, consulteInstall MySQL
Observação As instruções neste guia são baseadas no Ubuntu 18.04, embora todas as etapas sejam independentes de distribuição, com exceção de nomes de pacotes e gerenciadores de pacotes.
Usando o instalador seguro do MySQL
O pacote mysql-server vem pré-configurado com um utilitário chamado
mysql_secure_installation
que é usado para configurar um ponto de partida seguro para o servidor MySQL, excluindo usuários anônimos e permitindo que você especifique a política de força de senha desejada. mysql_secure_installation
é um script de shell disponível em sistemas Unix e permite proteger a instalação do MySQL, permitindo:- definir uma senha para contas root
- remover contas raiz acessíveis de fora do host local
- remover contas de usuários anônimos
- remova o banco de dados de teste, que por padrão pode ser acessado por usuários anônimos
Inicie o processo de segurança executando este utilitário imediatamente após instalar o mysql-server.
-
Chame o utilitário executando o seguinte comando:
sudo mysql_secure_installation
-
O processo de configuração é iniciado e o utilitário solicita que você especifique se deseja ativar o plug-in de validação de senha que é usado para testar senhas e melhorar a segurança. Recomenda-se habilitar este recurso.Securing the MySQL server deployment. Connecting to MySQL using a blank password. VALIDATE PASSWORD PLUGIN can be used to test passwords and improve security. It checks the strength of password and allows the users to set only those passwords which are secure enough. Would you like to setup VALIDATE PASSWORD plugin? Press y|Y for Yes, any other key for No: y
-
Depois de ativar o plug-in de senha, especifique sua política de validação de senha com base no nível de força das senhas desejadas.There are three levels of password validation policy: LOW Length >= 8 MEDIUM Length >= 8, numeric, mixed case, and special characters STRONG Length >= 8, numeric, mixed case, special characters and dictionary file Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 2 Please set the password for root here. New password: Re-enter new password: Estimated strength of the password: 100 Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : y
-
Remova usuários anônimos. Esta é uma importante opção de segurança, pois os invasores podem aproveitar os usuários anônimos para obter acesso ao servidor de banco de dados.By default, a MySQL installation has an anonymous user, allowing anyone to log into MySQL without having to have a user account created for them. This is intended only for testing, and to make the installation go a bit smoother. You should remove them before moving into a production environment. Remove anonymous users? (Press y|Y for Yes, any other key for No) : y
-
Desabilite o login root remotamente, esta é uma configuração de segurança extremamente importante, pois impede que invasores se autentiquem remotamente no servidor MySQL como root ou executem ataques de força bruta de senha. A autenticação remota também pode ser desativada completamente, veremos como fazer isso na próxima seção.Normally, root should only be allowed to connect from 'localhost'. This ensures that someone cannot guess at the root password from the network. Disallow root login remotely? (Press y|Y for Yes, any other key for No) : y
-
Exclua o banco de dados de teste criado durante o processo de instalação do servidor mysql, este banco de dados é criado para fins de teste, como boa prática, é recomendável excluir este banco de dados.By default, MySQL comes with a database named 'test' that anyone can access. This is also intended only for testing, and should be removed before moving into a production environment. Remove test database and access to it? (Press y|Y for Yes, any other key for No) : y
-
Recarregue as tabelas de privilégios para garantir que todas as alterações sejam aplicadas e tenham efeito.
Agora você tem uma base segura para trabalhar, na próxima seção, encontre as instruções para alterar o padrão root usuário e senha.Reloading the privilege tables will ensure that all changes made so far will take effect immediately. Reload privilege tables now? (Press y|Y for Yes, any other key for No) : y Success. All done!
Modificando o usuário “root”
Por padrão, o servidor MySQL vem predefinido com um
superuser/admin
conta que tem acesso a todos os privilégios e funcionalidades dos bancos de dados e usuários do banco de dados. Dado esse controle e acesso incomparáveis, é importante bloquear e proteger a conta root, pois os invasores geralmente visam a conta root em um servidor MySQL, pois ela tem o potencial de fornecer acesso completo aos bancos de dados e aos usuários do banco de dados. O primeiro passo para proteger o usuário “root” é alterar o nome de usuário de
root
para algo mais inflexível, o objetivo é tornar o nome de usuário root tão difícil de adivinhar ou de força bruta para os invasores. Depois disso, também é recomendável alterar a root
senha da conta regularmente como uma boa prática. -
Faça login no servidor MySQL com o seguinte comando:
sudo mysql -u root
-
Altere o nome de usuário da conta “root” executando a seguinte consulta:
rename user 'root'@'localhost' to '<new-username>'@'localhost';
-
Altere aroot
senha da conta para algo forte e difícil de adivinhar, é recomendável usar um gerador de senha. Se você ativou o plug-in de verificação de senha durante o processo de instalação segura, precisará fornecer uma senha que atenda aos requisitos da política em termos de força.
ALTER USER 'example_username'@'localhost' IDENTIFIED BY '<new-password>';
-
Recarregue a tabela de privilégios para garantir que todas as alterações sejam salvas e ativadas executando o seguinte comando:
flush privileges;
-
Para confirmar se oroot
nome de usuário e senha forem alterados, execute a seguinte consulta:
use mysql; select user,host,authentication_string from mysql.user;
Isso exibe as tabelas de usuário armazenadas no banco de dados mysql e deve refletir as alterações feitas.
+------------------+-----------+-------------------------------------------+
| user | host | authentication_string |
+------------------+-----------+-------------------------------------------+
| example_user | localhost | *A2550B00C6DF81DACE33551E8293462F6CAE33DA |
| mysql.session | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| mysql.sys | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| debian-sys-maint | localhost | *241DC5A20F017D55EE82E46E7996784ED4A5CD8A |
+------------------+-----------+-------------------------------------------+
4 rows in set (0.00 sec)
Criando um novo usuário
Uma boa prática de segurança é o conceito de segregação por funções ou função. Isso significa que, para cada banco de dados ou aplicativo que usa o banco de dados, crie um novo usuário que tenha permissões CRUD para esse banco de dados específico. Isso garante que, a qualquer momento, apenas um usuário tenha acesso a um banco de dados por vez e os usuários não possam acessar outros bancos de dados.
-
Crie umTest
banco de dados, executando a seguinte consulta no MYSQL:
create database Test;
-
Crie o usuário responsável por gerenciar este banco de dados de teste:
CREATE USER '<username>'@'localhost' IDENTIFIED BY '<password>';
-
Atribua as permissões CRUD apropriadas ao usuário para oTest
base de dados:
GRANT SELECT,UPDATE,DELETE ON Test.* TO '<username>'@'localhost';
-
É importante observar que esses privilégios são aplicáveis apenas aoTest
banco de dados, se você estiver criando um usuário para um aplicativo comophpMyAdmin
, você precisa fornecer ao usuárioroot
permissões.
-
Se você decidir excluir um usuário específico, execute a seguinte consulta:
drop user '<username>'@'localhost';
-
Recarregue a tabela de privilégios para garantir que as alterações feitas sejam aplicadas e ativadas executando a seguinte consulta:
flush privileges;
Configuração personalizada do MySQL
Agora você pode configurar uma configuração personalizada segura para MySQL que fornece opções adicionais de configuração de segurança.
-
O arquivo de configuração global do MySQL está localizado em/etc/mysql/my.cnf
, todas as configurações globais personalizadas devem ser definidas no arquivo de configuração.
-
A configuração personalizada precisa ser especificada para o mysqld (MySQL daemon), as opções exibidas na imagem são configurações de segurança personalizadas.
-
Depois de adicionar as configurações personalizadas, você precisa reiniciar omysql
serviço para garantir que todas as alterações sejam aplicadas.
systemctl restart mysql
Auditando a segurança do MySQL
Agora você pode auditar a segurança do servidor MySQL usando uma ferramenta chamada MySAT. O MySAT realiza diversos testes para analisar configurações de banco de dados e políticas de segurança. MySAT ajuda a avaliar e, portanto, aumentar a segurança do banco de dados MySQL. MySAT é um script SQL simples, é fácil de entender e fácil de manter. Os resultados do MySAT são emitidos em formato HTML.
-
Clone o repositório MySAT Github, executando o seguinte comando:
git clone https://github.com/meob/MySAT.git
-
Após clonar o diretório, navegue até o diretório MySAT, onde o arquivomysat.sql
está localizado e é usado em conjunto com o servidor MySQL para gerar os resultados em umMySAT.htm
Arquivo.
-
Audite a segurança executando o seguinte comando:
mysql --user=<root-user> -p<password> --skip-column-names -f < mysat.sql > MySAT.htm
-
Conforme indicado, MySAT requer acesso root ao MySQL para executar os testes necessários, após executar o comando, o arquivo MySAT.htm é gerado, copie o arquivo MySAT.htm e omysat.css
arquivo para um servidor Apache ou NGINX, ou baixe-os localmente comscp
, para que você possa analisar os resultados da auditoria.
-
Os resultados são formatados em um formato simples de ler e entender, onde as configurações são verificadas e os resultados são codificados por cores com base em sua configuração atual e como isso afeta a segurança do servidor mysql. Por exemplo, uma verificação de configuração com falha é codificada pela cor laranja e uma verificação aprovada é codificada pela cor verde.
-
O relatório de auditoria revela quais configurações precisam ser alteradas ou modificadas e apresenta uma imagem de nível superior da segurança geral do servidor MySQL.