Linux-PAM: Como Funciona – google-authenticator

Prosseguindo o post anterior com a teoria por trás do Linux-PAM, agora iremos colocar um pouco de prática sobre o assunto configurando um módulo que acredito ser extremamente útil: google-authenticator. Nesse post iremos ver o que é uma autenticação de dois fatores, como ela funciona, e como configurar o google-authenticator com o OpenSSH.

 

Autenticação de Dois Fatores – O que é?

 

Uma autenticação de dois fatores basicamente é um modelo aonde a permissão de acesso do usuário é liberada mediante a apresentação e confirmação de um segundo método de autenticação. Com o refinamento das técnicas de invasão de privacidade, além de um desleixo por parte do usuário na hora de criar uma senha, foi pensado num modelo em que permitisse que um usuário tenha mais segurança em todas as suas contas, sem precisar pensar ou bolar uma senha que fosse complexa, simplesmente para depois anota-la numa folha de papel. Com a autenticação de dois fatores, mesmo que alguém tenha acesso a sua senha não terá acesso a sua conta pois precisará responder o segundo método de autenticação.

Abaixo segue alguns dos modelos populares de segundo fator que são utilizados:

  • digital: Um dos mais comuns métodos de autenticação utilizados, aonde o usuário deverá fornecer as marcas de suas digitais a uma leitora de digitais, na qual irá comparar com a foto armazenada previamente. Caso as marcas sejam semelhantes, o acesso é liberado, caso contrário o acesso é negado. Normalmente a comparação é feita através das digitais do dedo indicador, porém existem bancos (ex. Bradesco) que fazem essa comparação utilizando a palma da mão;
  • token: Muito utilizado por bancos e a maioria dos sites atualmente, aonde você possui uma ferramenta instalada em seu celular ou um aparelho que gere chaves de autenticação (token), e essas chaves são fornecidas durante a autenticação. Caso o valor informado seja igual ao armazenado pela aplicação que deseja acessar, então o acesso é concedido, caso contrário ele é negado. Para aumentar ainda mais a segurança desse modelo de autenticação, diversos sites colocam validade nos tokens que a ferramenta gera. Se por algum azar uma das chaves se tornar de conhecimento de alguém, essa pessoa teria o prazo de até 1:00 minuto (no caso do google-authenticator) para utiliza-la, antes de ser invalidada;
  • pergunta secreta: Alguns sites ainda usam ela, como no caso do site de venda de jogos Origin, na qual determinadas funcionalidades do site só podem ser acessadas caso você saiba a resposta de uma pergunta secreta (por exemplo: “Qual o nome do meu animal de estimação?” ou “Qual o primeiro desenho que eu assisti?”)
  • certificado: Mais comum em internet banking do que em outros sites, aonde você deve fornecer, além da senha, um certificado (.pem ou .ppk) para ter acesso a ferramenta. Não é tão comum dessa forma, pois o certificado é mais utilizado como um substituto da senha, e não como um complemento.

A autenticação de dois fatores também é conhecida como Autenticação de Multiplos Fatores, como uma forma de enfatizar que você pode utilizar 2 ou mais métodos de autenticação para uma mesma aplicação. Vale ressaltar que não se deve colocar tantos métodos de autenticação para uma mesma aplicação, pois isso pode acabar irritando e/ou afastando um usuário.

 

Configurando o google-authenticator

 

Para a autenticação de dois fatores usando token no linux nós temos o módulo do Linux-PAM chamado “pam_google_authenticator.so”, que pode ser instalado facilmente através do repositório, no caso do Ubuntu e o CentOS. Para as demais distribuições, algumas possivelmente vem com as instruções para compilação do pacote (como o Arch Linux com o comando yaourt), e outras você precisa achar o pré compilado na internet (como no caso do Debian), ou, se preferir, poderá baixar o tar.gz e compilar manualmente. Não iremos trabalhar aqui com a compilação do google-authenticator, preferindo utilizar o que já vem no repositório.

No CentOS:

yum install google-authenticator

No Ubuntu:

apt-get install libpam-google-authenticator

Antes de sairmos configurando, primeiro precisamos instalar o aplicativo Google Authenticator no celular, ou outro gerenciador de tokens de sua preferência (como o Authy). Ambos estão disponíveis na Play Store e na App Store, e são gratuitos, porém o Authy fica atrelado ao número do telefone, sendo possível restaura-lo posteriormente, enquanto o Google Authenticator se perde ao formatar o aparelho.

