2012-04-03 4 views
5

Ich versuche derzeit, Passwörter in unserer Active Directory Envoirenment über LDAP unter Linux zu ändern, da die betreffenden Benutzer keinen Zugriff auf eine Windows-Maschine haben und wir es so behalten wollen . Um das Passwort zu ändern, bin ich gerade dabei herauszufinden, wie man ldapmodify dazu benutzt. Nach vielen Lesen auf verschiedene Webseiten/Foren/Newsgroups bin ich viel mehr verwirrt als vorherLDAP Constraint Verletzung beim Ändern des Passworts in AD durch ldapmodify

Allerdings: Ich versuche, den folgenden Befehl ein, dies zu tun:

ldapmodify -f ldif.example -H ldaps://lab01-dc01.example.com -D 'CN=test,CN=users,DC=lab01,DC=example,DC=com' -x -W 

Der Inhalt des ldif.example:

dn: CN=test,CN=Users,DC=lab01,DC=example,DC=com 
changetype: modify 
delete: unicodePwd 
unicodePwd:: V3VQdXV1STEyLg== 
- 
add: unicodePwd 
unicodePwd:: QmxhVVVraTEyLg== 
- 

(keine Sorge - die Passwörter sind nicht überall und es ist keine Produktion envoirenment verwendet) - jedes Mal, wenn ich

Jetzt Führen Sie den Befehl, den ich die folgende Fehlermeldung erhalten:

modifying entry CN=test,CN=Users,DC=lab01,DC=example,DC=com" 
ldapmodify: Constraint violation (19) 
additional info: 0000216C: AtrErr: DSID-03190EB0, #1: 
0: 0000216C: DSID-03190EB0, problem 1005 (CONSTRAINT_ATT_TYPE), data 0, Att 9005a (unicodePwd) 

Nun, nach dem, was ich lese die Ursache für diesen Fehler ist entweder, dass das Passwort falsch formatiert wird oder dass die Kennwortrichtlinie nicht zulässt dem Passwort Ich verwenden. Ich habe die Richtlinie mehrfach überprüft und das neue Passwort erfüllt die Richtlinie nach allen Kriterien. Wenn ich das Passwort mit einer Windows-Maschine setze, funktioniert es auch gut (natürlich habe ich später das "alte Passwort" und "neues Passwort" geändert, da ich von der Richtlinie nicht zu einem früheren Passwort wechseln darf). Das Passwort, das ich nach dem Übergeben der "-W" -Option an ldapmodify eingegeben habe, ist ebenfalls richtig, sonst wird von ldapmodify der Fehler ausgegeben, dass ich ungültige Credentials anstelle einer Constraint-Verletzung verwendet habe. Also - der einzige Grund, den ich mir vorstellen kann, ist in der Tat ein schlecht formatiertes Passwort - aber ich kann nicht herausfinden, woher die schlechte Formatierung kommen sollte, da ich den normalen base64 Algorithmus zum Verschlüsseln des Passworts verwende.

Hat jemand eine Idee was los ist? Kann mich jemand in die richtige Richtung schieben?

Hilfe ist sehr geschätzt und ich danke Ihnen im Voraus.

Edit: Etwas, das mich bugs: Wenn ich die Base-codierte Strings durch Base64 ausführen, sagt es mir immer "Invalid Input". Jetzt - ich ging voran und nur neu codiert die Kennwörter mit der Verwendung von base64 auf dem Linux-Rechner - aber wenn ich den generierten String durch die Dekodierungsfunktion erneut ausführen, sagt Base64 mir "Invalid Input" ... Die Strings jedoch leicht geändert zwischen der Windows-Base64-codierten Zeichenfolge und der Linux-codierten Zeichenfolge. Aber base64 sagt einfach "Ungültige Eingabe" egal was ich da hineinlege.

Edit2: Nevermind - Lesen der Zweck der Funktion Ich erhalte, dass es diesen Fehler wegen der Punkte und das Ausrufezeichen in das Passwort wirft.

+0

Ich bin mir nicht sicher, ob Sie irgendwelche Codierung überhaupt tun sollten. Der LDAP-Server sollte das tun. Versuchen Sie, beide Passwörter im Klartext anzugeben. – EJP

+0

Ja, in der Tat - ohne das Passwort zu verschlüsseln scheint es gut zu funktionieren. Wie ich schon sagte: Ich habe viel über dieses Thema gelesen und alles, was ich gelesen habe, schlug vor, dass ich eine verschlüsselte Zeichenfolge verwenden muss, um das Passwort zu ändern. Offensichtlich - das ist nicht ganz richtig. Vielen Dank! – henryford

Antwort

3

Bei der Passworteinstellung muss UTF-16LE und Base64 codiert sein.

