Um sistema para distribuir chaves públicas SSH

26

Temos muitos sistemas diferentes que são gerenciados por várias pessoas. Optamos por usar a autenticação de chave pública SSH para acessar esses sistemas. Isso funciona muito bem, pois não há necessidade de gerenciar ou compartilhar senhas de contas administrativas, não há necessidade de lembrar senhas para os vários sistemas (apenas a frase secreta para sua chave privada), não há necessidade de interação (digitando senha) com todos os comandos remotos .

O problema é que as chaves públicas instaladas nos sistemas precisam ser gerenciadas de alguma forma. As pessoas vêm e vão, as chaves podem ficar comprometidas, as responsabilidades mudam (uma pessoa autorizada a entrar em um sistema hoje pode ser autorizada a acessar outro amanhã). Atualmente, nós o gerenciamos editando manualmente os arquivos ~ / .ssh / allowed_keys em todas as contas que precisam disso, mas isso é muito trabalhoso e propenso a erros.

Existe alguma ferramenta pronta para gerenciar chaves públicas nesse cenário? Você tem suas próprias soluções? Ou toda essa ideia de gerenciar sistemas dessa maneira é falha?

Jacek Konieczny
fonte
Eu realmente não posso responder à sua pergunta, mas quando a li, pude ouvi-la gritando por algum tipo de sistema de banco de dados.
John Gardeniers
Na verdade, eu posso ver um lugar para um banco de dados no 'back-end' (o 'servidor principal'), embora eu prefira limitar o acesso ao banco de dados e ter as chaves distribuídas no canal SSH. Não abrir nenhum outro canal de comunicação nos sistemas gerenciados. Na verdade, eu me sinto capaz de implementar essa ferramenta / sistema pessoalmente, embora prefira algo pronto e comprovadamente eficaz.
Jacek Konieczny

Respostas:

18

Como já mencionado pelo pulegium, qualquer software genérico de gerenciamento de configurações, como Puppet , Chef , Bcfg2 ou cfengine, poderia realizar a tarefa.

Desde o authorized_keys arquivo não é tão complicado, você também pode usar rsync ou um (D) SCM como git ou hg para gerir este arquivo. Você tem o arquivo "mestre" em um de seus servidores e o serve via rsync / git / hg /…. Em qualquer outro servidor, você executa uma tarefa cron que recupera periodicamente a cópia principal (se ela tiver sido alterada) e a copia para o local local correto. Caramba, isso funcionaria mesmo com HTTP ou FTP puro.

A linha inferior é: Tenha uma cópia "principal" do seu arquivo allowed_keys e atualize-o. Permita que os "clientes" (os computadores, que devem ter o arquivo current_keys atual) o busquem no servidor mestre e os implemente localmente.

joschi
fonte
1
Usamos confortavelmente o puppet para gerenciar ~ 200 servidores Linux (chaves de pub são apenas um arquivo a ser aplicado como atributo de um usuário).
ForgeMan
1
Aceito esta resposta, parece que não vou melhorar. Parece que as opções para mim são: 1. Manter as coisas como estão agora 2. Construir uma cadeia de ferramentas própria para gerenciar arquivos de autorizado_keys 3. Use alguma ferramenta genérica existente para gerenciar servidores, como Puppet ou Chef… embora essas ferramentas pareçam grandes demais para esta tarefa simples. 4. Use outro mecanismo de autenticação / autorização (como o Kerberos)… embora isso também pareça uma ferramenta sofisticada demais para uma tarefa simples Obrigado.
Jacek Konieczny
esse sistema é tão seguro quanto o canal através do qual a cópia principal é puxada.
precisa
1
O Ansible é um sistema CM muito leve que possui um módulo para mexer com arquivos-chave autorizados no ssh. Veja ansible.cc/docs/modules.html#authorized-key
RS
11

Existe um patch disponível para o OpenSSH que permite o uso de chaves públicas de um servidor LDAP, mas isso só faz sentido se as verificações de autenticação / conta também forem feitas no servidor LDAP (que é como meu ambiente está configurado). Além disso, é tão seguro quanto a sua configuração LDAP (então você deseja usar SSL e verificar chaves).

