2012-04-03 8 views
5

Obecnie próbuję zmienić hasło w naszej encerementacji Active Directory przez LDAP w systemie Linux, ponieważ użytkownicy, o których mowa, nie mają dostępu do maszyny Windows i chcemy zachować to w ten sposób . Aby zmienić hasło, utknąłem w tej chwili, zastanawiając się, w jaki sposób użyć polecenia ldapmodify. Po dużo czytania na różnych stronach/forach/grupach dyskusyjnych jestem bardziej zdezorientowany niż przedNaruszenie ograniczeń LDAP przy zmianie hasła w AD za pomocą ldapmodify

Jednakże: staram następujące polecenie, aby to zrobić:

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

zawartość ldif.example:

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

(nie martw się - te hasła nie są wykorzystywane w dowolnym miejscu i nie jest to envoirenment produkcji)

teraz - za każdym razem, kiedy wykonanie polecenia pojawia się następujący błąd:

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) 

Teraz, po tym, co przeczytałem powodem tego błędu jest albo że hasło jest źle sformatowana lub hasło, że polityka nie pozwala hasło użyłem. Sprawdziłem zasady - wiele razy teraz - a nowe hasło z całą pewnością jest zgodne z zasadami według wszystkich kryteriów. Jeśli ustawię hasło przy użyciu maszyny Windows, działa to również dobrze (oczywiście zmieniłem później "stare hasło" i "nowe hasło", ponieważ nie mogę pozwolić, by polityka zmieniła się na wcześniejsze hasło). Hasło, które wprowadzam po przejściu przez opcję "-W" do ldapmodify, jest również definitywnie poprawne, w przeciwnym razie błąd wypluwany przez ldapmodify jest taki, że użyłem nieprawidłowych danych uwierzytelniających zamiast naruszenia ograniczeń. A więc - jedynym powodem, dla którego mogę myśleć, jest w istocie złe sformatowane hasło - ale nie wiem, skąd powinno pochodzić złe formatowanie, ponieważ używam normalnego algorytmu base64 do kodowania hasła.

Czy ktoś ma pojęcie, co się dzieje? Czy ktoś może mnie popchnąć we właściwym kierunku?

Pomoc jest bardzo cenna i dziękuję z góry.

Edycja: Coś, co mnie trapi: Kiedy uruchamiam zakodowane w bazie ciągi przez base64, ciągle mówi mi "Invalid Input". Teraz - poszedłem dalej i po prostu ponownie zakodowałem hasła przy użyciu base64 na maszynie Linux - ale kiedy ponownie uruchomię wygenerowany ciąg przez funkcję dekodującą, base64 ciągle mówi mi "Invalid Input" ... zmieniono kodowany przez Windows-base64 łańcuch na kodowany linuxem. Ale base64 po prostu mówi "Nieprawidłowe dane wejściowe" bez względu na to, co tam wstawiam.

Edycja2: Nieważne - odczytanie celu funkcji, którą zbieram, powoduje zgłoszenie tego błędu z powodu kropek i wykrzyknika w haśle.

+0

Nie jestem pewien, czy powinieneś wykonywać kodowanie w ogóle. Serwer LDAP powinien to zrobić. Spróbuj podać oba hasła w postaci zwykłego tekstu. – EJP

+0

Tak, rzeczywiście - bez kodowania hasła wydaje się, że działa dobrze. Tak jak powiedziałem: dużo czytam na ten temat, a wszystko, co przeczytałem, sugeruje, że mogę użyć zakodowanego ciągu do zmodyfikowania hasła. Oczywiście - to nie do końca prawda. Dzięki! – henryford

Odpowiedz

3

Podczas ustawiania hasła musi być zakodowany kodowaniem UTF-16LE i Base64. W języku Java, można to zrobić z:

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

UTF-16 LE musi być stosowana, UTF-16 nie jest wystarczające.

Zmiana "unicodePwd" przez LDAP wymaga, aby nowe hasło było ciągiem znaków Unicode z podwójnymi cudzysłowami. Oznacza to, że jeśli chcesz ustawić nowe hasło (Password01!), Skonwertuj hasło z podwójnym cudzysłowem ("Password01!") Do Base64.

Narzędzie online może być używane - http://www5.rptea.com/base64/ (wybierz UTF-16).

Szczegóły na temat unicodePwd są dostępne - https://technet.microsoft.com/en-us/magazine/ff848710.aspx.

1

Co powiesz na pobranie istniejącego, działającego hasła od innego użytkownika i uwzględnienie go w pliku ldif?

W ten sposób będziesz mieć pewność, że twoje hasło działa.

Po drugie, nie używaj delete/add use replace zamiast w ldif. Być może usunięcie spowoduje błąd errata w klasie obiektowej.

Po trzecie, wystarczy zakodować atrybut base64, jeśli zawiera on znaki niedrukowalne lub specjalne. Na końcu pliku ldif znajduje się pusty wiersz.

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

Pozdrawiam,

+0

Dziękuję za odpowiedź - zastąpienie rzeczywiście działa dobrze, ale problem polega na tym, że muszę użyć funkcji admin-bind, aby użyć funkcji replace. Ale to chyba w porządku, po prostu utworzę kolejne konto.Odkąd technicznie rozwiązałem go za pomocą smbpasswd zamiast LDAP, nie potrzebuję go już więcej - ale i tak to zrobię, odkąd aktualnie kopie w LDAP. Dzięki jeszcze raz! – henryford

+1

To jest stare pytanie, ale zamień tylko dla administratora, a nie użytkowników. – Kevin

+0

Jak wspomniano, wymiana nie działa, aby użytkownik mógł zamienić swoje własne hasło. To nie powinna być akceptowana odpowiedź. –

3

Na przyszłość, jeśli ktoś powinien napotkać podobne problemy: The proste rozwiązanie? Po prostu użyj smbpasswd zamiast ldap, aby zmienić hasło - działa bez zarzutu! Ja naprawdę grumped że nie myślałem o tym wcześniej: D

jednak - aż do zmiany hasła w Active Directory przy użyciu Samby (używając 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 

A potem można się zalogować używając nowego hasła. To proste, naprawdę.

1

yum install samba nie działa dla mnie, ponieważ zainstalował program smbpasswd z wersji samba 3.6.9.

Co zadziałało yum install samba4-client. To instaluje program smbpasswd dla Samby 4, a ta wersja pliku smbpasswd może zmienić hasło na kontrolerze domeny systemu Windows Server 2008 R2. Użyłem klienta samba4, ponieważ nie potrzebuję serwera Samby tylko jego programów klienckich.

Składnia polecenia smbpasswd jest taka sama:

smbpasswd -r domaincontroller.example.com -U testuser1  

Nadzieja to pomaga.

1

Błąd ograniczenia może oznaczać, że używasz starego hasła, które nie jest zgodne z polityką, powiedzmy, nie może używać ostatnich 24 haseł. Dla przyszłych referencji: Połącz się z serwerem AD (bind): 1. jako administrator: możesz zmienić i zresetować hasło dla wszystkich. Istnieje różnica między zmianą a resetem. Change = AD wymusza politykę haseł. Resetuj = nie działa. 2. jako Użytkownik: możesz zmienić hasło, ale nie możesz go zresetować. Change = AD wymusza politykę haseł. Mam nadzieję, że pomoże, choć trochę za późno!

Powiązane problemy