OTP son las siglas de 'One Time Password' es decir, contraseñas de un solo uso. Habitualmente empleadas en entornos con elevados requerimientos de seguridad, fueron popularizadas a través de los tokens 'RSA SecureID' como herramientas para hacer logins empleando factor doble de autenticación.
Groso modo, el sistema funciona de la siguiente manera:
- No existe un concepto de contraseña inmutable
- Cada vez que se quiera acceder al sistema se necesita una contraseña nueva
Es decir, en cada momento el servidor espera una contraseña que va cambiando de forma que si esa contraseña fuera interceptada, apenas serviría para un corto periodo de tiempo.
Existen varias implementaciones de OTP, en este caso vamos a usar Mobile-OTP ya que se integra perfectamente en el subsistema PAM de linux y además tiene clientes para Iphone, Android o Windows mobile.
Mobile-OTP es bastante sencillo y funciona de la siguiente manera:
- El cliente genera el valor de md5(PIN+SECRET+TIME)
- Envía el valor al servidor
- El servidor calcula el valor de md5(PIN+SECRET+TIME) en un intervalo de 3 minutos hacia atrás
- Si el valor suministrado por el cliente coincide con alguno de los generados por el servidor, la autenticación será positiva
Para instalarlo necesitamos dos cosas, un cliente para generar las contraseñas y el módulo PAM para el servidor.
Como cliente, podemos usar cualquiera de los disponibles para teléfonos móviles (interesante tener el generador de tokens en el móvil) o bien un sencillo cliente hecho en Javascript que podemos ejecutar en casi cualquier navegador (e instalarlo en nuestro servidor).
Para el servidor descargamos el módulo PAM desde aquí y lo compilamos de la forma habitual:
# make
Si todo ha ido bien (necesitarás pam-devel instalado en tu sistema) se habrá creado el fichero pam_mobile_otp.so que debemos copiar en /lib/security/
# cp pam_mobile_otp.so /lib/security/
Después de eso copiamos el fichero de configuración con el listado de usuarios + PIN + Token:
# cp motp.conf /etc/security/
Un ejemplo de fichero de configuración para tener acceso OTP para el usuario root sería el siguiente:
# cat /etc/security/motp.conf
root 1234567890abcdef 1234 0
Lo que significa que el PIN del usuario root es 1234 (el módulo PAM tiene una limitación de 4 caracteres en el PIN) y su semilla 1234567890abcdef. Estos datos deben ser cambiados en tu instalación.
Con esto hecho, procedemos a configurar el servicio SSH para que acepte esta nueva fórmula de autenticación editando /etc/pam.d/sshd dejándolo así:
#%PAM-1.0
auth sufficient /lib/security/pam_mobile_otp.so not_set_pass
password required /lib/security/pam_mobile_otp.so debug
account required /lib/security/pam_mobile_otp.so
auth required pam_sepermit.so
auth include system-auth
account required pam_nologin.so
account include system-auth
password include system-auth
# pam_selinux.so close should be the first session rule
session required pam_selinux.so close
session required pam_loginuid.so
# pam_selinux.so open should only be followed by sessions to be executed in the user context
session required pam_selinux.so open env_params
session optional pam_keyinit.so force revoke
session include system-auth
Con esta configuración seguimos aceptando autenticación 'normal' basada en contraseña mapeada en /etc/shadow y además passwords OTP. Si únicamente pretendemos aceptar contraseñas OTP podemos modificar /etc/pam.d/sshd
Una vez configurado el servidor, si volvemos a la pagina web generadora de contraseñas, podemos rellenar los campos
PIN --> 1234
Secret --> 1234567890abcdef
y nos dará como respuesta una contraseña temporal para acceder con el usuario root al sistema vía SSH.
Notas: Esta configuración ha sido probada en una Fedora Core 11. Es MUY IMPORTANTE que la hora del cliente y la del servidor estén sincronizadas, de lo contrario las contraseñas temporales NO funcionaran, asegúrate que el comando
# date +%s
devuelve valores parecidos en cliente y servidor
0 Response for the "Contraseñas de un solo uso en Linux"
Publicar un comentario