String source = "\"car\""; 
String utf16base64 = new String(Base64.getEncoder().encode(source.getBytes("UTF-16LE"))); 

UTF-16 LE muss verwendet werden, UTF-16 ist nicht genug: In Java, könnte es mit getan werden.

Wenn Sie 'unicodePwd' über LDAP ändern, muss das neue Kennwort eine Unicode-Zeichenfolge mit doppelten Anführungszeichen sein. Das bedeutet, wenn Sie ein neues Passwort (Password01!) Festlegen möchten, konvertieren Sie das Passwort mit doppelten Anführungszeichen ("Password01!") In Base64.

Online-Tool kann verwendet werden - http://www5.rptea.com/base64/ (wählen Sie UTF-16).

Details über unicodePwd sind dort - https://technet.microsoft.com/en-us/magazine/ff848710.aspx.

1

Wie wäre es, ein existierendes, funktionierendes Passwort von einem anderen Benutzer zu holen und zu versuchen, das in Ihr LDIF aufzunehmen?

Auf diese Weise werden Sie sicher sein, dass Ihr Passwort funktioniert.

Zweitens, verwenden Sie nicht löschen/hinzufügen verwenden ersetzen stattdessen in der Idif. Möglicherweise verursacht das Löschen einen Objektklassenverletzungsfehler.

Drittens müssen Sie nur Base64 ein Attribut codieren, wenn es nicht druckbare oder Sonderzeichen enthält. Am Ende der LDIF-Datei befindet sich eine leere Zeile.

dn: CN=test,CN=Users,DC=lab01,DC=example,DC=com 
changetype: modify 
replace: unicodePwd 
unicodePwd: BlaUUki12. 

Grüße,

+0

Vielen Dank für Ihre Antwort - ersetzen in der Tat funktioniert gut, aber das Problem ist, dass ich eine admin-bind verwenden muss, um die Funktion ersetzen zu verwenden. Aber das ist wahrscheinlich in Ordnung, ich werde einfach ein anderes Konto erstellen.Da ich es mit smbpasswd anstelle von LDAP technisch gelöst habe, brauche ich es nicht mehr - aber ich mache es trotzdem, da ich gerade in LDAP arbeite. Danke noch einmal! – henryford

+1

Dies ist eine alte Frage, aber ersetzen ist nur für Admin und nicht Benutzer – Kevin

+0

Wie angegeben, funktioniert Ersetzen für den Benutzer nicht, um ihr eigenes Passwort zu ersetzen. Dies sollte nicht die akzeptierte Antwort sein. –

3

Für die Zukunft sollte, wenn jemand similiar Probleme auftreten: Die einfache Lösung? Verwenden Sie einfach smbpasswd anstelle von ldap, um das Passwort zu ändern - das funktioniert einwandfrei! Ich bin wirklich meckere, dass ich nicht daran gedacht vor: D

jedoch - die Art und Weise Ihr Passwort im Active Directory unter Verwendung von Samba zu ändern (mit CentOS):

~#yum install samba 
~#smbpasswd -r domaincontroller.example.com -U testuser1 
Old SMB password: 
New SMB password: 
Retype new SMB password: 
Password changed for user testuser1 on domaincontroller.example.com 

Und dann können Sie sich einloggen Verwenden Sie das neue Passwort. So einfach ist das wirklich.

1

yum install samba hat nicht für mich funktioniert, wie es smbpasswd Programm von Samba Version 3.6.9 installiert.

Was funktionierte, war yum install samba4-client. Dies installiert das Programm smbpasswd für Samba 4, und diese Version von smbpasswd kann das Passwort auf dem Windows Server 2008 R2 Domain Controller ändern. Ich habe Samba4-Client verwendet, da ich den Samba-Server nicht nur als Client-Dienstprogramme benötige.

Die Syntax für den Befehl smbpasswd ist das gleiche:

smbpasswd -r domaincontroller.example.com -U testuser1  

Hoffnung, das hilft.

1

Constraint-Fehler könnte bedeuten, dass Sie ein altes Passwort verwenden, das nicht der Richtlinie entspricht, sagen wir, die letzten 24 Passwörter nicht verwenden können. Für zukünftige Referenzen: Verbinden mit AD-Server (Bind): 1. als Admin: Sie können das Passwort für alle ändern und zurücksetzen. Es gibt einen Unterschied zwischen Änderung und Zurücksetzen. Änderung = AD erzwingt Passwortrichtlinie. Reset = nicht. 2. als Benutzer: Sie können Ihr Passwort ändern, aber nicht zurücksetzen. Änderung = AD erzwingt Passwortrichtlinie. Hoffe, es hilft, obwohl es ein bisschen spät ist!

Verwandte Themen