Doble factor d’autenticació (2FA) amb PAM
Requeriments
- Accés a una màquina virtual Linux (EC2 amb Amazon Linux 2023).
- Accés SSH a la màquina virtual (clau publica/privada).
- Instal·lar l’aplicació Google Authenticator al vostre dispositiu mòbil (Android o iOS).
Objectiu
Configurar l’autenticació de doble factor (2FA) utilitzant PAM i Google Authenticator per a connexions SSH. Per accedir al sistema, els usuaris hauran de proporcionar la seva contrasenya i un codi generat per l’aplicació Google Authenticator.
Preparació del programari
Connecteu-vos a la vostra màquina virtual mitjançant SSH.
Instal·leu el paquet
google-authenticator:sudo dnf install google-authenticator -yInstal·la el paquet qrencode, aquest paquet ens permetrà generar codis QR:
sudo dnf install qrencode -y
Configuració d’usuaris
Les instancies EC2 amb Amazon Linux 2023 creen un usuari per defecte anomenat ec2-user, aquest usuari té configurat l’accés SSH mitjançant claus públiques/privades. Per tal de provar l’autenticació amb PAM i Google Authenticator, cal crear un nou usuari anomenat amsauser.
Creeu un nou usuari:
sudo adduser amsauserEstabliu una contrasenya per a l’usuari:
sudo passwd amsauser e.g.: #@ms@2o25Configureu Google Authenticator per a l’usuari
amsauser:sudo su - amsauser google-authenticator
Configuració de Google Authenticator
A continuació es mostra el procés de configuració pas a pas:
Tipus de token
Do you want authentication tokens to be time-based (y/n) y
Aquesta pregunta determina si els tokens seran basats en el temps (TOTP) o en comptadors (HOTP). Es recomana TOTP per major seguretat. Un cop seleccionat, no es pot canviar.
Això generarà un codi QR que podeu escanejar amb l’aplicació Google Authenticator del vostre dispositiu mòbil.
Associació del token
Un cop escanejat el codi QR, l’aplicació generarà un codi de 6 dígits.
Haureu d’introduir aquest codi a la terminal per completar l’associació:
Your new secret key is: XXXXXXXXXXXXXX
Enter code from app (-1 to skip): XYZFGR- Substituiu
XYZFGRpel codi generat per l’aplicació. - També es generaran codis de recuperació per utilitzar en cas de perdre l’accés a l’aplicació.
Actualització del fitxer de configuració
Do you want me to update your “/home/amsauser/.google_authenticator” file? (y/n) y
Aquesta acció permet que Google Authenticator actualitzi automàticament el fitxer .google_authenticator amb la clau secreta i les opcions seleccionades.
Tokens de ús únic
Do you want to disallow multiple uses of the same authentication token? (y/n) y
- Aquesta opció restringeix un login per cada 30 segons amb el mateix token.
- Augmenta la seguretat contra atacs man-in-the-middle.
Compensació de desajust horari
Do you want to increase the allowed window? (y/n) y
- L’aplicació genera un nou token cada 30 segons.
- Per compensar possibles desajustos horaris entre client i servidor, es permeten codis addicionals abans i després del codi actual.
- La opció per defecte: 3 codis permesos (un anterior, el corrent i un següent).
Limitació d’intents
Do you want to enable rate-limiting? (y/n) y
Aquest paràmetre permet limitar el nombre d’intents d’autenticació fallits per protegir contra atacs de força bruta. El nombre per defecte és: 3 intents cada 30 segons. Millora la seguretat del servidor davant intents brute-force.
Configuració de PAM per SSH
Per configurar SSH a les instancies EC2 amb Amazon Linux 2023 cal tenir en compte:
- La configuració per defecte d’Amazon Linux 2023 deshabilita l’autenticació per contrasenya a SSH (
PasswordAuthentication no). - La configuració particular de SSH amb PAM es troba a
/etc/pam.d/sshd_config.d/50-redhat.conf.
Per realitzar aquest pas, cal tenir permisos d’administrador (sudo), l’usuari amsauser no té aquests permisos, per tant, cal tornar a l’usuari ec2-user: exit.
Els moduls disponibles es poden consultar a https://github.com/google/google-authenticator-libpam/. També podeu utilitzar la comanda man pam_google_authenticator per obtenir més informació sobre les opcions de configuració.
Editeu el fitxer de configuració PAM per SSH:
sudo vi /etc/pam.d/sshdAfegiu la següent línia al final del fitxer:
auth [success=done new_authtok_reqd=done default=ignore] pam_google_authenticator.so nullok forward_pass [authtok_prompt=Your secret token: ]nullok: Permet als usuaris sense configurar Google Authenticator iniciar sessió només amb la contrasenya.forward_pass: Permet passar la contrasenya a altres mòduls PAM.authtok_prompt: Personalitza el missatge que es mostra quan es demana el codi de verificació.
Editeu el fitxer de configuració d’OpenSSH:
sudo vi /etc/ssh/sshd_config.d/50-redhat.confHabiliteu el mòdul PAM. Per fer-ho, assegureu-vos que la línia
UsePAM yesno està comentada (sense#al principi).Afegiu
ChallengeResponseAuthentication yesper permetre respostes interactives on es demana el codi de Google Authenticator.Afegiu
PasswordAuthentication yesper permetre l’autenticació mitjançant contrasenya.Creeu una regla específica per a l’usuari
amsauserque requereixi tant la contrasenya com el codi de Google Authenticator.Match User amsauser AuthenticationMethods password,keyboard-interactive
Reinicieu el servei SSH per aplicar els canvis:
sudo systemctl restart sshdProveu la connexió SSH des d’una altra terminal. Hauríeu de ser sol·licitat per la vostra contrasenya i després pel codi de verificació de Google Authenticator.
Trobleshooting
- Si no podeu iniciar sessió, reviseu els logs del servei sshd amb
sudo journalctl -u sshdper identificar possibles errors de configuració.
Exercicis adicionals
Configura l’usuari
ec2-userper utilitzar també l’autenticació de doble factor amb Google Authenticator. Amb clau pública/privada i google authenticator.Preparar un script de creació d’usuaris que automatitzi la creació d’usuaris amb Google Authenticator preconfigurat amb public key authentication i 2FA.