Estou construindo um conjunto de scripts bash que basicamente preparam hosts virtuais Apache, repositórios git e outras coisas em um servidor em nuvem. Até aí tudo bem, tudo está funcionando, mas ocorreu um grande problema:Banco de dados MySQL e criação de usuários.
Os scripts atuais usam ssh com chaves para autenticação no servidor em nuvem e todos da minha equipe podem executar comandos. Quero mantê-lo assim e de alguma forma deixá-los criar um novo banco de dados MySQL e usuário sem precisar fazer login no mysql como root ou qualquer outro usuário com altos privilégios, mas não tenho nenhuma solução para isso.
Ideia nº 1é criar um novo usuário mysql sem senha e conceder-lhe direitos totais (como root), mas torná-lo utilizável apenas @'localhost'
.
Ideia nº 2é armazenar a senha deste usuário de controle do MySQL em um arquivo e torná-la acessível apenas ao usuário ssh atual que os outros scripts usam. Então o login do mysql usará essa senha armazenada para fazer login e criar o banco de dados e o usuário.
Não sei qual opção é melhor e sei que são perigosas. Peço opinião e ideias melhores.
Responder1
Você deseja fazer com que o usuário unix e o usuário mysql que sua equipe usa tenham o mínimo de privilégios de acesso possíveis, ao mesmo tempo que permite que eles façam o que você deseja. Parece que ambas as suas ideias permitem mais privilégios de acesso do que o necessário. Melhor para o usuário da equipe mysql:
- tenha apenas acesso CREATE ou qualquer acesso necessário (restringe ao mínimo o que sua equipe pode fazer). Você concede acesso a um usuário mysql usando a instrução GRANT.
- armazene usuário/senha em
~/my.cnf
arquivo apenas com acesso de leitura do proprietário (não restringe mais sua equipe, mas evita que outros vejam o login se conseguirem ver o script).
O acima é fácil de fazer e uma grande melhoria.
Uma ideia melhor, mas mais trabalhosa, seria não permitir o acesso do usuário da equipe para criar bancos de dados, mas apenas colocar uma solicitação para configurar sites em alguma fila, que outro script de usuário que só você controla (e que só tem acesso a ele). precisa) processaria regularmente para configurar os sites. A fila pode ser um arquivo com cada linha uma solicitação, um diretório com cada arquivo uma solicitação ou uma tabela de banco de dados com cada registro uma solicitação. Depende de quanto você deseja proteger seu sistema.
Em geral você deve usar usuários unix e mysql que não tenham tanto acesso quanto root. Eu crio um usuário mysql funcional para mim que pode criar e excluir bancos de dados e realizar apenas as operações que uso regularmente. Eu só uso root ou um usuário com privilégios semelhantes se precisar configurar outro usuário para conceder privilégios de acesso. Em um script, deixo o usuário o mais restrito possível para limitar os danos caso dê errado.