ldap en Ubuntu 16.04: credenciales no válidas (49)

ldap en Ubuntu 16.04: credenciales no válidas (49)

Estoy intentando configurar una instancia LDAP local para poder depurar algún software que usa LDAP para la autenticación. Tenía esto funcionando correctamente en Ubuntu 14.04 LTS, pero al intentar actualizar a Ubuntu 16.04 LTS, lo reinstalé desde cero Ubunut 16.04 LTS y no puedo hacer que LDAP funcione correctamente después de mucha frustración.

Instalé slapd y lo usé slapadd -l <file>para completar mi base de datos. Puedo ver que mi archivo se ha cargado con ldapsearch -x:

# extended LDIF
#
# LDAPv3
# base <dc=nodomain> (default) with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#

# nodomain
dn: dc=nodomain
objectClass: top
objectClass: dcObject
objectClass: organization
o: nodomain
dc: nodomain

# admin, nodomain
dn: cn=admin,dc=nodomain
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: admin
description: LDAP administrator

# People, nodomain
dn: ou=People,dc=nodomain
objectClass: organizationalUnit
ou: People

# Groups, nodomain
dn: ou=Groups,dc=nodomain
objectClass: organizationalUnit
ou: Groups

# miners, Groups, nodomain
dn: cn=miners,ou=Groups,dc=nodomain
objectClass: posixGroup
cn: miners
gidNumber: 5000

# smm, People, nodomain
dn: uid=smm,ou=People,dc=nodomain
uid: smm
sn: McCants
givenName: Stephen
cn: Stephen McCants
displayName: Stephen McCants
uidNumber: 10000
gidNumber: 5000
gecos: Stephen McCants
loginShell: /bin/bash
homeDirectory: /home/smm
objectClass: top
objectClass: posixAccount
objectClass: shadowAccount
objectClass: inetOrgPerson
objectClass: person

# search result
search: 2
result: 0 Success

# numResponses: 7
# numEntries: 6

Sin embargo, mi código no puede autenticarse con el usuario 'smm' y no puedo establecer una contraseña para el usuario con ldappasswd -D "uid=smm,ou=People,dc=nodomain" -A -S -W. Me solicita las contraseñas y luego falla con el mismo error:

Old password: 
Re-enter old password: 
New password: 
Re-enter new password: 
Enter LDAP Password: 
ldap_bind: Invalid credentials (49)

También solía dpkg-reconfigure slapdestablecer una contraseña de raíz LDAP. Sin embargo, tanto antes como después de la reconfiguración, aparece el mismo error. Aquí está el archivo original que se utilizó para completar la base de datos:

n: ou=People,dc=nodomain
objectClass: organizationalUnit
ou: People
structuralObjectClass: organizationalUnit
entryUUID: 03a28690-1834-1033-87f5-8b9136017cf0
creatorsName: cn=admin,dc=nodomain
createTimestamp: 20140123043856Z
entryCSN: 20140123043856.559226Z#000000#000#000000
modifiersName: cn=admin,dc=nodomain
modifyTimestamp: 20140123043856Z

dn: ou=Groups,dc=nodomain
objectClass: organizationalUnit
ou: Groups
structuralObjectClass: organizationalUnit
entryUUID: 03b017e2-1834-1033-87f6-8b9136017cf0
creatorsName: cn=admin,dc=nodomain
createTimestamp: 20140123043856Z
entryCSN: 20140123043856.648148Z#000000#000#000000
modifiersName: cn=admin,dc=nodomain
modifyTimestamp: 20140123043856Z

dn: cn=miners,ou=Groups,dc=nodomain
objectClass: posixGroup
cn: miners
gidNumber: 5000
structuralObjectClass: posixGroup
entryUUID: 03b537ae-1834-1033-87f7-8b9136017cf0
creatorsName: cn=admin,dc=nodomain
createTimestamp: 20140123043856Z
entryCSN: 20140123043856.681730Z#000000#000#000000
modifiersName: cn=admin,dc=nodomain
modifyTimestamp: 20140123043856Z

dn: uid=smm,ou=People,dc=nodomain
uid: smm
sn: <my name>
givenName: <my name>
cn: <my name>
displayName: <my name>
uidNumber: 10000
gidNumber: 5000
gecos: <my name>
loginShell: /bin/bash
homeDirectory: /home/smm
structuralObjectClass: inetOrgPerson
entryUUID: 983bd260-1835-1033-87fb-8b9136017cf0
creatorsName: cn=admin,dc=nodomain
createTimestamp: 20140123045015Z
objectClass: top
objectClass: posixAccount
objectClass: shadowAccount
objectClass: inetOrgPerson
objectClass: person
userPassword: <redacted>
entryCSN: 20140123054441.631096Z#000000#000#000000
modifiersName: cn=admin,dc=nodomain
modifyTimestamp: 20140123054441Z

