Comercial
Implementar 2FA con Google Authenticator
¿Por qué debemos activar 2FA en nuestros Linux?
La seguridad en el acceso a nuestras máquinas virtuales y equipos físicos es la principal preocupación que debemos tener, para asegurarnos que quienes ingresan a los equipos sean quienes tienen realmente acceso debemos activar métodos de validación que superen el de usuario/clave y el del acceso por certificados de clave pública/privada.
La solución que recomendamos y utilizamos es el uso de "Segundo Factor de Autenticación" o "2FA", esto nos garantiza que el usuario que ingrese tenga que tener un usuario y clave válida y además debe contar con un dispositivo sincronizado con 2FA, faltando algunos de estas validaciones no podrá ingresar al sistema.
Implementación
Lo que implementaremos es una solución TOTP (Time based One Time Password), o Contraseña de un solo uso basada en el tiempo, en este tutorial específicamente la implementación que utiliza la App de dispositivos móvil Google Authenticator
Hora del sistema
El primer paso es verificar que el sistema donde vamos a instalar 2FA tenga el horario sincronizado por NTP con una fuente confiable, si usamos VMs en la Nube de ARSAT esto ya está configurado en el hipervisor que contiene a las máquinas virtuales.
También debemos verificar que nuestro dispositivo móvil donde tendremos corriendo la App Google Authenticator no difiera en más de 30 segundos de la hora del equipo donde queremos activar 2FA
Si utilizamos un Linux basado en Ubuntu el comando para asegurar que utilice NTP es el siguiente:
sudo timedatectl set-ntp true
Instalación de Google Authenticator
Primero debemos ejecutar el comando:
apt update
Una vez ejecutado corremos la instalación:
sudo apt install libpam-google-authenticator -y
Ejecutamos el comando para asociar los códigos TOTP
google-authenticator
Ante la pregunta que nos aparece contestamos "y"
Do you want authentication tokens to be time-based (y/n) y
Hecho esto nos aparecerá el código QR que podemos escanear con la aplicación de Google Authenticator, pero también se puede utilizar la Aplicación Authy
Escaneamos el código o ingresamos el valor que nos aparecer en "Your new secret key:"
Your new secret key is: CYK6YN7ZN6QYMSW3QG5KVEPT2Y
Backup de los códigos offline
Debajo del QR nos aparecen los códigos de emergencia, los cuales solo sirven para un uso y los debemos resguardar en caso de perder el acceso al dispositivo en donde tenemos configurado el 2FA
En este caso los códigos que nos aparecen son:
Your verification code is 483111
Your emergency scratch codes are:
56671935
62954525
98065907
37118399
59026236
Posteriormente nos aparecerán las siguientes preguntas a las cuales responderemos a todas con "y"
Llegados a esta parte ya tenemos instalado el servicio, lo que sigue es configurar las validaciones de Linux para que tome en cuenta el nuevo servicio de seguridad que hemos agregado
Configuración de la validación PAM
Editamos el archivo /etc/pam.d/sshd
sudo vi /etc/pam.d/sshd
Y agregamos al final la siguiente configuración:
auth required pam_google_authenticator.so secret=/home/${USER}/.google_authenticator nullok
Grabamos el cambio ( <ESC> :x <ENTER>)
El "nullok" al final es para hacer opcional el uso de 2FA en el sistema, si queremos que sea obligatorio, una vez que todos los usuarios del sistema lo tienen configurado se debería borrar de la línea agregada para que solo usuarios con 2FA activo puedan ingresar al sistema
Configuración de SSHD
Debemos actualizar la configuración del programa SSHD para que nos pida el 2FA al ingresar, para ellos si el sistema es Ubuntu 21 o anterior debemos activar la opción "ChallengeResponseAuthentication"
Editamos el archivo:
sudo vi /etc/sshd/sshd_config
En donde cambiamos el "no" por "yes" :
# Change to yes to enable challenge-response passwords (beware issues with
# some PAM modules and threads)
ChallengeResponseAuthentication yes
Para el caso de utilizar Ubuntu 22 o superior, la linea a modificar es "KbdInteractiveAuthentication" y procedemos de la misma manera.
Grabamos el cambio ( <ESC> :x <ENTER>Reinicio del servicio SSHD
Una vez guardado debemos reiniciar el servicio de sshd con el siguiente comando:
sudo systemctl restart sshd
Prueba de conexión
Nos conectamos con la terminal ssh de nuestra predilección e ingresamos usuario y clave
Vemos que ahora nos pide el "Verification code", este dato lo saco de la aplicación que elegí para gestionar el 2FA, cargamos los seis dígitos y pulsamos enter. Si todo esta ok ingresaremos al sistema normalmente: