Разрешить самостоятельную смену пароля с помощью LDAP (s) с Samba4

Я пытаюсь создать веб-приложение, позволяющее пользователям изменять свои собственные пароли в Samba4 (возможно, также в AD), используя LDAP (ы). Но когда я пытаюсь изменить пароль пользователя с помощью этого кода:

dn: ........
changetype: modify
replace: unicodePwd
unicodePwd: "Temporal2"

, я получаю эту ошибку:

0x32 (Insufficient access; error in module acl: insufficient access rights during LDB_MODIFY (50))

Если я изменяю код, удаляю старый пароль и добавляю новый:

dn: ........
changetype: modify
delete: unicodePwd
unicodePwd: "Temporal1"
-
add: unicodePwd
unicodePwd: "Temporal2"

Тогда я получаю эту ошибку:

#!ERROR [LDAP: error code 53 - 00002035: setup_io: it's not allowed to set the NT hash password directly']

ldapmodify выполняется с использованием личных учетных данных пользователя, я бы не хотел использовать учетную запись администратора. Это возможно? Нужно ли мне изменять некоторые настройки в Samba4?

3
задан 30 December 2015 в 12:25
1 ответ

Поле или атрибут "unicodePwd" может содержать только пароль в формате Unicode и закодирован с помощью base64:

Пароль для установки: MyNewPassw0rd Кодирование этого пароля для вставки его в атрибут «unicodePwd» выполняется следующим образом:

echo -n '"MyNewPassw0rd"' | iconv -f utf8 -t utf16le | base64 -w 0

Обратите внимание на простые кавычки вокруг двойных кавычек: здесь используются простые кавычки, поскольку двойные кавычки не интерпретируются оболочкой. Строка в unicodePwd должна содержать пароль и двойные кавычки.

Эта команда дает нам:

IgBNAHkATgBlAHcAUABhAHMAcwB3ADAAcgBkACIA

Расшифровка этого значения:

echo IgBNAHkATgBlAHcAUABhAHMAcwB3ADAAcgBkACIA | base64 -d

Эта команда дает нам:

"MyNewPassw0rd"

Применяется к вашему примеру:

echo '"Temporal2"' | iconv -f utf8 -t utf16le | base64 -w 0
IgBUAGUAbQBwAG8AcgBhAGwAMgAiAAoA

Итак, новое содержимое LDIF:

dn: ........
changetype: modify
delete: unicodePwd
-
add: unicodePwd
unicodePwd:: IgBUAGUAbQBwAG8AcgBhAGwAMgAiAAoA

Обратите внимание на двойные двойные точки после unicodePwd: это означает, что данные закодированы в base64.

Использование LDIF через ldapmodify теперь работает здесь для изменения любого пароля пользователя, когда ldapmodify запускается с использованием идентификатора конкретного пользователя для которому мы делегировали права на изменение всех пользователей.

Пока я пытался использовать "replace: unicodePwd", как в следующем LDIF, я получал ошибку о недостаточных правах.

dn: ........
changetype: modify
replace: unicodePwd
unicodePwd:: IgBUAGUAbQBwAG8AcgBhAGwAMgAiAAoA

Использование двух действий ("delete: unicodePwd" затем "add: unicodePwd") проблема с недостаточными правами исчезла. Спасибо :)

Ура,

матиас

2
ответ дан 3 December 2019 в 06:58

Теги

Похожие вопросы