Por supuesto, contiene mi nombre real y contiene la cadena SSHA generada por slappasswd.

En este punto, no sé por qué no funciona y cuál es el problema.

Respuesta1

Entonces, parece que el problema fue que las contraseñas estaban cargadas de tal manera que no las conocía o faltaban. Pude restablecer efectivamente, primero la contraseña de administrador LDAP y luego la contraseña de la cuenta de usuario usando el comando ldapmodify. Estoy enumerando lo que hice a continuación con la esperanza de que ayude a alguien más.

Restablecer la contraseña de administrador LDAP

Primero, generé el hash de contraseña con slappasswd.

root@laptop:/etc/ldap/slapd.d# slappasswd 
New password: 
Re-enter new password: 
{SSHA}<hash redacted>

A continuación, necesitaba encontrar dónde estaba configurada la contraseña de administrador. Eso lo hice con:

root@laptop:/etc/ldap/slapd.d# ldapsearch -LLL -Y EXTERNAL -H ldapi:/// -b  cn=config olcRootDN=cn=admin,dc=nodomain dn olcRootDN olcRootPW
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
dn: olcDatabase={1}mdb,cn=config
olcRootDN: cn=admin,dc=nodomain
olcRootPW: {SSHA}<hash redacted>

Su dc puede ser diferente en el comando, dependiendo de cómo haya configurado las cosas. Ojalá pudiera dar una mejor respuesta que esa sobre cuál debería ser su CC, pero no entiendo completamente LDAP. Básicamente, todo lo que he hecho ha sido bajo dc=nodomain. Es probable que su configuración sea diferente.

A continuación, utilicé ldapmodify para restablecer la contraseña de administrador a algo que conozco. Tenga en cuenta que escribí tanto el comando como las líneas que comienzan con "dc:", "replace:" y "olcRootPw:". Debe colocar una línea en blanco después de la última línea para que ldapmodify aplique los comandos anteriores.

root@laptop:/etc/ldap/slapd.d# ldapmodify -Y EXTERNAL -H ldapi:///
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0

dn: olcDatabase={1}mdb,cn=config
replace: olcRootPW
olcRootPW: {SSHA}<new hash from slappasswd>

El oldcDatabasevalor se elimina del ldapsearchcomando y el tuyo puede ser diferente al mío. Si no había un olcRootPw anterior en los resultados de la búsqueda, es posible que deba usarlo adden lugar de replaceen el comando de modificación anterior.

Ctrl-C finaliza nuestra sesión de ldapmodify.

Ahora tengo una contraseña de administrador LDAP que conozco y puedo proceder a restablecer una cuenta de usuario.

Restablecer la contraseña del usuario LDAP

Utilicé slappasswd para generar un nuevo hash de contraseña para la contraseña del usuario. Este comando es el mismo para ambos restablecimientos de contraseña.

root@laptop:/etc/ldap/slapd.d# slappasswd 
New password: 
Re-enter new password: 
{SSHA}<hash redacted>

A continuación, ejecuté el comando ldapmodify, pero esta vez de forma un poco diferente:

ldapmodify -H ldapi:/// -D "cn=admin,dc=nodomain" -W

La -Dopción le dice a LDAP que estoy ejecutando como administrador (o quien esté entre comillas después de -D). Su dcvalor puede ser diferente, por supuesto. La -Wopción le dice a LDAP que me solicite la contraseña de administrador.

Después de ingresar la contraseña de administrador LDAP (que restablecí arriba), di el comando para configurar la contraseña del usuario. Esto es lo que ejecuté:

dn: uid=smm,ou=People,dc=nodomain
add: userPassword
userPassword: {SSHA}<new password hash>

La primera línea es el dn para especificar qué usuario necesita restablecer la contraseña. La segunda línea es un addcomando si la contraseña de usuario no está configurada o un replacecomando si la contraseña de usuario ya está configurada. La tercera línea es el nuevo hash de contraseña que debería utilizar LDAP. Ingrese una línea en blanco después de la tercera línea para indicarle a ldapmodify que ha terminado de ingresar el comando y que debería ejecutarlo. Ojalá obtengas un resultado como:

modifying entry "uid=smm,ou=People,dc=nodomain"

Ahora también tengo una nueva contraseña para mi usuario.

información relacionada