Я пытаюсь создать веб-приложение, чтобы пользователи могли изменять свои собственные пароли в 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») проблема с недостаточными правами исчезла. Спасибо : )
Привет,
Матиас