Cómo probar ldap que se autentica con kerberos

2

Quiero probar un directorio ldap con ldapsearch . No se almacenan contraseñas en el directorio LDAP. Las contraseñas de las cuentas se almacenan en Kerberos y LDAP contiene un puntero al principal de Kerberos. El ldap tiene un atributo userPassword

Attribute Name: 'userPassword'
OID:    2.5.4.35
URN:    urn:oid:2.5.4.35
Multiple Values:    Multi-valued (treated as Single-valued) 

Intenté buscar un usuario con el comando

$ ldapsearch -vvv -x -D 'cn=xxxxxx,ou=xxx,dc=xxxx,dc=xxx' -h 'xxxxxxxx.xxxx.xxx' -W
ldap_initialize( ldap://xxxxxxxx.xxxx.xxx )
Enter LDAP Password:
ldap_bind: Invalid credentials (49)

Parece que el servidor ldap no puede obtener la credencial ya que, por sí mismo, no almacena las contraseñas. ¿Se puede hacer la búsqueda en estas circunstancias? ¿Cómo autenticar inicios de sesión usando ldap a través de kerberos?

    
pregunta user2196452 11.08.2014 - 05:42
fuente

1 respuesta

2

Aquí hay dos posibles métodos de autenticación:

  1. Kerberos "falso", donde el servidor LDAP recibe una contraseña simple y la comprueba al intentar obtener un TGT con esa contraseña. Para que esto funcione con OpenLDAP, necesita:

    • El atributo userPassword debe establecerse en el valor especial {SASL}user@REALM (con el principal real de Kerberos, por supuesto). El texto después de {SASL} es el nombre de usuario que OpenLDAP le dará a libsasl, junto con la contraseña recibida.

    • libsasl debe configurarse para usar saslauthd como el mecanismo de verificación de contraseña, colocando lo siguiente en /usr/lib/sasl2/slapd.conf :

      pwcheck_method: saslauthd
      

      Y otra línea para hacer que ofrezca el mecanismo SASL PLAIN:

      mech_list: plain
      
    • En el mismo servidor, el demonio saslauthd debe estar ejecutándose (es parte de libsasl; generalmente el paquete "cyrus-sasl" o "sasl2-bin"). Este demonio realiza la verificación de la contraseña real en nombre de OpenLDAP u otros servidores.

    • El daemon saslauthd también debe configurarse para usar Kerberos 5 usando ‑a kerberos5 como opción de línea de comandos.

    Con esto, debería poder usar su contraseña de Kerberos con un enlace simple ( ldapsearch ‑x ‑D ... ‑W ) o un enlace PLAIN SASL ( ldapsearch ‑Y PLAIN ). Sin embargo, sigue siendo "falso", ya que no aprovecha las características de Kerberos para proteger la contraseña a través de la red.

  2. Kerberos "reales", donde el servidor LDAP recibe un ticket de Kerberos y lo compara con la tabla de teclas local, sin tener que revelar la contraseña. Para que esto funcione con OpenLDAP, necesita:

    • La tabla de claves del sistema debe tener claves para el ldap/fqdn@REALM principal, donde fqdn debe coincidir con el DNS inverso de la dirección IP del servidor. Puede usar el comando ktadd en kadmin para extraer claves en un keytab.

    • La clave también debe ser accesible para OpenLDAP (generalmente la cuenta ldap o slapd ). (Si es necesario, puede usar un archivo de tabla de claves separado del sistema uno; en este caso, OpenLDAP debe tener la variable de entorno $KRB5_KTNAME que apunta a la tabla de claves dedicada.)

    • libsasl en el servidor debe configurarse para ofrecer los mecanismos GSSAPI y / o GS2-KRB5. Este suele ser el valor predeterminado, pero podría poner lo siguiente en /usr/lib/sasl2/slapd.conf :

      mech_list: gs2-krb5 gssapi plain
      

      Dado que no hay comprobación de contraseña en el servidor, saslauthd es opcional.

    Con esto, debería poder kinit en un cliente, y usar el ticket obtenido con el enlace SASL GSSAPI ( ldapsearch -Y GS2-KRB5 o ldapsearch -Y GSSAPI ).

respondido por el grawity 06.10.2014 - 13:31
fuente

Lea otras preguntas en las etiquetas