Ich untersuche das Scripting von verschiedenen LDAP-Operationen. Allerdings habe ich bei der Active Directory-Benutzererstellung eine kleine Geschwindigkeitsschwelle erreicht.Ändern von Active Directory Passwörtern über ldapmodify
Die folgende LDIF schlägt fehl, wenn ich es über den ldapmodify
Befehl laden in:
dn: CN=Frank,CN=Users,DC=domain,dc=local
changeType: add
objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: user
cn: Frank
userPrincipalName: [email protected]
sAMAccountName: frank
givenName: Frank
sn: Stein
displayName: Frank Stein
description: Frankenstein's User
userAccountControl: 512
unicodePwd: "AnExamplePassword1!"
Wenn der Benutzer über LDIF hinzuzufügen versucht, habe ich den folgenden Befehl ein:
ldapmodify -H 'ldaps://<ip-of-server>:636' -D 'DOMAIN\Administrator' -x -W -f frank-add.ldif
Dies scheitert mit der folgende Fehler:
ldap_add: Server is unwilling to perform (53)
additional info: 0000001F: SvcErr: DSID-031A120C, problem 5003 (WILL_NOT_PERFORM), data 0
Das ist ein Problem mit dem Kennwort po Verweigern den Benutzer.
jedoch der folgende Python-Skript funktioniert:
#!/usr/bin/python
import ldap
import ldap.modlist as modlist
AD_LDAP_URL='ldaps://<ip-of-server>:636'
ADMIN_USER='DOMAIN\Administrator'
# User must be authorized to create accounts, naturally.
ADMIN_PASSWORD='password for ADMIN_USER'
BASE_DN='dc=domain,dc=local'
username='frank'
firstname='Frank'
surname='Stein'
displayName = "Frank Stein"
password='AnExamplePassword1!'
# The value of password still needs to adhere to the domain's password policy.
unicode_pass = unicode('\"' + password + '\"', 'iso-8859-1')
password_value = unicode_pass.encode('utf-16-le')
l = ldap.initialize(AD_LDAP_URL)
l.simple_bind_s(ADMIN_USER, ADMIN_PASSWORD)
dn=str('CN=%s,CN=Users,DC=domain,dc=local' % firstname)
attrs = {}
attrs['objectclass'] = ['top','person','organizationalPerson','user']
attrs['cn'] = str(username)
attrs['sAMAccountname'] = str(username)
attrs['unicodePwd'] = str(password_value)
attrs['givenName'] = str(firstname)
attrs['sn'] = str(surname)
attrs['displayName'] = str(displayName)
attrs['description'] = str("Frankenstein's User")
attrs['userPrincipalName'] = str("%[email protected]" % username)
attrs['userAccountControl'] = str(512)
ldif = modlist.addModlist(attrs)
l.add_s(dn,ldif)
den Python-Skript verwenden, bin ich sofort in der Lage des Kennwort des Benutzers bei der Verwendung (minus die Anführungszeichen, die entronnen waren) zu unterzeichnen. Ich kann immer noch den gleichen "Unwillig zu machen" -Fehler auslösen, indem ich ein Passwort wie "Passwort" auswähle, das zu einfach ist. In diesem Fall ist das verwendete Passwort jedoch identisch.
Soweit ich sehen kann, sollten die Operationen identisch sein. Der Unterschied, der die LDIF-Datei unterbricht, ist die Art und Weise, wie ich mit den Anführungszeichen verfahren muss. Die Erstellung über LDIF ist erfolgreich, wenn ich einen deaktivierten Account durch Setzen des Wertes von userAccountControl auf 544 und ohne ein Passwort einstelle. Dies bedeutet jedoch, dass ich das Passwort des Benutzers manuell zurücksetzen müsste.
Bisher habe ich folgende Passwort-Formate über LDIF versucht:
- ohne Anführungszeichen.
- Einfache Anführungszeichen.
- Entkommen Zitate über \
- Entkommen Zitate über ASCII: {\ 22}
- Verwendung von Python zu Base64-codieren das Passwort (mit und ohne Anführungszeichen, und mit dem Format des LDIF zu
unicodePwd::
modifiziert)
Während ich glücklich bin, dass ich eine funktionierende Methode des Hinzufügens von Benutzern über die Python habe, bin ich immer noch ein wenig verwirrt darüber, wie Passwörter bei der Verwendung von LDIF-Dateien und ldapmodify
richtig zu entkommen. Gibt es eine alternative Methode, die ich nicht in Betracht ziehe?
Ich habe versucht, das Passwort mit Anführungszeichen zu kodieren, aber meine Methode für die Codierung muss ausgeschaltet sein. Ich habe versucht, mein Passwort in Python mit 'base64.b64encode (Unicode (" AnExamplePassword1! "))' 'Zu verschlüsseln, was' IkFuRXhhbXBsZVBhc3N3b3JkMSEi' ergab. Ich konnte den Benutzer über LDIF mit Ihrer Version des Passworts erfolgreich hinzufügen. – Gadgeteering
Ich konnte den Wert von unicodePwd generieren, indem ich die Methode des Python-Skripts zur genaueren Passwortgenerierung befolge. Ich nahm etwas von der Zeichencodierung als selbstverständlich hin, weil es beim Drucken unverändert erschien. Ich habe die gleichen Schritte wie im Python-Skript durchgeführt und dann 'base64.b64encode (password_value)' verwendet. Dies gab mir deinen 'IgBB ...' Wert. – Gadgeteering
Haben Sie das Passwort nach der Erstellung getestet? – Damien