Нарушение ограничений LDAP при смене пароля в AD через ldapmodify - PullRequest
6 голосов
/ 03 апреля 2012

В настоящее время я пытаюсь изменить пароли в нашей Active Directory Envoirenment через LDAP в Linux, так как рассматриваемые пользователи не имеют доступа к машине с Windows, и мы хотим сохранить ее таким образом.Чтобы сменить пароль, я сейчас пытаюсь понять, как использовать для этого ldapmodify.После большого чтения на разных сайтах / форумах / новостных группах я гораздо больше запутался, чем раньше

Однако: я пытаюсь сделать это с помощью следующей команды:

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

Содержимое ldif.example:

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

(Не беспокойтесь - эти пароли нигде не используются и не являются производственной средой)

Теперь - каждый раз, когда я выполняю команду, я получаю следующееошибка:

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)

Теперь, после того, что я прочитал, причина этой ошибки либо в том, что пароль неправильно отформатирован, либо в том, что политика паролей не позволяет использовать пароль, который я использовал.Я проверил политику - несколько раз сейчас - и новый пароль определенно соответствует политике по всем критериям.Если я устанавливаю пароль с помощью Windows-машины, он также работает хорошо (конечно, после этого я изменил «oldpassword» и «newpassword», так как политика не позволяет мне сменить пароль на более ранний).Пароль, который я ввожу после передачи опции -W в ldapmodify, также определенно верен, в противном случае ошибка, выдаваемая ldapmodify, заключается в том, что я использовал недопустимые учетные данные вместо нарушения ограничения.Итак, единственная причина, по которой я могу придумать, - это действительно неверно отформатированный пароль, но я не могу понять, откуда исходит неправильное форматирование, поскольку я использую обычный алгоритм base64 для кодирования пароля.

Кто-нибудь знает, что происходит?Кто-нибудь может подтолкнуть меня в правильном направлении?

Помощь очень ценится, и я заранее благодарен вам.

Редактировать: Что-то, что меня беспокоит: когда я запускаю строки с закодированным основанием через base64, он постоянно говорит мне «Неверный ввод».Теперь - я пошел дальше и просто перекодировал пароли с использованием base64 на машине linux - но когда я снова запускаю сгенерированную строку через функцию декодирования, base64 продолжает сообщать мне «Неверный ввод» ... Строки, однако, немногоизменено между строкой в ​​кодировке windows-base64 и строкой в ​​кодировке linux.Но base64 просто говорит «Неверный ввод», независимо от того, что я туда вставил.

Edit2: Nevermind - прочитав назначение функции, которую я понял, она выдает эту ошибку из-за точек и восклицательного знака в пароле.

Ответы [ 5 ]

3 голосов
/ 03 января 2016

При установке пароля он должен быть в кодировке UTF-16LE и Base64.В Java это можно сделать с помощью:

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

UTF-16 LE , UTF-16 недостаточно.

Изменение 'unicodePwd'поверх LDAP требуется, чтобы новый пароль представлял собой строку Unicode с двойными кавычками.Это означает, что если вы хотите установить новый пароль (Password01!), Преобразуйте пароль с двойными кавычками («Password01!») В Base64.

Можно использовать онлайн-инструмент - http://www5.rptea.com/base64/ (выберите UTF-16).

Подробная информация о UnicodePwd есть - https://technet.microsoft.com/en-us/magazine/ff848710.aspx.

3 голосов
/ 04 апреля 2012

Для дальнейшего использования, если у кого-то возникнут похожие проблемы: Простое решение? Просто используйте smbpasswd вместо ldap для смены пароля - это работает безупречно! Я действительно раздражен, что я не думал об этом раньше: D

Однако - способ изменить свой пароль в активном каталоге с помощью samba (используя 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

И тогда вы можете войти, используя новый пароль. Легко, правда.

1 голос
/ 31 марта 2015

Ошибка ограничения может означать, что вы используете старый пароль, который не соответствует политике, скажем, не может использовать последние 24 пароля.Для использования в будущем: Подключитесь к серверу AD (bind): 1. от имени администратора: вы можете изменить и сбросить пароль для всех.Существует разница между изменением и сбросом.Изменение = AD будет применять политику паролей.Сброс = нет.2. как пользователь: вы можете изменить свой пароль, но не можете его сбросить.Изменение = AD будет применять политику паролей.Надеюсь, это поможет, хотя уже немного поздно!

1 голос
/ 23 июля 2013

yum install samba не работал для меня, так как установил программу smbpasswd из samba версии 3.6.9.

То, что сработало, было yum install samba4-client.Это установит программу smbpasswd для Samba 4, и эта версия smbpasswd может изменить пароль на контроллере домена Windows Server 2008 R2.Я использовал samba4-client, так как мне не нужен сервер Samba, только его клиентские утилиты.

Синтаксис команды smbpasswd такой же:

smbpasswd -r domaincontroller.example.com -U testuser1    

Надеюсь, это поможет.

1 голос
/ 04 апреля 2012

А как насчет получения существующего, рабочего пароля от другого пользователя и попытки включить его в свой ldif?

Таким образом, вы будете уверены, что ваш пароль работает.

Во-вторых,не используйте delete / add use replace вместо этого в ldif.Возможно, удаление приведет к ошибке нарушения объектного класса.

В-третьих, вам нужно только кодировать base64 атрибут, если он содержит непечатаемые или специальные символы.В конце файла ldif есть пустая строка.

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

С уважением,

...