2012-04-03 44 views
5

Actualmente trato de cambiar contraseñas en nuestra Envoirenment de Active Directory a través de LDAP en Linux ya que los usuarios en cuestión no tienen acceso a una máquina de Windows y queremos mantenerlo de esa manera . Para cambiar la contraseña, actualmente estoy atascado averiguando cómo usar ldapmodify para hacerlo. Después de un montón de lectura en diferentes sitios/foros/grupos de noticias estoy mucho más confundido que antesInfracción de LDAP Violación al cambiar contraseña en AD mediante ldapmodify

Sin embargo: Trato el siguiente comando para hacerlo:

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

El contenido de la ldif.example:

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

(no se preocupe - esas contraseñas no se utilizan en cualquier lugar y no es un envoirenment producción)

ahora - cada vez que ejecutar el comando me sale el siguiente error:

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) 

Ahora, después de lo que he leído la razón de este error es o bien que la contraseña está mal formateado o que la política de contraseñas no permite la contraseña que he usado. Revisé la política - varias veces ahora - y la nueva contraseña definitivamente cumple con la política por todos los criterios. Si configuro la contraseña usando una máquina con Windows, también funciona bien (por supuesto, cambié la "contraseña antigua" y la "contraseña nueva" después porque la política no me permite cambiar a una contraseña anterior). La contraseña que ingresé después de pasar la opción "-W" a ldapmodify también es definitivamente correcta, de lo contrario, el error escupido por ldapmodify es que utilicé credenciales no válidas en lugar de una violación de restricción. Entonces, la única razón por la que se me ocurre es una contraseña mal formateada, pero no puedo averiguar de dónde viene el mal formato ya que utilizo el algoritmo base64 normal para codificar la contraseña.

¿Alguien tiene una idea de lo que está pasando? ¿Alguien puede empujarme en la dirección correcta?

La ayuda es muy apreciada y le agradezco de antemano.

Editar: Algo que me molesta: Cuando ejecuto las cadenas codificadas a través de base64 me sigue diciendo "Invalid Input". Ahora, continué y simplemente re-codifiqué las contraseñas con el uso de base64 en la máquina Linux, pero cuando vuelvo a ejecutar la cadena generada a través de la función de decodificación, base64 me sigue diciendo "Invalid Input" ... Las cadenas, sin embargo, ligeramente cambiado entre la cadena codificada windows-base64 y la cadena codificada de linux. Pero base64 solo dice "Invalid input" (entrada inválida) sin importar lo que ponga allí.

Edit2: Nevermind - leyendo el propósito de la función Supongo que arroja este error debido a los puntos y el signo de exclamación en la contraseña.

+0

No estoy seguro de que deba hacer ninguna codificación en absoluto. El servidor LDAP debería hacer eso. Intente proporcionar ambas contraseñas en texto sin formato. – EJP

+0

Sí, de hecho, sin codificación de la contraseña parece funcionar bien. Tal como dije: leí mucho sobre este tema y todo lo que leí sugirió que tenía que usar una cadena codificada para modificar la contraseña. Obviamente, esto no es del todo cierto. ¡Gracias! – henryford

Respuesta

3

Al configurar la contraseña, debe estar codificada en UTF-16LE y Base64. En Java, se podría hacer con:

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

UTF-16 LE tiene que ser utilizado, UTF-16 no es suficiente.

Al cambiar 'unicodePwd' sobre LDAP, se requiere que la nueva contraseña sea una cadena Unicode con comillas dobles. Significa que cuando quiera establecer una nueva contraseña (Password01!) Convierta la contraseña con comillas dobles ("Password01!") En Base64.

Se puede utilizar la herramienta en línea - http://www5.rptea.com/base64/ (seleccione UTF-16).

Detalles sobre unicodePwd están ahí - https://technet.microsoft.com/en-us/magazine/ff848710.aspx.

1

¿Qué hay de buscar una contraseña existente y funcional de un usuario diferente e intentar incluirla en su ldif?

De esta manera se asegurará de que su contraseña esté funcionando.

Segundo, no use delete/add use replace en su lugar en el ldif. Tal vez la eliminación provocará una infracción de clase de objeto errror.

En tercer lugar, solo necesita codificar base64 un atributo si contiene caracteres especiales o no imprimibles. Hay una fila vacía al final del archivo ldif.

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

Saludos,

+0

Gracias por su respuesta - reemplazar de hecho funciona bien, pero el problema es que tengo que usar un administrador de enlace para utilizar la función de reemplazo. Pero eso probablemente esté bien, solo crearé otra cuenta.Ya que lo resolví con smbpasswd en lugar de LDAP técnicamente ya no lo necesito, pero lo haré de todos modos, ya que actualmente estoy investigando LDAP. ¡Gracias de nuevo! – henryford

+1

Esta es una pregunta antigua pero la sustitución solo es para administradores y no para usuarios – Kevin

+0

Como se indicó, reemplazar no funciona para que el usuario reemplace su propia contraseña. Esta no debería ser la respuesta aceptada. –

3

Para referencia futura, si alguien debería tener problemas parecidos: La solución más simple? Simplemente use smbpasswd en lugar de ldap para cambiar la contraseña, ¡eso funciona perfectamente! Estoy realmente gruñó que no ocurrió antes: D

Sin embargo - la manera de cambiar su contraseña en el directorio activo utilizando Samba (utilizando 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 

y luego se puede iniciar sesión usando la nueva contraseña Tan fácil como eso, realmente.

1

yum install samba no funcionó para mí, ya que instaló el programa smbpasswd de samba versión 3.6.9.

Lo que funcionó fue yum install samba4-client. Esto instala el programa smbpasswd para Samba 4 y esta versión de smbpasswd actualmente puede cambiar la contraseña en el controlador de dominio de Windows Server 2008 R2. Usé samba4-client ya que no necesito el servidor Samba solo sus utilidades de cliente.

La sintaxis para el comando smbpasswd es el mismo:

smbpasswd -r domaincontroller.example.com -U testuser1  

Espero que esto ayude.

1

Error de constricción podría significar que utiliza una contraseña anterior que no cumple con la política de, por ejemplo, no puede utilizar las últimas 24 contraseñas. Para futuras referencias: Conectarse al servidor AD (vincular): 1. como administrador: puede cambiar y restablecer la contraseña para todos. Hay una diferencia entre cambio y reinicio. Change = AD aplicará la política de contraseñas. Restablecer = no. 2. como usuario: puede cambiar su contraseña pero no puede restablecerla. Change = AD aplicará la política de contraseñas. ¡Espero que ayude, aunque es un poco tarde!

Cuestiones relacionadas