Ejemplo del módulo PAM que demuestra la autenticación de dos factores para iniciar sesión en servidores a través de SSH, OpenVPN, etc.
Este proyecto no se trata de iniciar sesión en Google, Facebook u otros sistemas TOTP/HOTP Second Factor, incluso si recomiendan usar las aplicaciones de Google Authenticator.
La contraseña única (HOTP) basada en HMAC se especifica en RFC 4226 y la contraseña única (TOTP) basada en el tiempo se especifica en RFC 6238.
./bootstrap.sh
./configure
make
sudo make installSi no tiene acceso a "sudo", debe convertirse manualmente en "root" antes de llamar a "hacer instalación".
Para mayor seguridad, asegúrese de que se soliciten contraseña y OTP incluso si la contraseña y/o OTP son incorrectas. Esto significa que al menos el primero de pam_unix.so (o cualquier otro módulo que se use para verificar contraseñas) y pam_google_authenticator.so Debe establecerse según required , no requisite . Probablemente no pueda estar de más que se required ambos, pero podría depender del resto de su configuración de PAM.
Si usa HOTP (contador basado en tiempo a base de tiempo), agregue la opción no_increment_hotp para asegurarse de que el contador no esté incrementado para los intentos fallidos.
Agregue esta línea a su archivo de configuración de PAM:
auth required pam_google_authenticator.so no_increment_hotp
Ejecute el binario de google-authenticator para crear una nueva clave secreta en su directorio de inicio. Estas configuraciones se almacenarán en ~/.google_authenticator .
Si su sistema admite la biblioteca "libqrencode", se le mostrará un Ccode QR que puede escanear utilizando la aplicación Android "Google Authenticator".
Si su sistema no tiene esta biblioteca, puede seguir la URL que emite google-authenticator , o debe ingresar manualmente la clave Secreta Alfanumérica en la aplicación Android "Google Authenticator".
En cualquier caso, después de haber agregado la tecla, haga clic y retenga hasta que lo muestre el menú contextual. Luego verifique que el valor de verificación de la clave coincida (esta característica podría no estar disponible en todas las compilaciones de la aplicación Android).
Cada vez que inicie sesión en su sistema, ahora se le solicitará su código TOTP (pase de tiempo basada en el tiempo) o HOTP (basado en contador), dependiendo de las opciones dadas al google-authenticator , después de haber ingresado su ID de usuario normal y su contraseña normal de la cuenta UNIX.
Durante el proceso inicial de implementación, puede encontrar que no todos los usuarios han creado una clave secreta todavía. Si aún desea que puedan iniciar sesión, puede pasar la opción "Nullok" en la línea de comando del módulo:
auth required pam_google_authenticator.so nullok
Si su sistema encripta los directorios de inicio hasta después de que sus usuarios ingresaron su contraseña, debe reorganizar las entradas en el archivo de configuración de PAM para descifrar el directorio de inicio antes de pedir el código OTP, o debe almacenar el archivo secreto en Una ubicación no estándar:
auth required pam_google_authenticator.so secret=/var/unencrypted-home/${USER}/.google_authenticator
sería una posible opción. Asegúrese de establecer los permisos apropiados. También debe decirle a sus usuarios que muevan manualmente su archivo .google_authenticator a esta ubicación.
Además de "$ {user}", la opción secret= también reconoce tanto "~" como ${HOME} como manos cortas para el directorio de inicio del usuario.
Al usar la opción secret= , es posible que también desee establecer la opción user= . Este último obliga al módulo PAM a cambiar a una ID de usuario codificada con codificación dedicada antes de realizar cualquier operación de archivo. Al usar la opción user= , no debe incluir "~" o "$ {home}" en el nombre de archivo.
La opción user= también puede ser útil si desea autenticar a los usuarios que no tienen cuentas UNIX tradicionales en su sistema.
Consulte "Directorios de inicio cifrados", arriba.
Anula el indicador de token predeterminado. Si desea incluir espacios en el aviso, envuelva todo el argumento en los soportes cuadrados:
auth required pam_google_authenticator.so [authtok_prompt=Your secret token: ]
Forzar el módulo PAM a cambiar a una ID de usuario codificada antes de realizar cualquier operación de archivo. Comúnmente usado con secret= .
¡Opción peligrosa!
De manera predeterminada, el módulo PAM requiere que el archivo Secrets sea propiedad del usuario iniciando sesión (o si user= se especifica, propiedad de ese usuario). Esta opción deshabilita esa verificación.
Esta opción se puede usar para permitir que los demonios que no se ejecuten como root aún manejen archivos de configuración que no son propiedad de ese usuario, por ejemplo, propiedad de los propios usuarios.
¡Opción peligrosa!
Por defecto, el módulo PAM requiere que el archivo de secretos sea legible solo por el propietario del archivo (modo 0600 de forma predeterminada). En situaciones en las que el módulo se usa en una configuración no defectuosa, un administrador puede necesitar más permisos de archivos indulgentes o una configuración específica para su caso de uso.
Habilite más mensajes de registro verboso en Syslog.
Algunos clientes de PAM no pueden solicitar al usuario más que solo la contraseña. Para resolver este problema, este módulo PAM admite el apilamiento. Si pasa la opción forward_pass , el módulo pam_google_authenticator consulta al usuario tanto para la contraseña del sistema como para el código de verificación en un solo mensaje. Luego reenvía la contraseña del sistema al siguiente módulo PAM, que deberá configurarse con la opción use_first_pass .
A su vez, el módulo pam_google_authenticator también admite las opciones estándar use_first_pass e try_first_pass . Pero la mayoría de los usuarios no necesitarían establecerlos en el pam_google_authenticator .
Si descubre que su código TOTP nunca funciona, este es más comúnmente el resultado de que el reloj en su servidor sea diferente al de su dispositivo Android. El módulo PAM hace un intento de compensar por el tiempo sesgado. Puede enseñarle sobre la cantidad de sesgo que está experimentando, tratando de registrarlo tres veces seguidas. Asegúrese de esperar siempre los 30 (pero no más), para que obtenga tres códigos TOTP distintos.
Algunos administradores prefieren que el tiempo se ajuste automáticamente, ya que hacerlo resulta en una configuración del sistema ligeramente menos segura. Si desea deshabilitarlo, puede hacerlo en la línea de comando del módulo:
auth required pam_google_authenticator.so noskewadj
No incrementa el contador para intentos hotp fallidos. Normalmente debe establecer esto, por lo que un atacante falló los intentos de contraseña sin un token, no bloquee al usuario autorizado.
Permita que los usuarios inicien sesión sin OTP, si aún no han configurado OTP.
PAM requiere al menos una respuesta SUCCESS de un módulo, y nullok hace que este módulo diga IGNORE . Esto significa que si se usa esta opción, al menos otro módulo debe haber dicho SUCCESS . Una forma de hacer esto es agregar auth required pam_permit.so al final de la configuración de PAM.
Por defecto, el módulo PAM no se hace eco del código de verificación cuando el usuario ingresa. En algunas situaciones, el administrador podría preferir un comportamiento diferente. Pase la opción echo_verification_code al módulo para habilitar el eco.
Si desea códigos de verificación basados en contrarrestar en lugar de tiempo, use el binario google-authenticator para generar una clave secreta en su directorio de inicio con la opción adecuada. En este modo, el sesgo del reloj es irrelevante y la opción Tamaño de la ventana ahora se aplica a cuántos códigos más allá de los actuales que se aceptarían, para reducir los problemas de sincronización.
Si está presente y no cero, proporcione un período de gracia durante el cual no se solicitará un segundo código de verificación. Intente establecer segundos a 86400 para permitir un día completo entre los códigos de solicitud; o 3600 por una hora.
Esto funciona agregando un par (de dirección IP, marca de tiempo) al archivo de seguridad después de un inicio de sesión exitoso de pasas única; Solo se rastrean las últimas diez direcciones IP distintas.
¡Opción peligrosa!
Con esta opción, un atacante con la capacidad de llenar el sistema de archivos (el servidor de inundaciones con solicitudes web, o si tiene una cuenta, simplemente llene el disco) puede forzar una situación en la que se puedan reutilizar las palabras únicas, derrotando el propósito de " una vez ".
Por defecto, si se define la opción grace_period , el módulo PAM requiere un espacio libre para almacenar la dirección IP y la marca de tiempo del último inicio de sesión. Podría evitar el acceso si un servidor no tiene espacio libre o en caso de un error de archivo de configuración de actualización. Con la opción allow_readonly , puede ignorar cualquier error que pueda ocurrir durante la actualización del archivo de configuración.