Implementar 2FA con Google Authenticator en una VM con Ubuntu
21 febrero, 2024
Compartir:

Comercial

Implementar 2FA con Google Authenticator en una VM con Ubuntu

Tutoriales de la Nube de ARSAT

Nube ARSAT: Implementar 2FA con Google Authenticator en una VM con Ubuntu

¿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: