Añadir user en OpenLDAP

Hola.

Estoy instalando un servidor LDAP en Debian. Lo tengo ya montado, pero no sé cómo crear usuarios.

Pasos que hago:

1. Creo el fichero con el nombre del user <pepe.ldif>

dn: uid=pepe,ou=users,dc=domain,dc=test
objectClass: top
objectClass: account
objectClass: posixAccount
objectClass: shadowAccount
cn: pepe
uid: pepe
uidNumber: 16859
gidNumber: 100
homeDirectory: /home/pepe
loginShell: /bin/bash
gecos: tgonzalez
userPassword: {crypt}x
shadowLastChange: 0
shadowMax: 0
shadowWarning: 0


2. Lanzo el comando
ldapadd -x -W -D "cn= pepe,dc=domain,dc=test" -f pepe.ldif


3. Pongo el password de admin de OpenLDAP y me sale el siguiente error:

ldap_bind: Invalid credentials (49)


Notas:
No he creado el usuario, ni su home, ni password ni nada en local todavía, ya que entiendo que no es un usuario al uso.

¿Sabéis dónde estoy equivocándome?

Gracias!
banderas20 escribió:Hola.

Estoy instalando un servidor LDAP en Debian. Lo tengo ya montado, pero no sé cómo crear usuarios.

Pasos que hago:

1. Creo el fichero con el nombre del user <pepe.ldif>

dn: uid=pepe,ou=users,dc=domain,dc=test
objectClass: top
objectClass: account
objectClass: posixAccount
objectClass: shadowAccount
cn: pepe
uid: pepe
uidNumber: 16859
gidNumber: 100
homeDirectory: /home/pepe
loginShell: /bin/bash
gecos: tgonzalez
userPassword: {crypt}x
shadowLastChange: 0
shadowMax: 0
shadowWarning: 0


2. Lanzo el comando
ldapadd -x -W -D "cn= pepe,dc=domain,dc=test" -f pepe.ldif


3. Pongo el password de admin de OpenLDAP y me sale el siguiente error:

ldap_bind: Invalid credentials (49)


Notas:
No he creado el usuario, ni su home, ni password ni nada en local todavía, ya que entiendo que no es un usuario al uso.

¿Sabéis dónde estoy equivocándome?

Gracias!

Lo tengo oxidado pero ¿el comando lo estás lanzado con el espacio entre el cn= pepe?

Prueba a cambiarlo a ver.
KePeRHeLL escribió:Lo tengo oxidado pero ¿el comando lo estás lanzado con el espacio entre el cn= pepe?

Prueba a cambiarlo a ver.


Lo he probado con y sin espacio, y me da el mismo resultado.

Gracias!
banderas20 escribió:
KePeRHeLL escribió:Lo tengo oxidado pero ¿el comando lo estás lanzado con el espacio entre el cn= pepe?

Prueba a cambiarlo a ver.


Lo he probado con y sin espacio, y me da el mismo resultado.

Gracias!


Buenas,

Yo acabo de probar con un entorno que cree hace mucho, y mirando apuntes te pego lo que he hecho y me ha funcionado, entiendo que dependerá de cada configuración:

root@centos8 openldap]# cat pepe.ldif
dn: uid=pepe,ou=people,dc=ldapmaster,dc=kifarunix-demo,dc=com
cn: pepe
gidNumber: 100
homeDirectory: /home/pepe
loginShell: /bin/bash
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
shadowInactive: 30
shadowLastChange: 0
shadowMax: 0
shadowWarning: 0
sn: pepe
uid: pepe
uidNumber: 16859
userPassword: {crypt}x
givenName: pepe
mail: pepe@domain.com

[root@centos8 openldap]# cat eol.ldif
dn: uid=eol,ou=people,dc=ldapmaster,dc=kifarunix-demo,dc=com
cn: eol
gidNumber: 100
homeDirectory: /home/eol
loginShell: /bin/bash
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
shadowInactive: 30
shadowLastChange: 0
shadowMax: 0
shadowWarning: 0
sn: eol
uid: eol
uidNumber: 3001
userPassword: {crypt}x
givenName: eol
mail: eol@localhost.com



Lanzo el siguiente comando en la máquina donde tengo instalado el openldap:

[root@centos8 openldap]# ldapadd -Y EXTERNAL -H ldapi:/// -f pepe.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
adding new entry "uid=pepe,ou=people,dc=ldapmaster,dc=kifarunix-demo,dc=com"

[root@centos8 openldap]# ldapadd -Y EXTERNAL -H ldapi:/// -f eol.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
adding new entry "uid=eol,ou=people,dc=ldapmaster,dc=kifarunix-demo,dc=com"


Y como puedes ver, los usuarios lo ha creado y no me ha dado error:

Imagen

No se si te va a ayudar en algo, en el trabajo configuramos los servidores para autenticar contra Directorio Activo de windows, hace tiempo si usaba openldap, pero cuando entré en el departamento ya estaba montado y estaba todo scriptado para la gestión de usuarios, así que no pude tocarlo mucho salvo mantenimientos.

Saludos.
@Adeptus24

Ante todo, muchas gracias por el curro.

Lo que no entiendo es la directiva

userPassword: {crypt}x


Ese password cuál es y cómo se crea? antes o después del fichero ldif?
Los usuarios de ldap pueden ser también locales de la máquina?

Muchas gracias de nuevo!
@banderas20

Buenas,

En el ldif la password la he configurado como tu lo tenías en tu fichero para menor confusión, pero ni idea, yo lo que tenia en mi script declarado para resetear passwords, o para ponerle una aleatoria al crear un user era declarar una función que ejecutaba esto:

tr -dc 'A-Za-z0-9!"#$%&'\''()*+,-./:;<=>?@[\]^_`{|}~' </dev/urandom | head -c 8  ; echo


Que no hace falta declarar una función, pero bueno como iba a ser llamado en varios procesos dentro del script... entonces cuando daba de alta un usuario nuevo, en el campo de password del ldif daba un valor a la variable $PW con PW=`getpasswd` donde getpasswd es una función que ejecutaba la línea de arriba, así con cada campo que iba preguntado el script por ejemplo al crear usuario nuevo metía eso en un ficheto temporal .ldif para ese usuario... el username, grupos a los que pertenece, otros como el uid lo generaba de forma automática dependiendo de los grupos a los que pertenecía, y luego imprimía todos los datos, passwd incluída por pantalla para mandársela al usuario en cuestión, así que quedaría en el LDIF despues de llamar a esa función para declarar el valor para $PW, te dejo un fragmento de donde se construía el .ldif en un alta por ejemplo, no le hagas caso al resto de variables porque son variables que iban siendo declaradas al ejecutar el script, quedate con la de passwd para comprender el ejemplo, pero ahi puedes poner si quieres una passwd en claro al hacer el .ldif a mano:

echo "${DN}
cn: ${USER}
gidNumber: ${GROUPID}
homeDirectory: ${HOMEDIR}
loginShell: ${TSHELL}
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
shadowInactive: 30
shadowLastChange: ${LC}
shadowMax: 90
shadowWarning: 30
sn: ${USER}
uid: ${USER}
uidNumber: ${UIDNUMBER}
userPassword: ${PW}
givenName: ${NOMBREYAP}
mail: ${MAIL}" > ${TMPDIR}/ldapadduser.${PID}tmp


Te dejo un ejemplo muy chorra de lo que te digo más arriba de la función:

root@flsanti:/scripts/bin# ./ldappasswd.sh
NpoQbto$
root@flsanti:/scripts/bin# ./ldappasswd.sh
8-i@xL7X
root@flsanti:/scripts/bin# ./ldappasswd.sh
52{["".&
root@flsanti:/scripts/bin# cat ldappasswd.sh
getpasswd ()
{
tr -dc 'A-Za-z0-9!"#$%&'\''()*+,-./:;<=>?@[\]^_`{|}~' </dev/urandom | head -c 8  ; echo
}

PW=`getpasswd`

echo $PW


Sobre el tema de usuarios locales/ldap, lo suyo es que los usuarios de ldap no existan localmente, si existe localmente en un servidor que tiene configurado el cliente para la autenticación contra un ldap bien configurado, pam, nsswitch, ldap.conf, etc..., por ejemplo en el fichero /etc/nsswitch.conf tu declaras en el campo passwd el orden, si primero tienes files, luego ldap, etc... si tu tienes en el fichero declarado así "passwd: files ldap", primero mira ficheros locales (/etc/passwd) y luego ldap, si tienes un usuario pepe en ldap pero también lo creas localmente, con el que va autenticar es con el local en ese caso porque files está delante.

Saludos.
6 respuestas