Permitir alteração de senha automática usando LDAP (s) com Samba4

2

Estou tentando criar um webapp para permitir que os usuários alterem suas próprias senhas no Samba4 (talvez também no AD), usando LDAP (s). Mas quando tento modificar a senha do usuário usando este código:

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

Eu recebo este erro:

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

Se eu alterar o código, excluindo a senha antiga e adicionando a nova:

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

Então eu recebo este erro:

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

O ldapmodify é executado usando as credenciais do usuário, não gostaria de usar a conta de administrador. Isso é possível? Eu tenho que mudar algumas configurações no Samba4?

    
por okelet 30.12.2015 / 11:25

1 resposta

1

O campo "unicodePwd" ou atributo pode conter somente a senha sob o formato unicode e codificado com base64:

Senha para definir: MyNewPassw0rd Codificar esta senha para inseri-la no atributo "unicodePwd" é feito assim:

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

Observe as aspas simples entre aspas duplas: as aspas simples estão aqui para as aspas duplas não são interpretadas pelo shell. A string em unicodePwd deve conter a senha e as aspas duplas.

Este comando nos dá:

IgBNAHkATgBlAHcAUABhAHMAcwB3ADAAcgBkACIA

Decodificando esse valor:

echo IgBNAHkATgBlAHcAUABhAHMAcwB3ADAAcgBkACIA | base64 -d

Este comando nos dá:

"MyNewPassw0rd"

Aplicado ao seu exemplo:

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

E o novo conteúdo do LDIF é:

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

Observe os pontos duplos duplos depois de unicodePwd: isso significa que os dados são codificados em base64.

Usar o LDIF através do ldapmodify agora está funcionando aqui para modificar qualquer senha de usuário quando o ldapmodify é executado usando a identidade de um usuário específico para quem nós delegamos os direitos de modificar todos os usuários.

Desde que eu estava tentando usar "replace: unicodePwd" como no LDIF a seguir, recebi um erro sobre direitos insuficientes.

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

Usando duas ações ("delete: unicodePwd" e "add: unicodePwd") o problema de direitos insuficientes desapareceu. Obrigado :)

Felicidades,

mathias

    
por 24.03.2016 / 10:32