Introducción

Buenas, en este post vamos a usar el servidor LDAP instalado anteriormente para hacer varios ejercicios de añadir usuarios, grupos y ACLs.

Ejercicios

Crea 10 usuarios con los nombres que prefieras en LDAP, esos usuarios deben ser objetos de los tipos posixAccount e inetOrgPerson. Estos usuarios tendrán un atributo userPassword.

Para crear las contraseñas de los usuarios:

sudo slappasswd -v
New password: 
Re-enter new password: 
{SSHA}Y8cltEcp9dejk3s9MT9R+uNyxyU54nmR

Y creamos el fichero donde irán todos los usuarios:

nano users.ldif

Y añadimos lo siguiente:

dn: cn=grupo1,ou=Group,dc=freston,dc=cabezas,dc=gonzalonazareno,dc=org
objectClass: posixGroup
cn: grupo1
gidNumber: 2000

dn: uid=adrian,ou=People,dc=freston,dc=cabezas,dc=gonzalonazareno,dc=org
objectClass: top
objectClass: posixAccount
objectClass: inetOrgPerson
cn: Adrian Rodriguez Povea
sn: Rodriguez Povea
uid: adrian
uidNumber: 2001
gidNumber: 2000
homeDirectory: /home/adrian
loginShell: /bin/bash
userPassword: {SSHA}+WUt2/lu5IKTpD+rBMtcjbdJEtGY+n3e
mail: adrian@gmail.com
givenName: adrian

dn: uid=alejandro,ou=People,dc=freston,dc=cabezas,dc=gonzalonazareno,dc=org
objectClass: top
objectClass: posixAccount
objectClass: inetOrgPerson
cn: Alejandro Cabezas Barea
sn: Cabezas Barea
uid: alejandro
uidNumber: 2002
gidNumber: 2000
homeDirectory: /home/alejandro
loginShell: /bin/bash
userPassword: {SSHA}NfyfqlMR7l2ev0Kjpm7RVxYfaRQ+f7Z5
mail: alejandro@gmail.com
givenName: alejandro

dn: uid=celia,ou=People,dc=freston,dc=cabezas,dc=gonzalonazareno,dc=org
objectClass: top
objectClass: posixAccount
objectClass: inetOrgPerson
cn: Celia Garcia Marquez
sn: Garcia Marquez
uid: celia
uidNumber: 2003
gidNumber: 2000
homeDirectory: /home/celia
loginShell: /bin/bash
userPassword: {SSHA}iKNwrH3LIgJOLhTA/FG678Wzj1LJ+TLC
mail: celia@gmail.com
givenName: celia

dn: uid=guillermo,ou=People,dc=freston,dc=cabezas,dc=gonzalonazareno,dc=org
objectClass: top
objectClass: posixAccount
objectClass: inetOrgPerson
cn: Guillermo Vizcaino Rodriguez
sn: Vizcaino Rodriguez
uid: guillermo
uidNumber: 2004
gidNumber: 2000
homeDirectory: /home/guillermo
loginShell: /bin/bash
userPassword: {SSHA}PuC/X1ocHt1U4FK6KquBN575ZQW8cMI0
mail: guillermo@gmail.com
givenName: guillermo

dn: uid=ismael,ou=People,dc=freston,dc=cabezas,dc=gonzalonazareno,dc=org
objectClass: top
objectClass: posixAccount
objectClass: inetOrgPerson
cn: Ismael Santiago Estevez
sn: Santiago Estevez
uid: ismael
uidNumber: 2005
gidNumber: 2000
homeDirectory: /home/ismael
loginShell: /bin/bash
userPassword: {SSHA}8qIg+l21xQ4kCbHum7PRwch2I1BUeHx3
mail: ismael@gmail.com
givenName: ismael

dn: uid=javier,ou=People,dc=freston,dc=cabezas,dc=gonzalonazareno,dc=org
objectClass: top
objectClass: posixAccount
objectClass: inetOrgPerson
cn: Javier Crespillo Bergua
sn: Crespillo Bergua
uid: javier
uidNumber: 2006
gidNumber: 2000
homeDirectory: /home/javier
loginShell: /bin/bash
userPassword: {SSHA}xQb8e9Bh7tTzgmqWHw9s8mkJIS2BcpKY
mail: javier@gmail.com
givenName: javier

dn: uid=jonathan,ou=People,dc=freston,dc=cabezas,dc=gonzalonazareno,dc=org
objectClass: top
objectClass: posixAccount
objectClass: inetOrgPerson
cn: Jonathan Marquez Jimenez
sn: Marquez Jimenez
uid: jonathan
uidNumber: 2007
gidNumber: 2000
homeDirectory: /home/jonathan
loginShell: /bin/bash
userPassword: {SSHA}eSoft2bXJ5YVmJYpaZGMaTb+lG6y5okj
mail: jonathan@gmail.com
givenName: jonathan

dn: uid=jose,ou=People,dc=freston,dc=cabezas,dc=gonzalonazareno,dc=org
objectClass: top
objectClass: posixAccount
objectClass: inetOrgPerson
cn: Jose Calderon Frutos
sn: Calderon Frutos
uid: jose
uidNumber: 2008
gidNumber: 2000
homeDirectory: /home/jose
loginShell: /bin/bash
userPassword: {SSHA}b5BPSFnkBfw3UFWX2V1nrNLJ+0FE+kX+
mail: jose@gmail.com
givenName: jose

dn: uid=luis,ou=People,dc=freston,dc=cabezas,dc=gonzalonazareno,dc=org
objectClass: top
objectClass: posixAccount
objectClass: inetOrgPerson
cn: Luis Millan Hidalgo
sn: Millan Hidalgo
uid: luis
uidNumber: 2009
gidNumber: 2000
homeDirectory: /home/luis
loginShell: /bin/bash
userPassword: {SSHA}QjRavtx09NuP10uUp86TaRBYmNEZq2q0
mail: luis@gmail.com
givenName: luis

dn: uid=manuel,ou=People,dc=freston,dc=cabezas,dc=gonzalonazareno,dc=org
objectClass: top
objectClass: posixAccount
objectClass: inetOrgPerson
cn: Manuel Lora Roman
sn: Lora Roman
uid: manuel
uidNumber: 2010
gidNumber: 2000
homeDirectory: /home/manuel
loginShell: /bin/bash
userPassword: {SSHA}cYoMhxid9k/U35pqrm55r82EbudMKc7t
mail: manuel@gmail.com
givenName: manuel

Para añadirlos a ldap:

ldapadd -x -D "cn=admin,dc=freston,dc=cabezas,dc=gonzalonazareno,dc=org" -W -f users.ldif

Crea 3 grupos en LDAP dentro de una unidad organizativa diferente que sean objetos del tipo groupOfNames. Estos grupos serán: comercial, almacen y admin

Creamos el fichero:

nano groups.ldif

Y le añadimos el siguiente contenido:

dn: cn=comercial,ou=Group,dc=freston,dc=cabezas,dc=gonzalonazareno,dc=org
objectClass: top
objectClass: groupOfNames
cn: comercial
member: 

dn: cn=almacen,ou=Group,dc=freston,dc=cabezas,dc=gonzalonazareno,dc=org
objectClass: top
objectClass: groupOfNames
cn: almacen
member: 

dn: cn=admin,ou=Group,dc=freston,dc=cabezas,dc=gonzalonazareno,dc=org
objectClass: top
objectClass: groupOfNames
cn: admin
member: 

Y añadimos a ldap:

ldapadd -x -D "cn=admin,dc=freston,dc=cabezas,dc=gonzalonazareno,dc=org" -W -f groups.ldif

Añade usuarios que pertenezcan a

Para poder modificar los miembros de un grupo, vamos a mostrar cada apartado del fichero que hemos creado a continuación, pero el fichero es un fichero único que importaremos al final.

Solo al grupo comercial

dn: cn=comercial,ou=Group,dc=freston,dc=cabezas,dc=gonzalonazareno,dc=org
changetype:modify
replace: member
member: uid=adrian,ou=People,dc=freston,dc=cabezas,dc=gonzalonazareno,dc=org

Solo al grupo almacen

dn: cn=almacen,ou=Group,dc=freston,dc=cabezas,dc=gonzalonazareno,dc=org
changetype:modify
replace: member
member: uid=ismael,ou=People,dc=freston,dc=cabezas,dc=gonzalonazareno,dc=org

Al grupo comercial y almacen

