¿Cómo me autentico con LDAP a través de la línea de comando?


35

El servidor LDAP está alojado en Solaris. El cliente es CentOS. La autenticación OpenLDAP / NSLCD / SSH a través de LDAP funciona bien, pero no puedo usar los comandos ldapsearch para depurar problemas LDAP.

[root@tst-01 ~]# ldapsearch
SASL/EXTERNAL authentication started
ldap_sasl_interactive_bind_s: Unknown authentication method (-6)
        additional info: SASL(-4): no mechanism available:
[root@tst-01 ~]# cat /etc/openldap/ldap.conf
TLS_CACERTDIR /etc/openldap/cacerts
URI ldap://ldap1.tst.domain.tld ldap://ldap2.tst.domain.tld
BASE dc=tst,dc=domain,dc=tld
[root@tst-01 ~]# ls -al /etc/openldap/cacerts
total 12
drwxr-xr-x. 2 root root 4096 Jun  6 10:31 .
drwxr-xr-x. 3 root root 4096 Jun 10 10:12 ..
-rw-r--r--. 1 root root  895 Jun  6 10:01 cacert.pem
lrwxrwxrwx. 1 root root   10 Jun  6 10:31 cf848aa4.0 -> cacert.pem
[root@tst-01 ~]#

He intentado la autenticación con un certificado a través de ldapsearch dando /etc/openldap/cacerts/cacert.pem como parámetro, pero no aceptó este certificado para la autenticación.

Respuestas:


60

Es posible que desee desactivar SASL y usar autenticación simple con la opción "-x". Por ejemplo, una búsqueda para encontrar un usuario en particular

ldapsearch -x -D "uid=search-user,ou=People,dc=example,dc=com" \
           -W -H ldap://ldap.example.com -b "ou=People,dc=example,dc=com" \
           -s sub 'uid=test-user'

Encontrará "test-user" por

  • -D : utiliza el usuario de enlace "usuario de búsqueda"
  • -W - Solicitud de contraseña
  • -H : URL del servidor LDAP. No SSL en este caso; use "ldaps: //" para SSL
  • -b - La base de búsqueda
  • -s - Alcance de búsqueda - es decir, base para la base del árbol, una para bajar de nivel y sub para buscar recursivamente en el árbol (puede llevar un tiempo)
  • Finalmente el filtro de búsqueda como argumento sin opción. En este caso, buscaremos el uid de "test-user"

2
Fred tiene razón, excepto que no necesita especificar la base de búsqueda o el host si está satisfecho con los especificados, /etc/openldap/ldap.confes decir, lo siguiente probablemente debería funcionar: ldapsearch -x -D "<bind dn>" -W <query >
Jason Tan

¿Cómo especificamos el nombre de usuario para el inicio de sesión ldap?
myloginid

Depende de lo que quieras decir con "nombre de usuario". El DN de enlace (para autenticar para ejecutar realmente la consulta) viene dado por el argumento -D. La búsqueda real, en este ejemplo para un registro de usuario, se da en el filtro como último argumento.
Fred Clausen

1
¡muchas gracias! me salvaste la vida :)
Marslo

6

Parece que hago la misma pregunta en: https://stackoverflow.com/questions/27571558/how-was-authentication-built-on-ldap

Ver http://thecarlhall.wordpress.com/2011/01/04/ldap-authentication-authorization-dissected-and-digested/ :

  • Obtenga una conexión con el servidor LDAP.
  • Enlace como el usuario de la aplicación.
  • Busque el DN (nombre distinguido) del usuario que se autenticará.
  • Enlace como usuario para autenticarse utilizando DN del paso 3.

Eso se puede resumir como (experimento en línea de comando):

$ ldapsearch -x -h ldap.company.com -s sub -b 'dc=europe,dc=com' "uid=XYZ"
....
dn: uid=XYZ,dc=sales,dc=europe,dc=com
...
$ ldapsearch -W -h ldap.company.com -D 'uid=XYZ,dc=sales,dc=europe,dc=com' \
    -s sub -b 'dc=europe,dc=com' "uid=XYZ"

1

Tenga en cuenta que si no conoce su DN de enlace completo, también puede usar su nombre de usuario normal o correo electrónico con -U

ldapsearch -v -h contoso.com -U turiya.gouw@contoso.com -w 'MY_PASSWORD' -b 'DC=contoso,DC=com' '(objectClass=computer)'

0

Estamos usando FreeIPA / IDM y pude autenticarme contra esto usando lo siguiente:

$ ldapsearch -h idm-01a.somednsdom.com \
    -D 'uid=<my username>,cn=users,cn=accounts,dc=somedcdom,dc=com' \
    -o ldif-wrap=no \
    -b 'cn=accounts,dc=somedcdom,dc=com' \
    -W uid=<my username>
Explicación
  • Esto devolverá todos los detalles alrededor del uid=<my username>
  • uid=<my username> es el filtro (filtro de búsqueda LDAP compatible con RFC 4515)
  • El uid=<my username>es la consulta / filtro a realizar
  • o ldif-wrap=no deshabilita la envoltura de resultados
  • Las -Wfuerzas ldapsearchpara consultar la contraseña para el nombre distinguido de enlaceuid=<my username>,cn=users,cn=accounts,dc=somedcdom,dc=com
  • Cuando se le solicite la contraseña para este usuario, la solicitud se verá así:

    Enter LDAP Password:
    
Referencias

Para referencia de la página de ldapsearchmanual y la ayuda de CLI:

   -D binddn
          Use the Distinguished Name binddn to bind to the LDAP directory.  
          For SASL binds, the server is expected to ignore this value.

   -b searchbase
          Use searchbase as the starting point for the search instead of the 
          default.

   -W     Prompt for simple authentication.  This is used instead of specifying 
          the password on the command line.

  -o <opt>[=<optparam] general options
             nettimeout=<timeout> (in seconds, or "none" or "max")
             ldif-wrap=<width> (in columns, or "no" for no wrapping)

Ejemplo completo

$ ldapsearch -h idm-01a.somednsdom.com \
    -D 'uid=joeuser,cn=users,cn=accounts,dc=somedcdom,dc=com' \
    -o ldif-wrap=no \
    -b 'cn=accounts,dc=somedcdom,dc=com' \
    -W uid=joeuser

# extended LDIF
#
# LDAPv3
# base <cn=accounts,dc=somedcdom,dc=com> with scope subtree
# filter: uid=joeuser
# requesting: ALL
#

# joeuser, users, accounts, somedcdom.com
dn: uid=joeuser,cn=users,cn=accounts,dc=somedcdom,dc=com
memberOf: cn=ipausers,cn=groups,cn=accounts,dc=somedcdom,dc=com
memberOf: cn=sysadmin,cn=groups,cn=accounts,dc=somedcdom,dc=com
memberOf: ipaUniqueID=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXXXXXX,cn=sudorules,cn=sudo,dc=somedcdom,dc=com
memberOf: cn=eng-systems,cn=groups,cn=accounts,dc=somedcdom,dc=com
memberOf: ipaUniqueID=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXXXXXX,cn=hbac,dc=somedcdom,dc=com
memberOf: cn=admins,cn=groups,cn=accounts,dc=somedcdom,dc=com
memberOf: ipaUniqueID=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXXXXXX,cn=sudorules,cn=sudo,dc=somedcdom,dc=com
memberOf: cn=User Administrator,cn=roles,cn=accounts,dc=somedcdom,dc=com
memberOf: cn=User Administrators,cn=privileges,cn=pbac,dc=somedcdom,dc=com
memberOf: cn=System: Add User to default group,cn=permissions,cn=pbac,dc=somedcdom,dc=com
...
...
krbLoginFailedCount: 0
krbLastFailedAuth: 20190320223946Z
loginShell: /bin/bash
krbExtraData:: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
krbPasswordExpiration: 20190829144625Z
krbLastPwdChange: 20190302144625Z
krbLastAdminUnlock: 20190111080021Z
ipaSshPubKey: ssh-rsa A....XXXXXXXXXXXX...jelByox0PM5Q== joeuser@somednsdom.com
mepManagedEntry: cn=joeuser,cn=groups,cn=accounts,dc=somedcdom,dc=com
displayName: Joe User
uid: joeuser
krbCanonicalName: joeuser@SOMEDCDOM.COM
objectClass: top
objectClass: person
objectClass: organizationalperson
objectClass: inetorgperson
objectClass: inetuser
objectClass: posixaccount
objectClass: krbprincipalaux
objectClass: krbticketpolicyaux
objectClass: ipaobject
objectClass: ipasshuser
objectClass: ipaSshGroupOfPubKeys
objectClass: mepOriginEntry
initials: JU
gecos: Joe User
sn: Mingolelli
homeDirectory: /home/joeuser
mail: joeuser@somednsdom.com
krbPrincipalName: joeuser@SOMEDCDOM.COM
givenName: Joe
cn: Joe User
ipaUniqueID: XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
uidNumber: 900000000
gidNumber: 900000000
krbPwdPolicyReference: cn=admins,cn=SOMEDCDOM.COM,cn=kerberos,dc=somedcdom,dc=com

# search result
search: 2
result: 0 Success

# numResponses: 2
# numEntries: 1
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.