Autenticação SSH: chaves SSH ou senha única

7

Eu tenho um servidor Linux Ubuntu 10.04 que normalmente eu ssh em (da minha máquina em casa) usando a autenticação de chave ssh. No entanto, às vezes preciso ssh remotamente de máquinas potencialmente inseguras (como cybercafés, computadores públicos na biblioteca, etc.) nas quais minha senha pode ficar comprometida. Nesse caso, eu gostaria de usar um sistema de senha única como OTPW ou As senhas de papel perfeitas de Steve Gibson .

Como posso configurar meu servidor para primeiro verificar chaves ssh e usar um sistema OTPW para autenticação? (Eu teria que fazer dois usuários?)

    
por mr_schlomo 28.12.2011 / 05:09

4 respostas

3

Edit: desculpe por responder minha própria pergunta! (As outras duas respostas são ótimas, mas não respondam completamente a pergunta. Mas ainda são muito úteis!)

O OTPassword Pluggable Authentication Module implementa o sistema Perfect Paper Password de Steve Gibson em um PAM para Linux. Depois de instalar isso, você terá a autenticação PPP. Mas o que dizer de um desvio de chaves ssh? Uma FAQ no site deles responde a essa pergunta:

If you have a trusted machine from which you often log into your remote system use ssh keys. Generate them with ssh-keygen, and copy your new ~/.ssh/id_rsa.pub into ~/.ssh/authorized_keys on remote computer. When SSH authenticates user with keys it omits PAM.

Convenientemente automático!

Editar: Google Authenticator e Duo Security também parece ser uma boa solução. Eles não fornecem senhas de uma vez no papel; em vez disso, eles usam seu smartphone para gerar uma chave TOTP em constante mudança. (O Duo Security também trabalha com dumbphones enviando-lhes uma mensagem de texto com algumas senhas de uso único. No entanto, o Duo Security não é local; você deve confiar em seus servidores ...)

    
por 28.12.2011 / 20:17
5

Embora este método não verifique um método de autenticação, ele resolve o problema de fazer login de máquinas inseguras / não confiáveis usando OTP.

Para configurar o daemon SSH para escutar em várias portas (uma para autenticação de chave pública e outra para autenticação OTP), basta adicionar outro número de porta ao arquivo sshd_config, ou seja,

Port 22 # For key-based auth
Port 60000 # For OTP-based auth

O 2-FA é baseado na tecnologia de autenticação em duas etapas do Google. Para instalar a biblioteca e o programa:

$ sudo apt-get install libpam-google-authenticator

Enquanto isso, instale o aplicativo Google Authenticator em seu smartphone. Uma vez instalado, a partir do terminal, inicie o programa:

$ google-authenticator

Isso lhe dará um código de barras, um segredo e vários códigos de rascunho. MANTENHA ELES SALVOS!!! Se você não tiver acesso ao seu telefone ou precisar de acesso de emergência, esses códigos serão o seu único caminho. Não subestime a importância desse mecanismo de backup. Pode te ferrar a longo prazo. Configure o módulo PAM para usar o Google Authenticator:

$ sudo nano /etc/pam.d/sshd

Para desativar o login de senha, coloque um # na frente da linha @include common-auth. Além disso, na parte inferior do arquivo, adicione:

auth required pam_google_authenticator.so

Para ativar a autenticação OTP:

$ sudo nano /etc/ssh/sshd_config

Encontre a linha com a frase: ChallengeResponseAuthentication e altere de "não" para "sim".

Defina PermitRootLogin no e PasswordAuthentication no .

No final do arquivo, use o parâmetro "match" para determinar quais mecanismos de autenticação devem ser usados para acessar a máquina a partir dessa porta, por exemplo:

Match LocalPort 22
    PasswordAuthentication no
    AuthenticationMethods publickey
    PubKeyAuthentication yes
​
Match LocalPort 60000
    AuthenticationMethods keyboard-interactive:pam

O parâmetro "keyboard-interactive: pam" força o daemon SSH a ir para o daemon de módulo PAM (configurado em /etc/pam.d/sshd ) e autenticar conforme especificado lá (daí a necessidade de desabilitar o login de senha do módulo PAM também, fazendo o hash da linha common-auth ). Não se esqueça de reiniciar seu daemon SSH para que as alterações entrem em vigor:

$ sudo /etc/init.d/sshd restart

Então, quando estiver em uma máquina não confiável, simplesmente conecte o SSH na porta 60000 (ou o que quer que você tenha configurado) e use a OTP para autenticar.

    
por 22.05.2014 / 15:17
3

Autenticação de chave pública com OTP como substituto (é isso que você quis dizer, certo?):

  1. Authback de chave pública com fallback de senha é o comportamento padrão do OpenSSH
  2. Como sua senha é verificada é melhor definida nos arquivos de configuração do PAM
por 28.12.2011 / 17:15
1

Isso pode ser simples, mas também há algumas armadilhas a serem evitadas:

A maioria de suas mudanças de configuração precisam acontecer no arquivo sshd_config normalmente localizado em / etc / ssh / sshd_config

Você já tem chaves compartilhadas em execução, então vou pular isso aqui:

A linha em que você deseja prestar atenção é:

PasswordAuthentication yes

As advertências que você deseja ter em mente estão limitando quem pode fazer login e como. Todos devem estar no local para restringir o acesso a um grupo de usuários o menor possível:

PermitEmptyPasswords no
AllowUsers [email protected].*
AllowGroups sshusers

Existem várias opções que você pode definir aqui para analisar a página de manual . o conjunto completo de opções disponíveis.

Eu recomendaria a criação de um grupo apenas para permissões ssh.

O sinalizador a seguir também é strongmente recomendado:

PermitRootLogin no

Isso fará com que o daemon solicite uma senha se a chave não for enviada / reconigida. Você pode adicionar o obstáculo do OTPW, se você gosta, mas você está teoricamente em um ambiente criptografado por isso não deve ser estritamente necessário. Tendo olhado para as informações do OTPW que você vinculou o código parece ter sido atualizado pela última vez em 2003 eu estaria detestando usá-lo, sem obter uma revisão por pares. Práticas seguras de codificação e, na verdade, todo o ambiente mudaram muito desde então.

    
por 28.12.2011 / 08:11