Linux Kamarada

SSH com autenticação em dois fatores usando certificado digital

Se você possui um certificado digital armazenado em uma mídia criptográfica, como um cartão inteligente ou um token, pode adicionar uma camada de segurança às conexões SSH com seu servidor configurando autenticação baseada em dois fatores (two-factor authentication ou 2FA). Com isso, para se conectar ao servidor, é necessário possuir a mídia criptográfica e conhecer sua senha PIN.

Neste post, você verá como configurar autenticação com token no acesso remoto via SSH.

Pré-requisitos

Aqui, parto do princípio que:

  • o servidor está com o acesso remoto via SSH habilitado e funcionando,
  • o computador cliente consegue acessar remotamente o servidor via SSH, e
  • o computador cliente como consegue utilizar o token.

Recomendo a leitura de alguns posts anteriores:

Obtendo a chave pública do token e copiando para o servidor

O token armazena seu certificado X.509. Sua chave pública deve ser conhecida pelo servidor para que ele aceite a conexão SSH encriptada com ela.

Para extrair a chave pública do token no formato RSA, utilizado por padrão no SSH, use o comando ssh-keygen com o argumento -D e o caminho para a biblioteca do token (no meu caso, /usr/lib64/libeToken.so). Salve a saída em um arquivo (por exemplo, chaves_token):

1
$ ssh-keygen -D /usr/lib64/libeToken.so > chaves_token

Copie sua chave pública para o servidor usando o protocolo e comando SCP (semelhante ao SSH, mas usado para copiar arquivos):

1
$ scp chaves_token kamarada@meuservidor:/home/kamarada/

São informados, na sequência: o caminho no computador local do arquivo a ser copiado, o nome do usuário do servidor, o nome de rede (ou endereço IP) do servidor e o destino do arquivo no servidor.

Configurando a autenticação no servidor

Acesse remotamente o servidor usando SSH:

1
$ ssh kamarada@meuservidor

No servidor, crie a pasta de configuração do SSH:

1
$ mkdir -p .ssh

Copie a chave pública RSA para o arquivo .ssh/authorized_keys:

1
$ cat chaves_token >> .ssh/authorized_keys

authorized_keys é um arquivo de configuração do SSH que especifica quais chaves podem ser aceitas no acesso remoto com a conta do usuário.

Você pode excluir o arquivo chaves_token e encerrar o acesso remoto:

1
2
$ rm chaves_token
$ exit

Acesso remoto usando o token

Acesse remotamente o servidor via SSH, dessa vez adicionando o argumento -I e o caminho para a biblioteca do token:

1
$ ssh -I /usr/lib64/libeToken.so kamarada@meuservidor

Forneça a senha PIN do token:

1
Enter PIN for 'ANTONIO VINICIUS MENEZES MEDEIR': 

E pronto: você está na linha de comando do servidor!

Encerre o acesso remoto, por enquanto:

1
$ exit

Autenticando com o token por padrão

No momento, é possível acessar remotamente o servidor de duas formas:

  • informando a senha do usuário do servidor, como de costume, com:
1
$ ssh kamarada@meuservidor
  • ou usando o token e informando sua senha PIN com:
1
$ ssh -I /usr/lib64/libeToken.so kamarada@meuservidor

Para usar o token por padrão, edite o arquivo ~/.ssh/config:

1
$ nano ~/.ssh/config

E adicione a linha:

1
PKCS11Provider /usr/lib64/libeToken.so

(lembre de mudar o caminho para a biblioteca do token conforme sua necessidade)

Feito isso, não é mais necessário adicionar o argumento -I para usar o token:

1
2
3
4
5
$ ssh kamarada@meuservidor
Enter PIN for 'ANTONIO VINICIUS MENEZES MEDEIR': 
Last login: Mon Dec 17 00:47:15 2018 from 172.17.0.10
Have a lot of fun...
kamarada@meuservidor:~>

Se o token estiver plugado no computador cliente, será solicitada sua senha PIN. Senão, será solicitada a senha do usuário do servidor.

Referências

Quero agradecer ao sabe-tudo Leandro Peracchi por ter compartilhado essa dica comigo.

Para escrever a explicação, consultei algumas páginas:

Me paga um café?
Se você gostou muito, se foi muito útil pra você, será que vale um café? Se quiser, você pode "me pagar um café" pelo PayPal ou contribuir com o projeto de outras formas.

Comentários

Sobre

O Projeto Linux Kamarada visa divulgar e promover o Linux como um sistema operacional robusto, seguro, versátil e fácil de usar, adequado para o uso diário seja em casa, no trabalho ou no servidor. Os focos do projeto são principalmente distribuição e documentação.

Anúncios

Facebook

Autor