Come posso autenticarmi con LDAP tramite la riga di comando?


35

Il server LDAP è ospitato su Solaris. Il client è CentOS. L'autenticazione OpenLDAP / NSLCD / SSH tramite LDAP funziona correttamente, ma non sono in grado di utilizzare i comandi ldapsearch per eseguire il debug dei problemi 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 ~]#

Ho provato l'autenticazione con un certificato tramite ldapsearch fornendo /etc/openldap/cacerts/cacert.pem come parametro, ma non ha accettato questo certificato per l'autenticazione.

Risposte:


60

Si consiglia di disattivare SASL e utilizzare l'autenticazione semplice con l'opzione "-x". Ad esempio, una ricerca per trovare un determinato utente

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'

Troverà "test-user" di

  • -D - Usa l'utente "cerca-utente" associato
  • -W - Richiedi password
  • -H - URL del server LDAP. Non SSL in questo caso; usa "ldaps: //" per SSL
  • -b - La base di ricerca
  • -s - Ambito di ricerca - ovvero base per la base dell'albero, una per il livello inferiore e sub per la ricerca ricorsiva lungo l'albero (può richiedere del tempo)
  • Finalmente il filtro di ricerca come argomento non opzionale. In questo caso cercheremo l'utente di "test-user"

2
Fred ha ragione, tranne per il fatto che non è necessario specificare la base di ricerca o l'host se si è soddisfatti con quelli specificati, /etc/openldap/ldap.confvale a dire che probabilmente dovrebbe funzionare: ldapsearch -x -D "<bind dn>" -W <query >
Jason Tan,

Come possiamo specificare il nome utente per ldap login
myloginid

Dipende da cosa intendi per "nome utente". Il DN di bind (per l'autenticazione per eseguire effettivamente la query) è dato dall'argomento -D. La ricerca effettiva, in questo esempio per un record utente, viene fornita nel filtro come ultimo argomento.
Fred Clausen,

1
grazie molto! mi hai salvato la vita :)
Marslo,

6

Sembra che io faccia la stessa domanda a: https://stackoverflow.com/questions/27571558/how-was-authentication-built-on-ldap

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

  • Ottieni una connessione al server LDAP.
  • Associare come utente dell'applicazione.
  • Cerca il DN (nome distinto) dell'utente da autenticare.
  • Associare come utente per l'autenticazione utilizzando DN dal passaggio 3.

Ciò può essere sintetizzato come (esperimento nella riga di 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

Nota, se non conosci il DN di bind completo, puoi anche utilizzare semplicemente il tuo nome utente o e-mail normale -U

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

0

Stiamo usando FreeIPA / IDM e sono stato in grado di autenticarmi contro questo usando quanto segue:

$ 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>
Spiegazione
  • Questo restituirà tutti i dettagli intorno al uid=<my username>
  • uid=<my username> è il filtro (filtro di ricerca LDAP conforme a RFC 4515)
  • Il uid=<my username>è l'interrogazione / filtro di eseguire
  • o ldif-wrap=no disabilita il wrapping dei risultati
  • Le -Wforze ldapsearchper richiedere la password per il nome distinto di binduid=<my username>,cn=users,cn=accounts,dc=somedcdom,dc=com
  • Quando viene richiesta la password per questo utente, il prompt sarà simile al seguente:

    Enter LDAP Password:
    
Refereneces

Per riferimento dalla ldapsearchmanpage e dalla guida della 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)

Esempio 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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.