Ändern des Active Directory-Benutzerkennworts in Python 3.x
Ich versuche, ein Python-Skript zu erstellen, das eine LDAP-Verbindung zu einem Server mit AD herstellt, einen Sucheintrag (in diesem Fall einen Namen) erstellt, nach diesem Eintrag sucht und das Kennwort des Benutzers in ein zufällig generiertes Kennwort ändert Aktivieren Sie die Option zum Ändern des Kennworts bei der Anmeldung und senden Sie ihnen anschließend eine automatisierte sichere E-Mail mit dem neuen temporären Kennwort.
Bisher konnte ich eine Verbindung zum Server herstellen und nach einem einzelnen DN suchen, der zurückgibt. Das temporäre Kennwort wird generiert und eine E-Mail wird gesendet (obwohl das Kennwort nicht gehasht wurde und die E-Mail noch nicht sicher ist). Ich kann jedoch keine Informationen darüber finden, wohin ich von hier aus gehen soll.
Ich habe gefunden Windows-Benutzerpasswort mit python @ ände Ich sehe jedoch, dass dies mit AD nicht gut funktioniert, und das andere LDAP in der Python-Dokumentation, das ich gefunden habe, scheint von 2.x veraltet zu sein und funktioniert nicht mehr. Die Dokumentation zu ldap3 https: //media.readthedocs.org/pdf/ldap3/stable/ldap3.pd) scheint auch nicht wirklich etwas dafür zu erwähnen, und erschöpfendes Googeln war erfolglos. Ich bin neu in dieser Art des Programmierens und habe bisher nur geringe oder akademische Kenntnisse. Das war ein bisschen frustrierend, aber Python ist meine stärkste Sprache.
---------------- BEARBEITETER CODE FÜR AKTUELLEN STATUS -----------------------
#Takes input for name which will be used for search criterion
zid = input("ZID: ")
zid = str(zid).lower()
print(zid)
#Binds session to the server and opens a connection
try:
server = ldap3.Server('ldap://<IP_Address>', get_info=all)
conn = ldap3.Connection(server, '%[email protected]' %zid, password = "<something>", auto_bind=True)
print("Successfully bound to server.\n")
except:
print("Unsucessful initialization of <IP_Address>")
try:
server = ldap3.Server('ldap://<IP_Address>', get_info=all)
conn = ldap3.Connection(server, '%[email protected]' %zid, password = "<something>", auto_bind=True)
print("Successfully bound to server.\n")
except:
print("Unsucessful initialization of <IP_Address>")
try:
server = ldap3.Server('ldap://<IP_Address>', get_info=all)
conn = ldap3.Connection(server, '%[email protected]', password = "<something>", auto_bind=True) %zid
print("Successfully bound to server.\n")
except:
print("Unsucessful initialization of <IP_Address>")
sys.exit(0)
#Searches and prints LDAP entries
try:
base_dn = 'DC=<something>,DC=<something>,DC=<something>,DC=<something>,DC=com'
zid_filter = '(sAMAccountName=%s)' %zid
conn.search(base_dn, zid_filter, attributes=['mail'])
#i.e. "DN: CN=<First Last>,OU=<something>, DC= <something>
user_dn = str(conn.entries)
#i.e. "CN=<First Last>"
front = user_dn.find('C')
back = user_dn.find(',')
user_cn = user_dn[front:back]
#i.e. "<First Last>"
display_name = user_cn[3:]
#i.e. "first.last@<something>.com"
raw_email = str(conn.entries)
front = raw_email.find('mail: ')
back = raw_email.find('@<something>.com')
user_email = raw_email[front + 6:back] + '@<something>.com'
except:
print("Could not search entries")
#Generates random 12 digit alpha-numeric password
try:
new_password = ''.join(random.SystemRandom().choice(string.ascii_letters + string.digits) for _ in range(12))
print(new_password)
print("New password successfully generated")
except:
print("New password could not be generated")
#Set and replace AD Password
try:
conn.extend.microsoft.modify_password(user_dn, None, new_password)
print ("Active Directory password was set successfully!")
except:
print('Error setting AD password')
sys.exit(0)
Haben Sie Vorschläge, wie Sie das Benutzerkennwort und das Kennwort aus Sicherheitsgründen während dieser ganzen Tortur abrufen / festlegen können? Ich kann mir vorstellen, dass ich für die E-Mail die Verwendung von HTTPS erzwingen kann, und das wäre ausreichend, aber die Verbindung zum Server, die das neue_Kennwort weitergibt, möchte ich sichern.