Consulte http://code.google.com/p/openssh-lpk/ para obter o patch e mais detalhes. Por padrão, não conheço nenhum sistema operacional que acompanhe esse patch, mas se você estiver executando o FreeBSD, ele será opcional se você usar o OpenSSH de ports.

voretaq7
fonte
1
Aliás usando pam_ldap também permite resolver o "alguém autorizado a acessar a máquina A de hoje não podem ser autorizados a acessá-lo amanhã" problema - leia-se sobre pam_ldap Se você estiver interessado nesse aspecto ...
voretaq7
5

Eu corro uma solução muito fácil, que faz o mesmo com regras de firewall

arquivo de exemplo hosts.conf:

192.168.0.1
192.168.2.99
192.168.2.100

distribut.sh:

#!/bin/bash
for d in `cat ./hosts.conf`; do
  echo "copying to $d ...";
  scp /root/.ssh./authorized_keys root@$d:/root/.ssh./authorized_keys
done;

isso é toda a mágica :-)

bmaeser
fonte
5

Atualmente, estou verificando o SSH KeyDB . Destina-se a fazer exatamente isso, administrar funções, servidores e usuários, distribuir chaves de usuário, reunir chaves de host etc. Ele ainda possui algo chamado "locais".

Ainda não resolvi tudo e não tenho certeza se está funcionando totalmente. No entanto, o código está em python e parece ser bastante gerenciável, portanto não deve ser muito difícil limpá-lo e fazê-lo funcionar.

andsens
fonte
1

Não sei ao certo o que você quer dizer com muitos, nem sei se você está disposto a mudar, mas o Kerberos é o dróide que você está procurando. Isso resolverá seus problemas com elegância e autenticará pessoas e máquinas.

pboin
fonte
1

Você tem dois (que geralmente se transformam em 3) problemas diferentes que está tentando resolver:

  • Autenticação (quem é você?)
  • Autorização (você tem permissão para acessar este servidor?)
  • Auditoria (O que você fez?)

A autenticação de chave pública é uma boa maneira de autenticar às vezes, mas não trata da autorização. Não gosto de autenticação de chave pública, pois é muito fácil comprometer (especialmente internamente), a menos que você tenha alguns bons controles.

É aí que soluções como o Kerberos entram em ação. No mundo do Windows, o Active Directory resolve esse problema. No mundo Unix, há uma abundância de opções, o que é uma coisa boa e uma coisa ruim.

Eu verificaria o projeto Red Hat FreeIPA , que é um pacote de software que facilita a instalação rápida de um sistema Kerberos / LDAP / DNS do tipo AD.

duffbeer703
fonte
Entendo a diferença entre autenticação, autorização e auditoria. E as 'chaves_comentárias' do SSH fornecem dados de autenticação e autorização. Está longe de ser perfeito, mas é simples. E a simplicidade costuma ser uma grande vantagem, também em segurança. O Kerberos, com sua infra-estrutura complicada, pode falhar com segurança de mais maneiras que o ssh com seus arquivos allowed_keys. No entanto, isso não significa que um ou outro seja mais seguro.
Jacek Konieczny
O gerenciamento de arquivos allowed_keys é np para um punhado de servidores, mas você chega rapidamente a um ponto em que é impossível gerenciar. Eu não estava tentando dizer que é uma solução "ruim". Da mesma forma, as complexidades do Kerberos são inadequadas para dois servidores ... mas o investimento em design / implementação do kerberos vale a pena em um ambiente maior.
duffbeer703
1

Você pode usar o Bcfg2 com bcfg2-accounts para distribuir authorized_keys. Como bônus adicional, você terá a capacidade de controlar usuários e grupos.

O Bcfg2 também permite a manutenção sem dor /etc/ssh/ssh_known_hostscom o SSHbase .

myroslav
fonte
1

Há também SKM

andsens
fonte