Fui mordido várias vezes pelo usuário 'debian-sys-maint' que é instalado por padrão nos pacotes mysql-server instalados nos repositórios do Ubuntu.
Geralmente, o que acontece é que eu puxo uma cópia nova do nosso banco de dados de produção (que não está sendo executado no Debian / Ubuntu) para solucionar problemas ou novo desenvolvimento e esqueço de excluir a tabela mysql.user, perdendo o usuário debian-sys-maint.
Se adicionarmos novos usuários mysql por qualquer motivo, eu tenho que 'mesclá-los' no meu ambiente de desenvolvimento, em vez de apenas sobrepor a tabela.
Sem o usuário, meu sistema ainda parece funcional, mas atormentado por erros como:
sudo /etc/init.d/mysql restart
Stopping MySQL database server: mysqld...failed.
error: 'Access denied for user 'debian-sys-maint'@'localhost' (using password: YES)'
- Para que é utilizado o debian-sys-maint?
- Existe uma maneira melhor para os mantenedores de pacotes fazerem o que estão tentando fazer?
- Qual é a maneira mais fácil de restaurá-lo depois que eu o perdi?
- Qual é o conjunto correto / mínimo de privilégios para esse usuário?
- Parece uma má idéia "conceder todos os privilégios em *. * ..."
Editar
Pergunta adicional - A senha em /etc/mysql/debian.cnf já está com hash ou é a senha em texto sem formatação? É importante quando você recriar o usuário e eu nunca pareço acertar na primeira tentativa.
obrigado
Respostas:
Uma coisa importante para a qual é usado é dizer ao servidor para rolar os logs. Ele precisa de pelo menos o privilégio de recarregar e desligar.
Veja o arquivo /etc/logrotate.d/mysql-server
É usado pelo
/etc/init.d/mysql
script para obter o status do servidor. É usado para desligar / recarregar normalmente o servidor.Aqui está a citação do README.Debian
O melhor plano é simplesmente não perdê-lo. Se você realmente perder a senha, redefina-a usando outra conta. Se você perdeu todos os privilégios de administrador no servidor mysql, siga os guias para redefinir a senha root e repare o
debian-sys-maint
.Você pode usar um comando como este para criar um arquivo SQL que você pode usar posteriormente para recriar a conta.
A senha não é hash / criptografada quando instalada, mas as novas versões do mysql agora têm uma maneira de criptografar as credenciais (consulte: https://serverfault.com/a/750363 ).
fonte
O usuário debian-sys-maint é por padrão um equivalente raiz . É usado por certos scripts de manutenção nos sistemas Debian e, como efeito colateral, permite que os usuários com acesso root na caixa visualizem a senha de texto sem formatação em /etc/mysql/debian.cnf (bom ou ruim?)
Você pode recriar o usuário:
Apenas verifique se a senha corresponde à do /etc/mysql/debian.cnf
fonte
Você também pode:
O que lhe dará a opção de recriar o usuário debian-sys-maint. Usuários e bancos de dados existentes são seguros.
fonte
Eu queria apenas comentar, mas acho que a sintaxe correta merece sua própria entrada. Isso criará o usuário debian-sys-maint :
Se você ainda possui o arquivo /etc/mysql/debian.cnf, use a senha existente.
Sinta-se à vontade para encontrar uma solução segura mais
paranóica.fonte
/etc/mysql/debian.cnf
arquivo é oroot
usuário do Linux . E quando alguém pode ler esse arquivo, ele já temroot
acesso à máquina e pode parar o servidor MySQL e adicionar um administrador de sistema próprio. E o script que inicia o MySQL e outros pacotes não pode fazer manutenção de segurança e outras. Então, sim, é o mais seguro possível. E útil se você perder a senha de administrador do MySQL para recuperá-la, sem a necessidade de reiniciá-la no modo inseguro. ;-)Se você precisar adicionar o
debian-sys-maint
usuário apenas paralogrotate.d
propósitos, você não deve concederALL PRIVILEGES
ouGRANT OPTION
- este é um buraco gigante desnecessário na segurança. Em vez disso, você pode simplesmente adicionar o usuário com oRELOAD
privilégio como este (supondo que você esteja acessando seu db comoroot
e substitua xxxxxx por sua senha)Atualização de 2019
Esta resposta pode estar desatualizada - consulte os comentários fortemente opinativos abaixo.
fonte
debian-sys-maint
. Além disso, posso confirmar que funciona como um encanto. Felicidades!debian-sys-maint
usuário também é usado para desligar o servidor. E também para procurar usuários root ao iniciar o servidor mysql. Então você pelo menos precisa conceder privilégios de seleção no mysql. * E privilégios de desligamento.Ao invés de
eu acho que
porque a senha não é hash ...?
fonte
permissões necessárias para debian-sys-maint
Outras respostas abordaram suficientemente tudo, exceto o conjunto mínimo de permissões necessárias para o usuário debian-sys-maint. Muitas das respostas aqui estão simplesmente erradas a esse respeito e, de fato, perigosas. Não reduza os privilégios debian-sys-maint (incluindo a opção de concessão) sem ler e entender abaixo:
O mantenedor do Debian não deu todos os privilégios ao usuário caprichosamente. Aqui está o que é necessário, onde e por quê. Alguns desses privilégios são superconjuntos de outros, mas os listarei de forma independente, caso você queira personalizar as coisas e remover o requisito:
O último é, obviamente, o principal requisito para privilégios. A página de manual do mysql_upgrade declara que:
AVISO Se você decidir reduzir os privilégios que o debian-sys-maint possui, certifique-se de estar preparado para lidar manualmente com quaisquer futuras atualizações de segurança debian e / ou upgrades que tocam no MySQL. Se você executar uma atualização nos pacotes MySQL com um privilégio debian-sys-maint reduzido, e se o mysql_upgrade não puder ser concluído como resultado, ele poderá deixar seu banco de dados em um estado indefinido (lido com defeito). A redução de privilégios pode não ter problemas aparentes no dia-a-dia até que uma atualização apareça; portanto, não preste atenção ao fato de você já ter reduzido privilégios sem efeitos nocivos como base para pensar que é seguro.
fonte
Como uma observação lateral, dê uma olhada nesta postagem do mysqlperformanceblog para saber por que você pode querer desativar o material específico da debian.
fonte
Ao usar o MySQL 5.6+, eu recomendaria o uso do
mysql_config_editor
comando para criar uma entrada para o usuário'debian-sys-maint'@'localhost'
usando a senha relevante, o que significa que a senha não precisa ser armazenada em texto sem formatação no servidor.mysql_config_editor set --login-path=debian-sys-maint --host=localhost --user=debian-sys-maint --password
Depois disso, o arquivo de configuração específico do debian
/etc/mysql/debian.cnf
pode ser alterado para que os detalhes de nome de usuário e senha não sejam armazenados no arquivo.Finalmente, altere o arquivo logrotate para o MySQL para que ele use os detalhes de login armazenados no
~/.mylogin.cnf
arquivo em vez do arquivo específico do debian, substituindo/usr/bin/mysqladmin --defaults-file=/etc/mysql/debian.cnf
com
/usr/bin/mysqladmin --login-path=debian-sys-maint
Espero que isto ajude :)
Dave
fonte
debian-sys-maint
usuário será alcançado com isso? Que os pacotes devem ser capazes de usar esse usuário / senha para fazer alguma manutenção do sistema comoroot
usuário no domínio Linux (nãoroot
usuário no MySQL sem que o administrador necessário para entrar noroot
senha para MySQL?/etc/mysql/debian.cnf
para remover as senhas e alterar o arquivo logrotate para fazer referência aos detalhes seguros. Não tenho certeza se o usuário debian-sys-maint é usado para qualquer outra coisa, mas se for, isso ajudará a dar uma indicação de onde o Debian está usando esta conta de usuário em seu nome.