MeuMySQL Blog is now at http://blog.mdnsolutions.com/.

Wednesday, November 23, 2011

MySQL - Checando a segurança após instalação


Olá galera, hoje nosso tópico é curto mas muito importante, vamos falar sobre algumas medidas de segurança que devemos tomar uma vez que instalamos o MySQL em nosso servidor.

Estou usando o Ubuntu 11.04 e MySQL 5.1.54 e acabei de fazer a instalação do meu serviço aqui (você pode checar como fazer isso aqui). Bem, agora temos algumas medidas de segurança para tomar de forma a proteger nossa base de dados. Inicialmente o MySQL cadastra usuarios anônimos em suas tabelas de grant, mas ele também tem ferramentas que te auxiliam no processo de aperfeiçoamento da segurança do banco.


Usuários anônimos e segurança

Podemos checar que usuários possuimos em nossa base inicialmente com o comando abaixo:

  1. mysql> SELECT user, host,  password from mysql.user;
  2. +--------+-----------+-----------------------------------+
  3. | user   | host      | password                          |
  4. +--------+-----------+-----------------------------------+
  5. | root   | localhost | *57000000000000000000000000000001 |
  6. | root   | 127.0.0.1 | *57000000000000000000000000000001 |
  7. | root   | ::1       | *57000000000000000000000000000001 |
  8. |        | localhost |                                   |
  9. +--------+-----------+-----------------------------------+
  10. 7 rows in set (0.00 sec)


Note que temos 2 usuários anônimos em nossa base. Poderiamos simplesmente apagar este usuário usando um DELETE FROM mysql.user..., mas como manda a documentação temos commandos específicos e utilitários que já fazem essa tarefa de forma limpa e segura do ponto de vista do SGDB.

Em nosso caso aqui iremos trabalhar com o utilitário mysql_secure_installation. (Lembrando que esse comando é válido apenas para o linux). Veja abaixo:

  1. shell> mysql_secure_installation
  2. NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MySQL       SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY!
  3. In order to log into MySQL to secure it, we'll need the current
  4. password for the root user.  If you've just installed MySQL, and you haven't set the root password yet, the password will be blank, so you should just press enter here.
  5. Enter current password for root (enter for none):


Uma vez digitado o password que você definiu para o seu root inicialmente (você ainda lembra né?) ele vai te guiar em um intuitivo passo a passo para tornar sua base mais segura. Entre eles te perguntar sobre a remoção dos usuário anônimos, desabilitar conexões remotas, remoção do banco de dados teste (uma vez que essa banco permite acessos por qualquer usuário) e finalmente recarregar todos os privilégios para que as alterações tenham efeito.


  1. OK, successfully used password, moving on...
  2. Setting the root password ensures that nobody can log into the MySQL
  3. root user without the proper authorisation.
  4. You already have a root password set, so you can safely answer 'n'.
  5. Change the root password[Y/n] Y
  6. Password updated successfully!
  7. Reloading privilege tables..
  8.  ... Success!
  9. Remove anonymous users? [Y/n] Y
  10.  ... Success!
  11. Disallow root login remotely? [Y/n] Y
  12.  ... skipping.
  13. Remove test database and access to it? [Y/n] Y
  14.  ... skipping.
  15. Reload privilege tables now[Y/n] Y
  16.  ... Success!
  17. Cleaning up...
  18. All done!  If you've completed all of the above steps, your MySQL
  19. installation should now be secure.
  20. Thanks for using MySQL!


Bem, após isto você ainda pode fazer algumas importantes verificações:

Tenha certeza que todas as suas contas tem senha, sua query abaixo tem que retornar vazia:

  1. mysql> SELECT Host, User FROM user WHERE Password = '';
  2. Empty set (0.00 sec)

Periodicamente procure por senhas duplicadas:

mysql> SELECT User from mysql.user GROUP BY password HAVING count(user) > 1;

Fique alerta quanto a hosts com curingas. Periodicamente faça o teste:

mysql> SELECT User, Host FROM mysql.user WHERE Host LIKE '%\%%';

Com esse passo a passo seu banco de dados já está mais seguro contra invasões e usuários não autorizados. Em breve trarei mais tópicos de como melhorar sua segurança.

Viva ao meu, seu, nosso MySQL! Até mais!



No comments:

Post a Comment