El módulo Yubico PAM proporciona una manera fácil de integrar YubiKey en su infraestructura de autenticación de usuario existente. PAM es utilizado por GNU/Linux, Solaris y Mac OS X para la autenticación de usuarios, y por otras aplicaciones especializadas como NCSA MyProxy.
El módulo funciona para sistemas multiusuario. El modo principal de operación es realizar una validación en línea utilizando un servicio de validación de YubiKey (como YubiCloud, o uno privado configurado usando el parámetro 'urllist').
En la versión 2.6, la validación fuera de línea también fue posible mediante el uso de HMAC-SHA1 Challenge-Response que se encuentra en YubiKey 2.2 y versiones posteriores. Esto ha introducido una dependencia de libykpers-1 del paquete ykpersonalize. Pase --without-cr
para configure
y evitar esta dependencia.
La comunidad de desarrollo se coordina a través de la página del proyecto GitHub.
El proyecto tiene una licencia BSD. Consulte el archivo COPIANDO para conocer la redacción exacta. Para cualquier rango de años de derechos de autor especificado como AAAA-ZZZZ en este paquete, tenga en cuenta que el rango especifica cada año en ese intervalo cerrado.
Pase a la siguiente sección si está utilizando una versión empaquetada oficial.
Puede consultar las fuentes usando Git con el siguiente comando:
$ git clon https://github.com/Yubico/yubico-pam.git
Esto creará el directorio yubico-pam
.
Se deben instalar Autoconf, automake, libtool, asciidoc, xsltproc y docbook-xsl para crear un árbol de fuentes compilable.
Genere el sistema de compilación usando:
$ cd yubico-pam $ autoreconf --instalar
Necesitará tener instalados libykclient (ykclient.h, libykclient.so) y libpam-dev (security/pam_appl.h, libpam.so). A su vez requiere cURL, que debes tener instalado, y libyubikey.
La autenticación fuera de línea Desafío-Respuesta requiere libykpers-1 del proyecto de personalización yubikey:
Las autopruebas requieren Perl con el módulo Net::LDAP::Server instalado.
El sistema de compilación utiliza Autoconf para configurar la ejecución del sistema de compilación:
./configurar
Utilice -- without-ldap para desactivar la compatibilidad con ldap.
Luego compila el código, ejecuta la autoprueba e instala los binarios:
hacer comprobar instalar
Ya existe un paquete en Fedora/EPEL de yubico-pam que se puede instalar usando yum:
$ sudo yum instalar pam_yubico
Existe un PPA (Archivo de paquetes personales) de Ubuntu para yubico-pam que se puede instalar usando los siguientes comandos en plataformas Ubuntu razonablemente modernas:
$ sudo add-apt-repository ppa:yubico/estable $ sudo apt-obtener actualización $ sudo apt-get install libpam-yubico
Consulte el archivo /usr/share/doc/libpam-yubico/README.Debian
después de la instalación.
yubico-pam y los paquetes Yubico compatibles tienen los correspondientes puertos FreeBSD. Para instalar:
$ cd /usr/puertos/seguridad/pam_yubico $ hacer la instalación limpia
Las notas de configuración avanzada están disponibles aquí.
Instálelo en su configuración PAM agregando una línea a un archivo apropiado en /etc/pam.d/
:
autenticación suficiente pam_yubico.so id=[Su ID de cliente API] depuración
y mueva pam_yubico.so a /lib/security/ (o dondequiera que se encuentren los módulos PAM en su sistema):
mv /usr/local/lib/security/pam_yubico.so /lib/security/
Para obtener más información, consulte la documentación del proyecto.
Los parámetros del módulo PAM admitidos son:
archivo de autenticación | Para indicar la ubicación del archivo que contiene las asignaciones de los ID de token de YubiKey a los nombres de usuario. |
identificación | Su ID de cliente API en el servidor de validación de Yubico. Si desea utilizar el servicio YubiCloud predeterminado, vaya aquí. |
llave | Para indicar su clave de cliente en formato base64. La clave del cliente también se conoce como clave API y proporciona integridad en la comunicación entre el cliente (usted) y el servidor de validación. Si desea obtener uno para usarlo con el servicio predeterminado YubiCloud, vaya aquí. |
depurar | para habilitar la salida de depuración. |
archivo_depuración | nombre de archivo para escribir la depuración, el archivo debe existir y ser un archivo normal. La salida estándar es la predeterminada. |
siempre bien | para permitir que todos los intentos de autenticación tengan éxito (también conocido como modo de presentación). |
try_first_pass | Antes de solicitar al usuario su contraseña, el módulo primero prueba la contraseña del módulo apilado anterior en caso de que también satisfaga este módulo. |
usar_primer_paso | El argumento use_first_pass obliga al módulo a utilizar una contraseña de módulos apilados previamente y nunca avisará al usuario; si no hay una contraseña disponible o la contraseña no es apropiada, se le negará el acceso al usuario. |
siempre_prompt | Si está configurado, no intente realizar una búsqueda para determinar si el usuario tiene una YubiKey configurada, sino que solicite una sin importar qué. Esto es útil en el caso en el que ldap_bind_as_user está habilitado pero este módulo se usa para leer la contraseña del usuario (en un escenario de autenticación YubiKey+OTP). |
nulo | Si se establece, no falla cuando no hay tokens declarados para el usuario en los archivos de asignación de autorización o en LDAP. Esto se puede utilizar para hacer que la autenticación YubiKey sea opcional a menos que el usuario tenga tokens asociados. |
ldap_starttls | Si está configurado, emita un comando STARTTLS a la conexión LDAP antes de intentar conectarse a ella. Esta es una configuración común para servidores que solo escuchan en el puerto 389 pero aún requieren TLS. |
ldap_bind_as_user | Si está configurado, utilice el usuario que inicia sesión para vincularse a LDAP. Esta utilizará la contraseña proporcionada por el usuario vía PAM. Si se establece esto, también se deben configurar ldapdn y uid_attr. Habilitar esto hará que se ignoren 'ldap_bind_user' y 'ldap_bind_password'. |
lista de URL | Lista de plantillas de URL que se utilizarán. Esto se establece llamando a ykclient_set_url_bases. La lista debe tener el formato: |
URL | Esta opción no debe utilizarse; utilice la opción urllist en su lugar. Especifique la plantilla de URL a utilizar, esto se establece llamando a yubikey_client_set_url_template, que por defecto es: |
capataz | especifique la ruta donde se almacenan los certificados X509. Esto es necesario si se utilizan 'https' o 'ldaps' en 'url' y 'ldap_uri' respectivamente. |
cainfo | Opción para permitir el uso de un paquete de CA en lugar de una ruta. |
apoderado | especifique un proxy para conectarse al servidor de validación. Los esquemas válidos son http://, https://, calcetines4://, calcetines4a://, calcetines5:// o calcetines5h://. Socks5h le pide al proxy que resuelva el DNS. Si no se especifica ningún esquema o puerto, se utilizará el puerto proxy HTTP 1080. |
detallado_otp | Este argumento se utiliza para mostrar la OTP (contraseña de un solo uso) cuando se ingresa, es decir, para habilitar el eco del terminal de los caracteres ingresados. Se recomienda no utilizar esto si está utilizando la autenticación de dos factores porque mostrará su contraseña en la pantalla. Esto requiere que el servicio utilice el módulo PAM para mostrar campos personalizados. Esta opción no se puede utilizar con OpenSSH. |
ldap_uri | especifique el URI del servidor LDAP (por ejemplo, ldap://localhost). |
servidor ldap | especifique el host del servidor LDAP (se utiliza el puerto LDAP predeterminado). En desuso. Utilice "ldap_uri" en su lugar. |
ldapdn | especifique el dn donde se almacenan los usuarios (por ejemplo: ou=usuarios,dc=dominio,dc=com). |
archivo ldap_clientcertfile | La ruta a un archivo de certificado de cliente que se utilizará al hablar con el servidor LDAP. Tenga en cuenta que esto también requiere que se configure 'ldap_clientkeyfile'. |
archivo ldap_clientkeyfile | La ruta a una clave que se utilizará con el certificado del cliente al hablar con el servidor LDAP. Tenga en cuenta que esto también requiere que se configure 'ldap_clientcertfile'. |
usuario_ldap_bind | El usuario como para intentar un enlace LDAP. |
contraseña_ldap_bind | La contraseña que se utilizará en el enlace LDAP. |
filtro_ldap | Un filtro LDAP que se utilizará para intentar encontrar el objeto correcto en LDAP. En esta cadena |
archivo ldap_cacert | Archivo de certificado CA para la conexión LDAP. |
atributo_usuario | especifique el atributo LDAP utilizado para almacenar nombres de usuario (por ejemplo: cn). |
yubi_attr | especifique el atributo LDAP utilizado para almacenar el ID de YubiKey. |
yubi_attr_prefix | especifique el prefijo del valor del atributo LDAP, en el caso de un atributo genérico, utilizado para almacenar varios tipos de ID. |
token_id_longitud | Longitud del ID que antepone la OTP (esto es 12 si se usa YubiCloud). |
modo | Modo de operación. Utilice "cliente" para la validación en línea con un servicio de validación de YubiKey como YubiCloud, o utilice "desafío-respuesta" para la validación fuera de línea utilizando YubiKeys con configuraciones de desafío-respuesta HMAC-SHA-1. Consulte la página de manual ykpamcfg(1) para obtener más detalles sobre cómo configurar la validación Desafío-Respuesta fuera de línea. |
ruta_chalresp | Directorio que se utiliza para almacenar los archivos de desafío en caso de una configuración de todo el sistema (a diferencia de los archivos de desafío que se almacenan en el directorio de inicio de un usuario). Esta ubicación solo debe ser legible y escribible por root. Consulte |
servidor_mysql | Nombre de host/Dirección del servidor MySQL que se utilizará para el mapeo. |
puerto_mysql | Puerto de red del servidor mysql. |
usuario_mysql | Usuario para acceder a la base de datos mysql. |
contraseña_mysql | Contraseña del usuario mysql. |
base de datos_mysql | La base de datos mysql a utilizar. |
Si está utilizando "depurar", puede resultarle útil crear un archivo de registro en el que se pueda escribir todo el mundo:
touch /var/run/pam-debug.log
chmod go+w /var/run/pam-debug.log
Nota | Recuerde que el acceso físico a los sistemas a menudo permite eludir los controles de seguridad. Si un atacante tiene acceso físico a su sistema (como una computadora portátil dejada en una habitación de hotel) y puede iniciar en modo de usuario único, puede desactivar yubico-pam en la configuración de su sistema. |
Se debe realizar una asignación entre el ID del token YubiKey y el ID de usuario al que está adjunto. Hay dos formas de hacer esto, ya sea de forma centralizada en un archivo o individualmente, donde los usuarios pueden crear la asignación en sus directorios de inicio. Si se utiliza el archivo de asignación de autorización central, no se utilizarán las asignaciones del directorio de inicio del usuario y se aplica lo contrario, si se utilizan las asignaciones del directorio de inicio del usuario, no se utilizará el archivo de asignaciones de autorización central.
Cree un /etc/yubikey_mappings
, el archivo debe contener un nombre de usuario y el ID del token de YubiKey separados por dos puntos (el mismo formato que el archivo passwd) para cada usuario que desee permitir el acceso al sistema mediante una YubiKey.
Las asignaciones deberían verse así, una por línea:
: : :…. : : :….
Ahora agregue authfile=/etc/yubikey_mappings
a su línea de configuración PAM, para que se vea así:
autenticación suficiente pam_yubico.so id=[Su ID de cliente API] authfile=/etc/yubikey_mappings
Cada usuario crea un archivo ~/.yubico/authorized_yubikeys
dentro de su directorio de inicio y coloca el mapeo en ese archivo, el archivo debe tener solo una línea:
: :
Este es prácticamente el mismo concepto que el archivo SSH autorizado_keys.
Puede obtener el ID del token YubiKey de varias formas. Una es eliminando los últimos 32 caracteres de cualquier OTP (contraseña de un solo uso) generada con su YubiKey. Otra es mediante el uso de la calculadora modhex.
Ingrese su OTP de YubiKey y conviértalo, su ID de token de YubiKey tiene 12 caracteres y aparece como:
Codificado Modhex: XXXXXXX
¿No estás seguro de lo que significa eso último? Aquí se explica cómo obtener una copia de su OTP.
abrir una terminal
Presione el botón de YubiKey. Generará una OTP en el shell:
$ cccccccgklgcvnkcvnnegrnhgrjkhlkfhdkclfncvlgj
bash: cccccccgklgcvnkcvnnegrnhgrjkhlkfhdkclfncvlgj: command not found
Esto se puede pegar en la página Modhex_Calculator.
Esto requiere que tengas el módulo pam habilitado con la opción 'depurar' activada. Cuando se le solicite la YubiKey, presione el botón. El módulo pam imprimirá información de depuración, incluida la OTP y la ID de su token en el shell; copie la ID en su archivo de configuración y estará listo y listo.
YubiKey para `tuusuario': [pam_yubico.c:pam_sm_authenticate(867)] conv devolvió 44 bytes [pam_yubico.c:pam_sm_authenticate(885)] Saltando los primeros 0 bytes. La longitud es 44, token_id se establece en 12 y el token OTP siempre es 32. [pam_yubico.c:pam_sm_authenticate(892)] OTP: ccccccclabcabkhbdncicglfltnukadfoifadfhhhhfe ID: cccccclabcab
Los usuarios con SELinux en modo obligatorio (el valor predeterminado en Fedora 17+) pueden experimentar problemas de inicio de sesión con servicios, incluidos aquellos validados a través de polkit-agent-helper-1, sshd e inicio de sesión.
Esto está documentado en Red Hat bugzilla, incluida una solución alternativa para ssh (se podrían crear archivos equivalentes para otros servicios). Los sistemas en modo "permisivo" generarán advertencias AVC pero la autenticación se realizará correctamente.
Para determinar si SELinux aplica o no, ejecute el comando sestatus
.
Si desea utilizar YubiKey para autenticarse en los inicios de sesión de la consola Linux, agregue lo siguiente en la parte superior de /etc/pam.d/login
:
autenticación suficiente pam_yubico.so id=[Su ID de cliente API] depuración
Consulte las extensiones de esquema de Active Directory de muestra de Michael Ludvig para el almacenamiento/asociación de atributos de ID públicos de YubiKey con una cuenta de usuario particular: https://github.com/mludvig/yubikey-ldap/tree/master/microsoft-schema
crear el archivo '/etc/pam.d/openvpn':
se requiere autenticación pam_yubico.so ldap_uri=ldap://contoso.com id de depuración=[Su ID de API] yubi_attr=YubiKeyID ldapdn=DC=contoso,DC=com ldap_filter=(&(sAMAccountName=%u)(objectClass=usuario)(memberOf=CN=somegroup,DC=contoso,DC=com)) [ldap_bind_user=CN=binduser,OU=Cuentas de servicio,DC=contoso,DC=com] ldap_bind_password=bind_password try_first_pass cuenta requerida pam_yubico.so
crear el archivo 'openvpn.conf'
complemento openvpn-plugin-auth-pam.so openvpn