2012-04-03 37 views
5

Attualmente cerco di modificare le password nel nostro Active Directory Envoirenment tramite LDAP su Linux poiché gli utenti in questione non hanno accesso a una macchina Windows e vogliamo mantenerla in questo modo . Al fine di cambiare la password, sono attualmente bloccato a capire come usare ldapmodify per farlo. Dopo un sacco di lettura su diversi siti/forum/newsgroup sono molto più confuso di primaViolazione del vincolo LDAP quando si modifica la password in AD tramite ldapmodify

Tuttavia: cerco il seguente comando per farlo:

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

Il contenuto del ldif.example:

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

(non ti preoccupare - le password non vengono utilizzati da nessuna parte e non è un envoirenment produzione)

ora - ogni volta che mi eseguire il comando ottengo il seguente errore:

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) 

Ora, dopo quello che ho letto il motivo di questo errore è o che la password è mal formattato o che il criterio di password non consente la password che ho usato. Ho controllato la politica - più volte ora - e la nuova password è conforme in modo definitivo alla politica in base a tutti i criteri. Se imposto la password utilizzando una macchina Windows, funziona anche bene (ovviamente ho cambiato "oldpassword" e "newpassword" in seguito, dal momento che non sono autorizzato dal criterio a passare a una password precedente). La password che inserisco dopo aver passato l'opzione "-W" a ldapmodify è anche sicuramente corretta, altrimenti l'errore sputato da ldapmodify è che ho usato credenziali non valide invece di una violazione di vincolo. Quindi, l'unica ragione per cui posso pensare è in effetti una password formattata male, ma non riesco a capire da dove provenga la cattiva formattazione, dal momento che uso il normale algoritmo di base64 per codificare la password.

Qualcuno ha un'idea di cosa sta succedendo? Qualcuno può spingermi nella giusta direzione?

L'aiuto è molto apprezzato e ti ringrazio in anticipo.

Modifica: Qualcosa che mi infastidisce: Quando eseguo le stringhe codificate di base tramite base64 continua a dirmi "Input non valido". Ora - Sono andato avanti e ho ri-codificato le password con l'uso di base64 sulla macchina Linux - ma quando eseguo di nuovo la stringa generata attraverso la funzione di decodifica, base64 continua a dirmi "Input non valido" ... Le stringhe comunque leggermente cambiato tra la stringa codificata di windows-base64 e la stringa codificata di linux. Ma base64 dice semplicemente "Input non valido", non importa quello che ho inserito.

Edit2: Modifica:Non riesco a risolvere il problema: la lettura dello scopo della funzione presuppone che venga generato questo errore a causa dei punti e del punto esclamativo nella password.

+0

Non sono sicuro che dovresti eseguire alcuna codifica. Il server LDAP dovrebbe farlo. Prova a fornire entrambe le password in formato testo. – EJP

+0

Sì, davvero - senza codificare la password sembra funzionare bene. Proprio come ho detto: ho letto molto su questo argomento e tutto ciò che ho letto suggerisce che devo usare una stringa codificata per modificare la password. Ovviamente - questo non è del tutto vero. Grazie! – henryford

risposta

3

Quando si imposta la password, deve essere UTF-16LE e Base64 codificati. In Java, potrebbe essere fatto con:

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

UTF-16 LE deve essere utilizzato, UTF-16 non è sufficiente.

La modifica di "unicodePwd" su LDAP richiede che la nuova password sia una stringa Unicode con doppi apici. Significa che quando vuoi impostare una nuova password (Password01!) Converti la password con virgolette doppie ("Password01!") In Base64.

Strumento online può essere utilizzato - http://www5.rptea.com/base64/ (selezionare UTF-16).

Dettagli su unicodePwd ci sono - https://technet.microsoft.com/en-us/magazine/ff848710.aspx.

1

Che ne dici di recuperare una password esistente, funzionante da un altro utente e provare ad includerla nel tuo ldif?

In questo modo sarete sicuri che la vostra password funzioni.

In secondo luogo, non utilizzare delete/add use replace invece in ldif. Forse l'eliminazione causerà un errore di violazione di objectclass.

In terzo luogo, è necessario codificare base64 un attributo solo se contiene caratteri non stampabili o speciali. C'è una riga vuota alla fine del file ldif.

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

saluti,

+0

Grazie per la tua risposta - la sostituzione funziona davvero bene, ma il problema è che devo usare un amministratore-bind per poter utilizzare la funzione di sostituzione. Ma probabilmente è ok, creerò un altro account.Dal momento che l'ho risolto con smbpasswd invece che con LDAP tecnicamente non ne ho più bisogno - ma lo farò comunque poiché sto attualmente scavando in LDAP. Grazie ancora! – henryford

+1

Questa è una vecchia domanda ma la sostituzione è solo per gli amministratori e non per gli utenti – Kevin

+0

Come indicato, la sostituzione non funziona affinché l'utente possa sostituire la propria password. Questa non dovrebbe essere la risposta accettata. –

3

Per riferimento futuro, se qualcuno dovesse incontrare problemi la classica: La soluzione più semplice? Basta usare smbpasswd invece di ldap per cambiare la password - che funziona perfettamente! Sono davvero borbottato che non ho pensato prima: D

Tuttavia - il modo per cambiare la password in Active Directory utilizzando samba (utilizzando 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 

e poi si può effettuare il login usando la nuova password. Facile come quello, davvero.

1

yum install samba non ha funzionato per me in quanto ha installato il programma smbpasswd da samba versione 3.6.9.

Che cosa ha funzionato era yum install samba4-client. Questo installa il programma smbpasswd per Samba 4 e questa versione di smbpasswd actualy può cambiare la password sul controller di dominio Windows Server 2008 R2. Ho usato samba4-client in quanto non ho bisogno del server Samba, ma solo delle utilità client.

La sintassi per il comando smbpasswd è lo stesso:

smbpasswd -r domaincontroller.example.com -U testuser1  

Spero che questo aiuti.

1

Errore di vincolo potrebbe significare che si utilizza una vecchia password che non è conforme alla politica di, diciamo, non può utilizzare le ultime 24 password. Per riferimenti futuri: Connessione al server AD (binding): 1. come amministratore: è possibile modificare e reimpostare la password per tutti. C'è una differenza tra il cambiamento e il reset. Modifica = AD imporrà la politica della password. Reimposta = no. 2. come utente: è possibile modificare la password ma non autorizzata a ripristinarla. Modifica = AD imporrà la politica della password. Spero che aiuti anche se è un po 'tardi!

Problemi correlati