Sistema de gerenciamento centralizado para chaves SSH?

27

Estamos procurando mudar para o gerenciamento baseado em chave de logins SSH e nos perguntamos se existe algum sistema de gerenciamento de chaves que nos permita gerenciar centralmente as chaves de acesso em todo o mundo.

Idealmente, o sistema deve permitir a emissão da chave por cliente e revogá-la, se necessário, atualizando rapidamente as chaves da máquina do servidor.

Alguém conhece esse sistema, comercial ou de código aberto?

NOTA: Para esclarecer, precisamos do gerenciamento de chaves para uma quantidade bastante grande de servidores em nuvem (tipo EC2) e uma pequena quantidade de usuários do serviço. Eu acho que o patch LDAP + sugere abaixo pode ser o caminho a percorrer.

SyRenity
fonte
7
Sou eu quem pensa que "chaves privadas e nuvem" são como "beba e dirija". Ambos se divertem separadamente, mas nunca andam juntos.
mailq
11
"Nuvem" é provavelmente a palavra errada - parece que o que eles querem é autenticação centralizada, com consistência mundial.
voretaq7
Oi. Exatamente - é o que estamos procurando.
SyRenity
Tenho lutado com esse problema com alguns dos meus ambientes híbridos de clientes. Há também a questão de onde manter o OPenLDAP ou instância central em uma implantação na nuvem? Eu tenho usado o webmin de todas as coisas como uma ferramenta de gerenciamento de chaves e um livro de receitas do chef para sincronizar as chaves para os nós.
Tom H
Userify cobre o que você está procurando (ver serverfault.com/questions/647797/... )
Jamieson Becker

Respostas:

8

Existem muitas maneiras de fazer isso. O armazenamento de chaves LDAP foi mencionado algumas vezes, e eu fiz isso e funciona, na medida em que faz. No entanto, o LDAP tem suas próprias curiosidades de gerenciamento, o que leva um pouco de aprendizado.

Sou um grande fã de servidores simples e robustos que têm dependências mínimas de rede externa para coisas simples, como autenticar administradores. Por isso, apóio-me em uma estratégia de distribuição de chaves SSH muito mais robusta. A chave pública de todos é mantida no sistema de gerenciamento de configuração e, sempre que a pessoa precisar fazer login, sua chave é adicionada. O sistema de configuração também sabe remover chaves que não são especificadas; portanto, quando alguém sai ou sua chave é alterada, é simples remover a configuração da chave e, na próxima execução do sistema de configuração, a chave é removida.

mulher
fonte
Essa abordagem é certamente boa e, como Womble aponta, tem uma vantagem em que os servidores permaneçam em funcionamento (e acessíveis) no caso de o LDAP estar inativo - Todo sistema suportado por LDAP deve (ouso dizer que devo ) ter pelo menos um usuário cujas teclas sejam pressionadas da maneira que Womble descreve. A desvantagem é que você precisa executar uma configuração para desautorizar os usuários. Não é um problema para uma "conta de emergência" com apenas alguns usuários autorizados. Maior problema para um grande número de contas :)
voretaq7
11
Você realmente precisa ter uma maneira de disparar execuções de configuração em massa de qualquer maneira, por isso não deve ser um grande problema fazer isso para uma alteração de conta.
womble
I agree, unfortunately business needs/mentalities don't: Paranoia at many places (mine included) dictates that config pushes happen during off-hours but new staff/leaving staff can happen any time :-/
voretaq7
11
Então, você ficará feliz em deixar as coisas quebradas para um dia útil só porque não pode executar um push de configuração durante o dia? Só porque é comum, não significa que não seja estúpido.
womble
2
Oi. Então, uma boa idéia seria usar o Puppet para isso, por exemplo?
SyRenity
23

Pares de chaves devem ser gerados pelo usuário.

O usuário mantém a metade privada - você nunca deve vê-la. Se você tiver a chave privada de alguém em um formulário em que possa lê-la / usá-la, estará fazendo um erro de segurança.

A metade pública é fornecida a você (por qualquer mecanismo que você queira: formulário da Web, email, doe-me-em-um-CD), para ser centralizado da maneira que desejar. Alguns lugares armazenam as chaves públicas no LDAP. Outros enviam authorized_keysarquivos usando seu sistema de implantação.


No meu ambiente, os usuários que precisam de acesso ao shell me fornecem suas chaves públicas. Essas chaves são adicionadas ao nosso sistema LDAP e sshdconsultam as chaves públicas listadas para cada usuário para autenticá-las, por meio do patch da Chave Pública LDAP .
Quando alguém precisa adicionar uma chave adicional ou revogar uma chave existente, avisa o administrador e nós cuidamos dela. Eventualmente, à medida que escalarmos, implementarei um sistema que permita às pessoas girar suas próprias chaves públicas.

Cada um de nossos sites possui um par de servidores LDAP, sincronizados com o mestre com replicação LDAP, que mantém os dados consistentes (e acessíveis) em cada local.


Tudo o que descrevi pode ser feito com software de código aberto. Também existem produtos comerciais que fazem a mesma coisa.
Você precisa pesquisar as opções disponíveis mais detalhadamente e decidir qual delas se adequa melhor ao seu ambiente. Se você tiver mais perguntas (mais específicas), provavelmente podemos ser mais úteis.

voretaq7
fonte
Então, basicamente, você sugere o uso da infraestrutura LDAP, com o OpenSSH corrigido que funcionará com o LDAP? Quão bem isso escala na produção? Ele suporta uma grande quantidade de máquinas? Precisamos oferecer suporte apenas a uma pequena quantidade de usuários do serviço.
SyRenity
11
@SyRenity: replicação suportes LDAP e clustering por isso escalas muito bem
Hubert Kario
@SyRenity Teoricamente, você pode oferecer suporte a um número ilimitado de máquinas em um número ilimitado de locais (pense em "Realmente grande implantação do Active Directory" - o AD é basicamente LDAP com alguns acessórios modernos). Para os usuários do serviço a minha sugestão é padronizar-los em seu ambiente e empurrar para fora padronizado /etc/passwde /etc/grouparquivos (permite que as máquinas a funcionar normalmente e os serviços associados para iniciar / executar, mesmo se o LDAP não está disponível)
voretaq7
@ voretaq7 Significa que os usuários do serviço serão gerenciados separadamente do LDAP, por meio do gerenciamento de configuração?
SyRenity
@SyRenity sim - e mais importante, disponível para os serviços que os usam se o LDAP estiver inativo . Planeje falhas ou você sofrerá desastres.
precisa saber é o seguinte
9

Os pares de chaves não devem ser gerados em lugar algum, mas no computador de cada usuário. As chaves privadas são nomeadas como tal por um motivo.

Dito isso, pude ver um caso de uso para algum tipo de repositório centralizado de chaves públicas dos usuários. Uma opção seria armazenar chaves públicas no OpenLDAP - versões recentes do OpenSSH podem ler chaves do LDAP.

EEAA
fonte
2
O material da chave pública LDAP está no OpenSSH da linha principal agora? Eu só conheço o patch LPK (que eu posso garantir - funciona muito bem). Também +1 para manter as chaves privadas privadas.
voretaq7
@ voretaq7 Acho que ouvi dizer que estava sendo mesclado na linha principal, mas ainda não verifiquei isso. Fazemos diretórios pessoais compartilhados via NFS, para que cuide de nossa distribuição de chaves para nós.
EEAA
+1 bem, eu não sabia disso. isso me salvaria um monte de problemas. isso é agora na minha lista de coisas para olhar.
Tom H
1

Existem muitas ótimas soluções comerciais e de código aberto, como Userify [1] (onde trabalho), Universal Key Manager [2], SSH Key Box [3], etc. Depende de quais são suas necessidades e se você está procurando algo que centralize o gerenciamento enquanto descentraliza a operação (para que seus servidores não confiem em uma autoridade central para efetuar login ... nesse caso, talvez você não consiga efetuar login em nenhum dos seus servidores, se, por exemplo, seu O servidor LDAP está inoperante!)

  1. https://userify.com

  2. https://www.ssh.com/products/universal-ssh-key-manager/

  3. https://www.sshkeybox.com

Veja também esta discussão Slant:

https://www.slant.co/topics/8010/~managers-for-ssh-keys

Jamieson Becker
fonte