O uso do OpenPGP Smartcard para autenticação “two factor” no OpenSSH a partir do console do FreeBSD

Só hoje me dei conta de que quando publiquei o tutorial sobre uso do OpenPGP Smartcard para autenticação de 2 fatores no OpenSSH, eu não expliquei como fazê-lo de uma maquina FreeBSD.

Abaixo segue um tutorial rápido, para ficar registrado para referência futura:

a) Instale o gnupg a partir da coleção de ports (/usr/ports/security/gnupg) , na tela de opções que aparece antes da compilação habilite o suporte ao pinentry, ao scdaemon e ao curl.

b) Depois de instalar o gnupg você vai precisar ajustar as permissões do device que representa o seu leitor de smartcard no /dev para que o scdaemon possa funcionar de forma adequada com outros usuários que não o root.

Conecte o seu leitor ao seu seu desktop, e execute o comando usbconfig

[root@vm1 ~]# usbconfig
...
ugen0.4: <Smart Card Reader USB OMNIKEY AG> at usbus0, cfg=0 md=HOST spd=FULL (12Mbps) pwr=ON

Como podem ver acima, o meu leitor Omnikey Cardman 3201 foi  reconhecido como /dev/ugen0.4 , supondo que eu o usuário com o qual você deseja utilizar o gnupg pertença ao grupo wheel (para que possa usar o su), você deve adicionar as seguintes 2 linhas ao final do seu arquivo /etc/devfs.conf :

# Permite smartcard reader
own  ugen0.4 root:wheel 
perm ugen0.4 0770

Após alterar o arquivo lembre-se de reiniciar o devfs, executando o comando:

[root@vm1 ~]# /etc/rc.d/devfs restart

c) O próximo passo será gerar as suas chaves no gnupg, copiando-as na sequencia para o seu OpenPGP Smartcard, para isto basta seguir os procedimentos descritos neste post anterior.

d) Agora que você já configurou o seu Smartcard, você precisará configurar o gpg-agent para que o seu client ssh possa utilizá-lo no processo de autenticação. Na prática isto é feito executando-se o gpg-agent com algumas opções especificas, e na sequêcia exportar algumas variáveis de ambiente ($GPG_AGENT_INFO, $SSH_AUTH_SOCK, $SSH_AGENT_PID) que irão viabilizar a integração do ssh e do gnupg.
A automação desta configuração irá depender do shell que você estiver utilizando, para o bash a forma mais simples de fazer isso é editar o seu ~/.profile e adicionar a seguinte linha ao final do arquivo:

# Configura o gpg-agent para ser utilizado com ssh, cache de 10 minutos.
# O comando abaixo deve ser digitado em uma unica linha
eval `killall gpg-agent && gpg-agent --daemon --scdaemon-program /usr/local/bin/scdaemon
      --write-env-file --use-standard-socket --default-cache-ttl 600 --enable-ssh-support
      --default-cache-ttl-ssh 600`

Observe que a declaração acima mata o processo do gpg-agent caso ele já esteja rodando para manter o valor das variáveis coerente com o pid atual.

e) Para verificar se o seu cliente ssh está conseguindo se comunicar com o gpg-agent, execute o comando ssh-add com a opção “-l” para listar as chaves privadas que o agente tem acesso.

f) Para visualizar a chave publica RSA da sua chave para que possa adicioná-la a lista de chaves autorizadas nos seus servidores remotos, basta executar o comando ssh-add com a opção “-L”.

Agora basta se conectar normalmente aos seus servidores :)

Ao executar a conexão vc será apresentado a tela do pinentry para que digite o seu PIN:

Após digitar a senha correta a conexão irá proceder normalmente.

Simples, não?

[ ]‘s Edson

 

Comments are closed.