Benutzerliste aus LDAP/ActiveDirectory erstellen

Mittels python lassen sich Benutzer aus einem LDAP-Verzeichnis (bzw. ActiveDirectory) einfach auslesen und formatiert ausgeben:

#!/usr/bin/python
 
# import ldap module
import sys, ldap
 
# Define the name to search
searchstring="*"
 
# connection settings
ldap_url = "ldap://localhost"
binddn = "CN=LDAP User,OU=User Accounts,DC=example,DC=org"
pw = "secret"
 
# Search settings
basedn = "OU=User Accounts,DC=ad,DC=example,DC=net"
searchFilter = "(&(cn={searchstring}))".format (searchstring=searchstring)
searchAttribute = ['cn', 'sAMAccountName', 'displayName', 'mail']
searchScope = ldap.SCOPE_SUBTREE
 
# bind to the server
l = ldap.initialize(ldap_url)
try:
  l.simple_bind_s(binddn, pw)
except ldap.INVALID_CREDENTIALS:
  print "Your username or password is incorrect."
  sys.exit(0)
except ldap.LDAPError, e:
  if type(e.message) == dict and e.message.has_key('desc'):
    print e.message['desc']
  else:
    print e
  sys.exit(0)
 
# query LDAP
try:
  resultId = l.search(basedn, searchScope, searchFilter, searchAttribute)
  result_type, result_data = l.result(resultId)
 
  for ldap_dn,ldapuser in result_data:
    print ldap_dn
    #print ('username={ldap_sAMAccountName},)
    print ('username={ldap_sAMAccountName}\ndisplayName={ldap_displayName}\nmail={ldap_mail}\n\n').format (ldap_sAMAccountName = ldapuser['sAMAccountName'][0], ldap_displayName = ldapuser['displayName'][0], ldap_mail = ldapuser['mail'][0],)
 
except ldap.LDAPError, e:
  print e
 
# close connection
l.unbind_s()

Die Parameter unter „connection settings“ sind:

searchstring Der Name nach dem gesucht wird
ldap_url Die Adresse vom LDAP-Server
binddn Die DN vom Benutzer, welcher sich am LDAP-Server anmeldet (i.dR. ein „read-only“ user)
pw Passwort für den oben genannten Benutzer
basedn Fange ab hier mit der Suche an; das kann der root Pfad sein, besser ist es aber aber einen Pfad mit den aktiven Accounts einzuschränken, damit deaktivierte Benutzer nicht drin sind
searchFilter Das LDAP-Suchmuster; anstelle von „givenName“ kann beispielsweise auch „cn“ oder „displayName“ sein
searchScope Hier wird definiert ob nur im aktuellen LDAP-Zweig oder rekursiv gesucht wird

 

Published by

Steven Varco

Steven ist ein Redhat RHCE-Zertifizierter Linux-Crack und ist seit über 20 Jahren sowohl beruflich wie auch privat auf Linux spezialisiert. In seinem Keller steht ein Server Rack mit diversen ESX und Linux Servern.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.