É uma boa localização para um número autorizado de chaves?

29

Estou no processo de configurar um servidor em nuvem para executar a seguinte pilha: Ruby, Passenger, Apache; no Ubuntu 10.04 (Lucid Lynx).

No processo de tornar o servidor mais fácil de gerenciar, eu configuro as chaves RSA roote www-datapara que eu possa sshentrar no servidor. O que eu não gostei foi www-datao .sshdiretório em /var/wwwque está a configuração padrão do apache. Minha preocupação é que, se o apache não estiver configurado corretamente, o .sshdiretório poderá ser exposto.

Me deparei com a solução para mover o ~/.ssh/authorized_keysarquivo em um local central, alterando AuthorizedKeysFileem /etc/ssh/sshd_config. Isso vem com 2 profissionais: um único local para chaves, e sem ter que se preocupar com uma configuração ruim do apache. O único argumento que consigo pensar é que agora todos os usuários estão disponíveis para login no servidor (claramente uma faca de dois gumes do arquivo de chave central).

Há algo que eu perdi nessa configuração? Eu me expus demais ou isso é uma solução melhor do que authorized_keysarquivos individuais ?

Sou verde quando se trata de gerenciamento de servidores, mas estou totalmente pronto para ser chamado de mau nome por fazer coisas ruins. : D

Gavin Miller
fonte
1
Pelo menos as chaves públicas expostas (somente leitura) na Internet não são o maior risco ... (Pode permitir que os invasores vejam se conseguem fazer login no servidor com uma chave privada que obtiveram em outros lugares, mas não 't permitir-lhes para entrar por apenas obter essa ...) (Os problemas graves são se houver um id_rsaarquivo no ~/.sshe eles conseguem ler isso)
Gert van den Berg

Respostas:

51

Todos os arquivos de chaves podem ser centralizados no mesmo diretório e não misturados no mesmo arquivo.

Simplesmente configure o sshd_configarquivo assim:

AuthorizedKeysFile  /etc/ssh/authorized_keys/%u

No seu servidor:

  • chaves de dados www estarão em /etc/ssh/authorized_keys/www-data
  • chaves raiz estarão em /etc/ssh/authorized_keys/root

Em relação aos direitos de acesso, essas configurações são aceitas pelo sshd:

/etc/ssh/authorized_keyspertence root:roote tem o modo 755. Os arquivos de chave pertencem root:roote têm o modo 644.

Outros modos podem funcionar, mas eu não os testei.

mahn
fonte
3
+1, mas eu não definiria os outros. Defina a propriedade dos arquivos% u como usuário, para que isso não seja necessário.
Aaron Copley
1
Boa solução para o problema de que usuários mal-intencionados podem adicionar mais chaves públicas às suas ~ / .ssh / allowed_keys concedendo acesso a outras pessoas.
214166 bbassassiiee
Acabei de confirmar que o modo 600 para o arquivo de chaves autorizadas de um usuário não funciona; precisa estar no modo 644 #
Luis E.
@bbaassssiiee Isso ABSOLUTAMENTE NÃO resolve esse problema. Eles podem apenas compartilhar a sua chave privada com quem eles querem dar acesso (esta possibilidade pode ser mitigado é claro, mas esta resposta não faz absolutamente zero a mitigá-la)
DylanYoung
1
@DylanYoung Admito que é possível compartilhar chaves privadas. Porém, com o chattr, posso revogar o acesso de gravação aos arquivos allowed_keys para poder distribuí-los exclusivamente, salvaguardando uma única linha em todos os arquivos.
bbaassssiiee
15

De um modo geral, eu não faria o que você está sugerindo. Ele quebra suposições comuns (como ~/.ssh/authorized_keystrabalhar para seus usuários e apresenta problemas que você já mencionou na sua pergunta. Se você observar problemas evidentes antes da implementação, significa que sua solução não é ideal.

Em termos de segurança, também acho que é uma TERRÍVEL idéia que todos compartilhem uma conta de serviço: agora é só você e você sabe que é você quem faz as alterações. Em cinco anos, quando você tiver cinco administradores, vai querer saber quem mudou o quê e vasculhar os logs de auditoria para ver quem usou qual chave quando é uma dor real.
É melhor que as pessoas efetuem login como elas mesmas e usem sudoalgo semelhante para aumentar seus privilégios e fazer o que for necessário.


Se você ainda deseja centralizar as chaves SSH, sugiro procurar em um sistema de implantação como o Puppet ou o radmind para gerenciar / distribuir os authorized_keysarquivos nos ~user/.ssh/diretórios apropriados (ou hackear uma solução caseira que os coloque no lugar).
À medida que você expande para vários servidores, pode procurar no patch da Chave Pública LDAP versões mais antigas do OpenSSH (ou a AuthorizedKeysCommanddiretiva e um script apropriado na versão mais recente do OpenSSH) para poder centralizar seus usuários e não ter que distribuir as chaves deles em toda a sua rede, mas é provável que esteja muito longe para você.

voretaq7
fonte
1
+1 para o argumento de compartilhamento. Resumindo, porque demorei um momento para perceber sua implicação: não deveria haver nenhum diretório ~ www-data / .ssh, portanto, nenhum risco de segurança no navegador da web.
thiton
Obrigado pelo feedback! Se estou entendendo você corretamente. Eu não deveria ter rootnem www-dataacessível através de uma chave ssh, está correto?
Gavin Miller
1
Ter um ~www-data/.sshdiretório não é uma coisa terrível (com permissões apropriadas, não é um risco substancial), mas se você for usar ~www-data/.ssh, provavelmente é melhor não ter o seu webroot ~www-data(mova o webroot ou www-datao diretório inicial do mesmo). A diferenciação dos usuários é o maior argumento do IMHO - sei se vejo jsmithlog, sei que é John Smith. Se eu vir o www-datalogon, preciso cavar mais para descobrir quem era.
precisa saber é o seguinte
A razão pela qual eu precisava de uma chave ssh para www-data é que estou usando o Beanstalk (SCM e ferramenta de implantação) para fazer as implantações pelo SFTP. Devo então criar uma conta separada para o Beanstalk fazer o ftp'ing? Qual seria a melhor solução lá?
Gavin Miller
1
Do jeito que está na maioria dos sistemas, o padrão é AuthorizedKeysFilein . Aqui está um espaço reservado para o diretório inicial. O que o impede de configurá-lo para ou mesmo . Você pode até dar ao usuário respectivo acesso de gravação ao seu arquivo individual (e somente o seu) vincular o arquivo ao local padrão (com ) e não quebrar as suposições acima mencionadas. /etc/ssh/sshd_config%h/.ssh/authorized_keys%h/some/folder/ssh_keys_by_user/%h//root/ssh_keys/%uln -s /root/ssh_keys_by_user/username /home/username/.ssh/authorized_keys
con-f-use