dn: cn=comercial,ou=Group,dc=freston,dc=cabezas,dc=gonzalonazareno,dc=org
changetype:modify
add: member
member: uid=celia,ou=People,dc=freston,dc=cabezas,dc=gonzalonazareno,dc=org

dn: cn=almacen,ou=Group,dc=freston,dc=cabezas,dc=gonzalonazareno,dc=org
changetype:modify
add: member
member: uid=celia,ou=People,dc=freston,dc=cabezas,dc=gonzalonazareno,dc=org

Al grupo admin y comercial

dn: cn=admin,ou=Group,dc=freston,dc=cabezas,dc=gonzalonazareno,dc=org
changetype:modify
replace: member
member: uid=guillermo,ou=People,dc=freston,dc=cabezas,dc=gonzalonazareno,dc=org

dn: cn=comercial,ou=Group,dc=freston,dc=cabezas,dc=gonzalonazareno,dc=org
changetype:modify
add: member
member: uid=guillermo,ou=People,dc=freston,dc=cabezas,dc=gonzalonazareno,dc=org

Solo al grupo admin

dn: cn=admin,ou=Group,dc=freston,dc=cabezas,dc=gonzalonazareno,dc=org
changetype:modify
add: member
member: uid=alejandro,ou=People,dc=freston,dc=cabezas,dc=gonzalonazareno,dc=org

Importarlo a ldap

Creamos el fichero:

nano modify-groups.ldif

Añadimos todo lo anterior, y lo importamos a ldap:

ldapadd -x -D "cn=admin,dc=freston,dc=cabezas,dc=gonzalonazareno,dc=org" -W -f modify-groups.ldif

Modifica OpenLDAP apropiadamente para que se pueda obtener los grupos a los que pertenece cada usuario a través del atributo “memberOf”.

Módulo memberOf

Lo primero que tenemos que hacer es cargar el módulo que permite su consulta, creamos el fichero:

nano memberOf_config.ldif

Y le añadimos el siguiente contenido:

dn: cn=module,cn=config
cn: module
objectClass: olcModuleList
objectclass: top
olcModuleLoad: memberof.la
olcModulePath: /usr/lib/ldap

dn: olcOverlay={0}memberof,olcDatabase={1}mdb,cn=config
objectClass: olcConfig
objectClass: olcMemberOf
objectClass: olcOverlayConfig
objectClass: top
olcOverlay: memberof
olcMemberOfDangling: ignore
olcMemberOfRefInt: TRUE
olcMemberOfGroupOC: groupOfNames
olcMemberOfMemberAD: member
olcMemberOfMemberOfAD: memberOf

Cargamos el módulo:

sudo ldapadd -Y EXTERNAL -H ldapi:/// -f memberOf_config.ldif 

Integridad referencial

Para que los objetos tenga relación y no pierdan coherencia tenemos que cargar la integridad referencial, para ello:

nano int.ldif

Y añadimos el siguiente contenido:

dn: cn=module,cn=config
cn: module
objectclass: olcModuleList
objectclass: top
olcmoduleload: refint.la
olcmodulepath: /usr/lib/ldap

dn: olcOverlay={1}refint,olcDatabase={1}mdb,cn=config
objectClass: olcConfig
objectClass: olcOverlayConfig
objectClass: olcRefintConfig
objectClass: top
olcOverlay: {1}refint
olcRefintAttribute: memberof member manager owner

dn: olcOverlay=memberof,olcDatabase={1}mdb,cn=config
objectClass: olcOverlayConfig
objectClass: olcMemberOf
olcOverlay: memberof
olcMemberOfRefint: TRUE

Lo cargamos a ldap:

sudo ldapadd -Y EXTERNAL -H ldapi:/// -f int.ldif

Modificación grupos

Al haber cargado la configuración anterior después de crear los grupos, a dichos grupos no se le aplican las configuraciones anteriores, así que para eliminarlos:

sudo ldapdelete -x -D "cn=admin,dc=freston,dc=cabezas,dc=gonzalonazareno,dc=org" 'cn=comercial,ou=Group,dc=freston,dc=cabezas,dc=gonzalonazareno,dc=org' -W
sudo ldapdelete -x -D "cn=admin,dc=freston,dc=cabezas,dc=gonzalonazareno,dc=org" 'cn=almacen,ou=Group,dc=freston,dc=cabezas,dc=gonzalonazareno,dc=org' -W
sudo ldapdelete -x -D "cn=admin,dc=freston,dc=cabezas,dc=gonzalonazareno,dc=org" 'cn=admin,ou=Group,dc=freston,dc=cabezas,dc=gonzalonazareno,dc=org' -W