Com o aplicativo instalado e configurado, execute o comando google-authenticator na conta que deseja habilitar a autenticação por token e siga a instruções de instalação. Fique atento para escanear o QR Code que o programa te fornecer durante a instalação, além de salvar as chaves de segurança em um local seguro. O QR Code contém as instruções para a aplicação gerar os tokens corretamente, enquanto as chaves de segurança servem para você manter o acesso ao servidor no caso de perder seu celular.

$ google-authenticator
Your new secret key is: NNPDW5MPC4UDGWJC
Your verification code is 220733
Your emergency scratch codes are:
 71718464
 75298322
 17005027
 41011801
 19168218

Agora para habilitar o módulo, vamos no arquivo na aplicação que você deseja ativar o módulo do google-authenticator (nesse exemplo iremos ativar para o OpenSSH, ou seja, no arquivo /etc/pam.d/sshd) e coloque a seguinte linha no final do arquivo:

auth    required    pam_google_authenticator.so   nullok [authtok_prompt=Your secret token: ] noskewadj

Conforme discutido no post anterior, quando queremos validar se as credenciais fornecidas pelo usuário são válidas nós utilizamos o domínio auth, enquanto o controle required serve para informar que só se o módulo aprovar deverá liberar acesso a aplicação, porém cheque os demais controles antes de retornar para o usuário que falhou. Já o nome do módulo é o pam_google_authenticator.so, e o mesmo possui poucas opções, sendo as mais interessantes as que irei comentar abaixo:

  • nullok: Permite que usuários que ainda não configuraram o google-authenticator ainda possam acessar a máquina sem fornecer o token. Isso permite que os usuários facilmente possam configurar o token posteriormente, tornando a migração menos dolorosa, além de permitir que você possua uma conta desprotegida no caso do módulo parar de funcionar sem nenhum motivo aparente;
  • noskewadj: Na maioria das vezes que o token falha é por conta do relógio interno da máquina estar diferente do relógio do seu celular. Os tokens são gerados de minuto em minuto, porém é o relógio interno do servidor que indica qual token deve ser enviado e em que hora ele deve ser enviado. Caso o relógio do servidor fique com frequência com o horário errado, ou o seu celular, ativar essa opção pode resolver seu problema, porém tornará menos seguro a autenticação.
  • authtok_prompt=prompt: Permite alterar a mensagem que exibe na tela para o usuário solicitando o token de autenticação. Se existem espaços na sua mensagem, será necessário protege-la com “[ ]” para que o Linux-PAM não interprete todos os caracteres da mensagem como se fossem parâmetros. Ex: [authtok_prompt=Your secret token: ]

Por ultimo, no caso do OpenSSH somente, é necessário habilitar o mesmo para reconhecer a autenticação de dois fatores, caso contrário ela não irá funcionar. Para ativar, basta abrir o arquivo /etc/ssh/sshd_config e alterar a opção ChallengeResponseAuthentication de no para yes. Feito isso, reinicie o serviço do SSH para aplicar as novas alterações.

# vim /etc/ssh/sshd_config
...
# Change to yes to enable challenge-response passwords (beware issues with
# some PAM modules and threads)
ChallengeResponseAuthentication yes
...

Para validar, basta se logar novamente via SSH e o mesmo irá perguntar para você sua senha e depois o token. Se fornecer tudo certo você terá acesso ao sistema, caso contrário ele dará autenticação falha (não irá informar qual delas falhou por conta da opção required) e irá perguntar novamente suas credenciais.

$ ssh user@localhost
Password:
Your secret token:
[user@localhost ~] $

Conclusão

 

Com isso configuramos o google-authenticator em nossa máquina para uso. Não é um módulo complexo de se compreender, porém possui uma enorme utilidade na hora de proteger seus servidores de autenticações não desejadas. Esse post foi mais prático, para que possam ver como o Linux-PAM funciona, visto que o anterior foi extremamente teórico e um pouco frustrante pela falta de uma atividade prática. Deixarei abaixo alguns links que utilizei durante meus primeiros passos com o módulo para consulta de quem estiver interessado.

Link:

  • https://www.digitalocean.com/community/tutorials/how-to-set-up-multi-factor-authentication-for-ssh-on-ubuntu-14-04
  • https://github.com/google/google-authenticator-libpam

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *