54 votes

Comment puis-je m'authentifier avec LDAP via la ligne de commande ?

Le serveur LDAP est hébergé sur Solaris. Le client est sous CentOS. L'authentification OpenLDAP/NSLCD/SSH via LDAP fonctionne bien, mais je ne suis pas en mesure d'utiliser les commandes ldapsearch pour déboguer les problèmes 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 ~]#

J'ai essayé de m'authentifier avec un certificat via ldapsearch en donnant /etc/openldap/cacerts/cacert.pem comme paramètre, mais il n'a pas accepté ce certificat pour l'authentification.

80voto

user127243 Points 21

Vous pouvez désactiver SASL et utiliser une authentification simple avec l'option "-x". Par exemple, une recherche pour trouver un utilisateur particulier

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'

Trouvera "test-user" par

  • -D - Utiliser l'utilisateur bind "search-user"
  • -W - Demande de mot de passe
  • -H - URL du serveur LDAP. Non-SSL dans ce cas ; utilisez "ldaps://" pour SSL.
  • -b - La base de recherche
  • -s - Champ de recherche - c'est-à-dire base pour la base de l'arbre, un pour le niveau inférieur et sous pour une recherche récursive dans l'arbre (peut prendre un certain temps)
  • Enfin, le filtre de recherche est un argument non optionnel. Dans ce cas, nous rechercherons l'uid de "test-user"

8voto

gavenkoa Points 632

Il semble que je pose la même question à plusieurs reprises : https://stackoverflow.com/questions/27571558/how-was-authentication-built-on-ldap

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

  • Obtenir une connexion au serveur LDAP.
  • Se lier en tant qu'utilisateur de l'application.
  • Recherche du DN (distinguished name) de l'utilisateur à authentifier.
  • Lier en tant qu'utilisateur à authentifier en utilisant le DN de l'étape 3.

Cela peut se résumer comme suit (expérience en ligne de commande) :

$ 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"

5voto

turiyag Points 141

Remarque : si vous ne connaissez pas votre DN de liaison complet, vous pouvez également utiliser votre nom d'utilisateur normal ou votre adresse électronique avec l'option -U

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

5voto

nex3 Points 4309

Nous utilisons FreeIPA/IDM et j'ai pu m'authentifier en utilisant le code suivant :

$ 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>

Explication

  • Cela renverra tous les détails concernant le uid=<my username>
  • uid=<my username> est le filtre (filtre de recherche LDAP conforme à la RFC 4515)
  • Les uid=<my username> est la requête/le filtre à effectuer
  • o ldif-wrap=no désactive l'enveloppement des résultats
  • Les -W forces ldapsearch pour demander le mot de passe du nom distingué bind uid=<my username>,cn=users,cn=accounts,dc=somedcdom,dc=com
  • Lorsque l'on demande le mot de passe de cet utilisateur, l'invite se présente comme suit :

    Enter LDAP Password:

Références

Pour référence à la ldapsearch page de manuel et aide 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)

Exemple complet

$ 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

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X