Y los volvemos a añadir y a los usuarios:

ldapadd -x -D "cn=admin,dc=freston,dc=cabezas,dc=gonzalonazareno,dc=org" -W -f groups.ldif
ldapadd -x -D "cn=admin,dc=freston,dc=cabezas,dc=gonzalonazareno,dc=org" -W -f modify-groups.ldif

Consultas a memberOf

¿De dónde es miembro uid=alejandro?

ldapsearch -LL -Y EXTERNAL -H ldapi:/// "(uid=alejandro)" -b dc=freston,dc=cabezas,dc=gonzalonazareno,dc=org memberOf
SASL/EXTERNAL authentication started
SASL username: gidNumber=1000+uidNumber=1000,cn=peercred,cn=external,cn=auth
SASL SSF: 0
version: 1

dn: uid=alejandro,ou=People,dc=freston,dc=cabezas,dc=gonzalonazareno,dc=org
memberOf: cn=admin,ou=Group,dc=freston,dc=cabezas,dc=gonzalonazareno,dc=org

¿De dónde es miembro uid=guillermo?

ldapsearch -LL -Y EXTERNAL -H ldapi:/// "(uid=guillermo)" -b dc=freston,dc=cabezas,dc=gonzalonazareno,dc=org memberOf
SASL/EXTERNAL authentication started
SASL username: gidNumber=1000+uidNumber=1000,cn=peercred,cn=external,cn=auth
SASL SSF: 0
version: 1

dn: uid=guillermo,ou=People,dc=freston,dc=cabezas,dc=gonzalonazareno,dc=org
memberOf: cn=admin,ou=Group,dc=freston,dc=cabezas,dc=gonzalonazareno,dc=org
memberOf: cn=comercial,ou=Group,dc=freston,dc=cabezas,dc=gonzalonazareno,dc=org

¿De dónde es miembro uid=celia?

ldapsearch -LL -Y EXTERNAL -H ldapi:/// "(uid=celia)" -b dc=freston,dc=cabezas,dc=gonzalonazareno,dc=org memberOf
SASL/EXTERNAL authentication started
SASL username: gidNumber=1000+uidNumber=1000,cn=peercred,cn=external,cn=auth
SASL SSF: 0
version: 1

dn: uid=celia,ou=People,dc=freston,dc=cabezas,dc=gonzalonazareno,dc=org
memberOf: cn=comercial,ou=Group,dc=freston,dc=cabezas,dc=gonzalonazareno,dc=org
memberOf: cn=almacen,ou=Group,dc=freston,dc=cabezas,dc=gonzalonazareno,dc=org

¿De dónde es miembro uid=ismael?

ldapsearch -LL -Y EXTERNAL -H ldapi:/// "(uid=ismael)" -b dc=freston,dc=cabezas,dc=gonzalonazareno,dc=org memberOf
SASL/EXTERNAL authentication started
SASL username: gidNumber=1000+uidNumber=1000,cn=peercred,cn=external,cn=auth
SASL SSF: 0
version: 1

dn: uid=ismael,ou=People,dc=freston,dc=cabezas,dc=gonzalonazareno,dc=org
memberOf: cn=almacen,ou=Group,dc=freston,dc=cabezas,dc=gonzalonazareno,dc=org

¿De dónde es miembro uid=adrian?

ldapsearch -LL -Y EXTERNAL -H ldapi:/// "(uid=adrian)" -b dc=freston,dc=cabezas,dc=gonzalonazareno,dc=org memberOf
SASL/EXTERNAL authentication started
SASL username: gidNumber=1000+uidNumber=1000,cn=peercred,cn=external,cn=auth
SASL SSF: 0
version: 1

dn: uid=adrian,ou=People,dc=freston,dc=cabezas,dc=gonzalonazareno,dc=org
memberOf: cn=comercial,ou=Group,dc=freston,dc=cabezas,dc=gonzalonazareno,dc=org