Saltar al contenido

Segundo factor de autenticación (2FA) para sudo

El uso de la autenticación en dos factores no es algo nuevo, cada vez más servicios web lo implementan y resulta muy beneficioso para proteger nuestras cuentas de accesos no autorizados. Me atrevería a decir que la forma más común y la que todos conocemos es el uso de códigos temporales llamados contraseñas de un solo uso u OTP por sus siglas en inglés, las cuales se generan a través de funciones criptográficas en alguna aplicación o dispositivo token físico y cambian cada minuto, por lo que hacen imposible para alguien acceder a nuestras cuentas sin obtener la fuente que genera ese código.

Lo cierto es que si bien el sistema que he descrito (de forma muy resumida) es uno de los más habituales, existen otros mecanismos y otros protocolos para implementar autenticación en dos factores. Hoy voy a hablar del uso de llaves de seguridad, que no son otra cosa que dispositivos físicos que podemos conectar a nuestras computadoras y teléfonos móviles para -a través de distintos protocolos- completar el proceso de autenticación con dos factores.

Actualmente poseo dos llaves de la marca Yubico que me permiten usarlas como 2FA para varios servicios, entre ellos el comando sudo para ejecutar tareas administrativas en GNU/Linux. Concretamente, tengo una Security Key y una YubiKey 5 Nano, que entre otros protocolos soportan el U2F (Universal 2nd Factor) que usaré para integrar las llaves con el sistema operativo. Si les interesa conocer más acerca del protocolo este es un buen punto de partida, y aquí pueden conocer todas las integraciones soportadas.

Yubikey 5 Nano (derecha) y Secure Key (izquierda)

Esta integración la realizaré en mi computadora portátil, ya que desde esta me conecto a redes algo más inseguras y ocasionalmente ejecuto software que podría considerar no confiable. De este modo, requiriendo pulsar la llave conectada a la computadora para completar la autenticación de sudo me aseguro que en caso de que el sistema se vea comprometido de forma remota el atacante no pueda ejecutar acciones administrativas. También lo usaré integrado con otros servicios, pero de eso ya les contaré más adelante.

Integración con Ubuntu y derivados

Esto lo he probado en Ubuntu 18.04, 20.04 y derivados de estas versiones. El primer paso consistirá en agregar el repositorio PPA de Ubuntu al sistema, esto lo podemos lograr con el siguiente comando:

sudo add-apt-repository ppa:yubico/stable && sudo apt-get update

Una vez habilitado el repositorio, instalamos la librería para soportar U2F en el sistema de autenticación de GNU/Linux:

sudo apt-get install libpam-u2f

Creamos el directorio de configuración:

mkdir ~/.config/Yubico

Y vamos a asociar la primer llave con el siguiente comando:

pamu2fcfg > ~/.config/Yubico/u2f_keys

Una luz en la llave comenzará a parpadear y debemos presionar/hacer contacto para completar el proceso. Si tenemos otras llaves podemos asociarlas con este comando:

pamu2fcfg -n >> ~/.config/Yubico/u2f_keys

Con las llaves ya asociadas debemos configurar el sistema para que las solicite al momento de ejecutar sudo, esto lo haremos editando el archivo /etc/pam.d/sudo, agregando a continuación de la línea “@include common-auth” lo siguiente:

auth       required   pam_u2f.so

Bastará con cerrar la sesión de Terminal, re-abrirla y al momento de ejecutar sudo, luego de ingresar la contraseña la llave comenzará a parpadear y al tocarla completaremos el proceso de autenticación.

Secure Key by Yubico

Para encontrar otras posibilidades de integración con Ubuntu y derivados podemos consultar el sitio oficial.