É possível buscar as chaves públicas de um banco de dados em vez do arquivo allowed_keys?
Gostaria de usar essa configuração para gerenciar o acesso ssh a itens como repositórios git para vários usuários, sem a necessidade de recriar o arquivo allowed_keys sempre que uma chave pública for alterada ou adicionada.
database
ssh
public-key
Fionn
fonte
fonte
Respostas:
Eu encontrei essa pergunta ao tentar responder a mim mesma. Após algumas pesquisas e experimentações, encontrei algumas outras opções para isso. Vou pular a parte sobre a distribuição de chaves como uma alternativa, já que Matt Simmons cobriu isso. Além disso, eu sei que há momentos em que isso não é bom o suficiente. Por exemplo, se você é o GitHub e precisa armazenar milhões de chaves públicas em um único usuário, a atualização contínua dos arquivos allowed_keys do SSH e a manutenção deles sincronizados em potencialmente dezenas a centenas de caixas de borda não é viável ou desejável.
Então,
Primeiro, o RedHat (e variantes) têm um patch suportado para o OpenSSH que adiciona as opções
AuthorizedKeysCommand
eAuthorizedKeysCommandRunAs
. O patch foi mesclado a montante no openssh 6.2. Para citar a partir da página de manual :Em meus experimentos hoje à noite, descobri que, fora da caixa, isso não funciona devido às políticas padrão do SELinux. Você pode contornar isso desativando a aplicação do SELinux com
setenforce 0
. Como a desativação do SELinux provavelmente é uma má idéia, você pode gerar a política correta. No meu caso, isso foi tão simples quanto tentar fazer login com aAuthorizedKeysCommand
opção configurada/etc/ssh/sshd_config
e depois usá-laaudit2allow -a -M local && semodule -i local.pp
. Basicamente, ele examina os logs de auditoria e encontra coisas que foram impedidas e gera exceções para eles. Se é provável que você tenha outras coisas que possam ser incluídas na lista de permissões, você provavelmente deve aprender mais sobreaudit2allow
como obter as novas políticas corretamente.Existem outros patches (provavelmente menos testados e confiáveis) disponíveis para adicionar funcionalidades semelhantes. Por exemplo, existe o openssh-script-auth . Você também pode encontrar o patch usado pelo RedHat e aplicá-lo diretamente. Um rápido acesso ao Google revela https://launchpadlibrarian.net/89063205/openssh-5.3p1-authorized-keys-command.patch e https://launchpadlibrarian.net/105938151/openssh-authorized-keys-command.patch, que são com base nas versões RH, mas que foram atualizadas para versões mais recentes do OpenSSH.
Faça o patch do OpenSSH para realizar pesquisas de chave diretamente de alguma loja (por exemplo, como GitHub e CodeBaseHQ e outras já foram realizadas). O GitHub não forneceu este patch de código aberto, tanto quanto sei, mas sei que no passado encontrei versões para a pesquisa de chaves do MySQL e PostgreSQL. Tentei encontrá-los novamente agora, mas não tive muita sorte.
Existem também algumas opções baseadas em FUSE. Por exemplo, existe o LPKFuse, que permite servir chaves públicas do LDAP, alterando o
AuthorizedKeysFile
local para um no sistema de arquivos LPKFuse. O LPKFuse FS cria arquivos virtuais cujo conteúdo é respaldado por campos de um servidor de diretório.Em suma, acho que a opção 1 é de longe a melhor, pois é oficialmente suportada pelo RedHat. Além disso, ele permite que você coloque qualquer lógica que desejar nesse script (inclusive conversando com um banco de dados) em qualquer idioma que desejar.
fonte
O OpenSSH não tem esse recurso, pelo que sei. Sua melhor aposta pode ser que um script gere novamente o arquivo automaticamente todas as noites (ou com a frequência necessária).
Além disso, você pode querer ver esta pergunta: Um sistema para distribuir chaves públicas SSH
fonte
Acredito que em versões mais recentes do openssh, você pode armazenar chaves em uma entrada LDAP do usuário. Se você já estiver usando LDAP ou AD para gerenciamento de contas, poderá utilizá-lo também para gerenciamento de chaves.
fonte