É inseguro ter um usuário ansible com sudo sem senha?

10

Eu sou novo no Ansible. A maioria dos guias de provisionamento de VPS que vi até agora fazem isso:

  1. desativar o root do login
  2. crie um novo usuário que possa fazer login apenas com ssh(sem senha)
  3. adicione o novo usuário ao wheelgrupo, com permissão sudo sem senha

Eu entendo (1) e (2), mas não (3).

Certamente sem senha sudoé como fazer login como root? Entendo o benefício (conveniência), mas isso não é altamente inseguro?

Sei que os administradores administram suas redes de várias maneiras e, portanto, isso pode ser considerado "subjetivo", mas essa é uma prática MUITO comum, até mostrada em vários documentos oficiais e em guias publicados por empresas de hospedagem. Isso vai contra o senso comum. Qual é a lógica por trás disso?

lonix
fonte
1
O Ansible é destinado à automação de tarefas administrativas, portanto geralmente precisa de acesso em nível superior (raiz), portanto, "sudo sem senha". Se você precisar apenas executar um subconjunto dos comandos disponíveis no seu sistema, poderá travá-lo apenas para aqueles comandos com uma configuração sudo mais detalhada. O sudo sem senha não significa necessariamente o acesso a tudo o que a raiz pode fazer (embora isso se torne difícil de aplicar quando você percebe que o usuário pode modificar sua configuração do sudo via sudo para ter maior controle ...).
David Spillett
@DavidSpillett Eu estava pensando sobre isso - ou seja, definindo quais comandos sudo permitir no arquivo sudoers ... mas li em algum lugar que o ansible faz tudo interpretando através de comandos python complexos, e que essa abordagem seria confusa rapidamente.
lonix

Respostas:

18

Se a conta de serviço puder executar o sudo sem senha, você deverá proteger o acesso a essa conta.

Ter a conta sem uma senha e usar apenas chaves ssh para fazer login nela, faz isso, desde que você também mantenha a chave privada ssh segura.

Michael Hampton
fonte
Então, eu estou "certo" de me sentir perturbado por esta convenção - e, no entanto, esta é a convenção para ansible, por necessidade / pragmatismo.
lonix
Então você está dizendo que eu essencialmente "movo" a segurança principal do VPS para o meu sistema local, que contém a chave ssh da conta ansible? Nesse caso, o ponto fraco não é o próprio VPS, mas sou eu! E preciso estar mais vigilante ao proteger essa chave ssh, em troca da conveniência que a automação ansible me proporciona.
lonix
6
A chave ssh, senha protegida com ssh-agent, é uma credencial razoavelmente boa.
John Mahowald
@lonix Todos os sistemas protegidos precisam de credenciais. Os sistemas protegidos são, no máximo, tão seguros quanto as medidas adotadas para proteger essas credenciais, uma vez que a posse delas fornece 100% de acesso a elas. Portanto, sim, você não pode esperar proteger seu VPS se não proteger adequadamente sua chave SSH (ou senha root ou qualquer outra coisa). O fato de você configurar o sudo sem senha não significa nada deste ponto de vista, ativar o sudo com senha não altera o fato de que é essencial que você proteja a chave SSH.
Giacomo Alzetta
@GiacomoAlzetta Eu sei disso, o que eu quis dizer acima é que a responsabilidade está sendo transferida do controle remoto para a máquina local. Como a escalação do sudo é feita sem senha, o ponto fraco se torna local.
lonix
4

O novo usuário criado em (2) pode efetuar login apenas com a chave SSH, sem senha. A chave SSH fornece acesso raiz indireto. Portanto, isso é equivalente a apenas permitir o login root com uma chave.

Como a conta não possui uma senha, não é possível sudosolicitar uma senha. O Ansible também precisa ser capaz de executar comandos. Ter uma senha adicional para fornecer no mesmo local da chave não aumentaria a segurança.

RalfFriedl
fonte
2

O problema é que ansible é para administradores e automação, portanto, se você precisar digitar uma senha para executar um script, não será realmente a melhor. Também não é seguro armazenar a senha do sudo em um arquivo ou banco de dados e obtê-la sempre que executar o manual. Portanto, a combinação do sudo sem senha e a autenticação com as chaves ssh é o melhor método para garantir a segurança e sem problemas, executando o manual. Você também é um administrador e sabe o que está programando no manual. Portanto, o manual não pode destruir seus servidores.

NicoKlaus
fonte
Os playbooks podem destruir seus sistemas, mas se você usar apenas chaves de ambiente de teste separadas, isso não destruirá os hosts de produção.
John Mahowald
Exatamente, esperamos que isso seja um pré-requisito ao trabalhar em sistemas produtivos.
NicoKlaus 20/08/19
1
O Ansible possui 'ansible-vault' e plugins / módulos / bibliotecas que permitem o armazenamento de segredos em muitos sistemas de armazenamento secreto de terceiros, como bitwarden, hashicorp vault, keepass, etc.
Zoredache