Está tudo bem em deixar a senha de root do MySQL em branco?

5

Um usuário root sem uma senha constitui uma violação de segurança se meu servidor MySQL só aceita conexões de localhost?

Estou ciente de que o senso comum diz que o usuário root deve ser protegido por uma senha, mas quais são as implicações de deixá-lo em branco? Eu não estou preocupado com os usuários do Linux que não sejam a minha própria conexão com o MySQL e não estou planejando permitir acesso de rede ao banco de dados.

Edit: O que torna o MySQL tão diferente do SQLite, que não é protegido por senha? De que tipo de cenários de implantação estamos falando? Se um invasor obtiver acesso ao servidor, o que impede o invasor de simplesmente redefinir a senha?

Por favor, tenha em mente que eu não estou tentando defender nada aqui, eu só quero que as pessoas recebam informações educadas sobre o assunto.

    
por dkobozev 05.07.2012 / 04:58

2 respostas

27

Sim, considero uma vulnerabilidade de segurança bastante fundamental. Deixe-me ilustrar isso por meio de uma história.

Há muito, muito tempo, em meus dias mais novos e menos informados, configurei um servidor para testes internos de vários fragmentos que estava sendo testado. Ele estava na minha mesa, desconectado de qualquer rede (isso foi há muito tempo, antes de tudo ter para estar em uma rede para poder fazer qualquer coisa). Enquanto eu estava fora do escritório, alguém mais precisava de uma máquina, e levou minha máquina de testes (não me importei; eu estava usando a máquina na base de que ela poderia ser usada para outras coisas, se necessário). Como já estava sendo executado o sistema operacional necessário, eles o conectaram à rede e instalaram o que precisavam.

O problema era que eu configurava todos os tipos de contas de teste nessa caixa, com senhas fáceis de adivinhar (como o sempre útil test ). Mesmo há muito tempo, não havia escassez de canalhas que não teriam nada melhor a fazer do que as contas de adivinhação de senha. Não demorou muito para que eles encontrassem essa máquina, adivinhassem uma senha e tivessem uma maneira nefasta com ela.

A moral da história? Mudança de requisitos. Mesmo que você não espere fazer isso agora, há uma chance razoável de que ao longo da vida da máquina seu papel irá mudar - o resultado mais provável, eu esperaria, seria que outros usuários tivessem acesso à máquina (legitimamente, ou através de uma exploração no nível do aplicativo). As chances de você se lembrar de definir uma senha de root do MySQL quando necessário são ... finas, na melhor das hipóteses.

Minha recomendação seria levar os 10 segundos que levaria para definir uma senha de root do MySQL e soltá-la em ~root/.my.cnf . O custo do tempo de folga é muito menor do que o custo de tempo de comprometimento a probabilidade de comprometimento.

    
por 05.07.2012 / 05:08
1

Exatamente. Você não está preocupado com os usuários do Linux, além de sua própria conexão com o MySQL, e você nunca será até que eles descartem tudo no MySQL.

Agora, sério, você deve adicionar uma senha. Considere que, se alguém tentar entrar em seu servidor, ele terá que comprometer a senha de um usuário do servidor e comprometer a senha raiz do MySQL. Se você não tem uma senha do MySQL, é mais fácil cortá-la.

Além disso, nenhum programa está livre de erros. Basta pensar que, se um bug no MySQL tratar cada conexão como "local", você terá grandes problemas.

    
por 05.07.2012 / 05:14