Назад | Перейти на главную страницу

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

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

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?

Поле или атрибут 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

При использовании двух действий («удалить: unicodePwd» затем «добавить: unicodePwd») проблема с недостаточными правами исчезла. Спасибо : )

Привет,

Матиас