Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Protegendo o servidor MySQL

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


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

  2. 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 o sudo comando, você pode verificar nosso guia de usuários e grupos.

  3. Para proteger e auditar o MySQL, você precisa ter um servidor Linux com o MySQL 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.

  1. Chame o utilitário executando o seguinte comando:
     sudo mysql_secure_installation
    

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


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


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


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


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


  7. Recarregue as tabelas de privilégios para garantir que todas as alterações sejam aplicadas e tenham efeito.
    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!
    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.

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.

  1. Faça login no servidor MySQL com o seguinte comando:
     sudo mysql -u root
    

  2. Altere o nome de usuário da conta “root” executando a seguinte consulta:
     rename user 'root'@'localhost' to '<new-username>'@'localhost';
    

  3. Altere a root 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>';
    

  4. Recarregue a tabela de privilégios para garantir que todas as alterações sejam salvas e ativadas executando o seguinte comando:
     flush privileges;
    

  5. Para confirmar se o root 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.

  1. Crie um Test banco de dados, executando a seguinte consulta no MYSQL:
     create database Test;
    

  2. Crie o usuário responsável por gerenciar este banco de dados de teste:
     CREATE USER '<username>'@'localhost' IDENTIFIED BY '<password>';
    

  3. Atribua as permissões CRUD apropriadas ao usuário para o Test base de dados:
     GRANT SELECT,UPDATE,DELETE ON Test.* TO '<username>'@'localhost';
    

  4. É importante observar que esses privilégios são aplicáveis ​​apenas ao Test banco de dados, se você estiver criando um usuário para um aplicativo como phpMyAdmin , você precisa fornecer ao usuário root permissões.

  5. Se você decidir excluir um usuário específico, execute a seguinte consulta:
     drop user '<username>'@'localhost';
    

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

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

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



  3. Depois de adicionar as configurações personalizadas, você precisa reiniciar o mysql 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.

  1. Clone o repositório MySAT Github, executando o seguinte comando:
     git clone https://github.com/meob/MySAT.git
    

  2. Após clonar o diretório, navegue até o diretório MySAT, onde o arquivo mysat.sql está localizado e é usado em conjunto com o servidor MySQL para gerar os resultados em um MySAT.htm Arquivo.

  3. Audite a segurança executando o seguinte comando:
     mysql --user=<root-user> -p<password> --skip-column-names -f < mysat.sql > MySAT.htm
    

  4. 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 o mysat.css arquivo para um servidor Apache ou NGINX, ou baixe-os localmente com scp , para que você possa analisar os resultados da auditoria.



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

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