Warning: This information may be outdated. Please note the date of the post.

Crear usuarios

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.

  • El atributo posixAccount implica tener:

    • cn (Nombre completo del usuario)
    • uid (identificador único de nombre) > 1000
    • gidNumber (Identificador de grupo) > 1000
  • El atributo inetOrgPerson es un atributo que no requiere adicionales.

  • El atributo userPassword lo obtenemos con el siguiente comando, especificando la contraseña del usuario, en mi caso lo he ejecutado manualmente ya que no son muchos usuarios pero podríamos hacerlo con un script.

debian@freston:~$ sudo slappasswd -h {SSHA}
New password: 
Re-enter new password: 
{SSHA}IWO9oVgji7cI/p/0hz2q/yt/c9mZDWX8

Creamos el fichero usuarios.ldif con el siguiente contenido:


dn: uid=celia,ou=People,dc=freston,dc=celia,dc=gonzalonazareno,dc=org
objectClass: posixAccount
objectClass: inetOrgPerson
objectClass: top
cn: Celia Garcia
gidNumber: 2001
homeDirectory: /home/celia
loginShell: /bin/bash
sn: celia
uid: celia
uidNumber: 2001
userPassword: {SSHA}IWO9oVgji7cI/p/0hz2q/yt/c9mZDWX8

dn: uid=maria,ou=People,dc=freston,dc=celia,dc=gonzalonazareno,dc=org
objectClass: posixAccount
objectClass: inetOrgPerson
objectClass: top
cn: Maria Jesus
gidNumber: 2002
homeDirectory: /home/maria
loginShell: /bin/bash
sn: maria
uid: maria
uidNumber: 2002
userPassword: {SSHA}aL6P65hiTDxWxRD1++7e/baB+hi7DQon

dn: uid=mario,ou=People,dc=freston,dc=celia,dc=gonzalonazareno,dc=org
objectClass: posixAccount
objectClass: inetOrgPerson
objectClass: top
cn: Mario Garcia
gidNumber: 2003
homeDirectory: /home/mario
loginShell: /bin/bash
sn: mario
uid: mario
uidNumber: 2003
userPassword: {SSHA}crEyszzAYZ34MwDgShygZpbQ0ouXR03p

dn: uid=joni,ou=People,dc=freston,dc=celia,dc=gonzalonazareno,dc=org
objectClass: posixAccount
objectClass: inetOrgPerson
objectClass: top
cn: Jonathan Marquez
gidNumber: 2004
homeDirectory: /home/joni
loginShell: /bin/bash
sn: joni
uid: joni
uidNumber: 2004
userPassword: {SSHA}fIj8uX/5620PtKXj6txJWRE1sfwIC7sW

dn: uid=adrian,ou=People,dc=freston,dc=celia,dc=gonzalonazareno,dc=org
objectClass: posixAccount
objectClass: inetOrgPerson
objectClass: top
cn: Adrian Garcia
gidNumber: 2005
homeDirectory: /home/adrian
loginShell: /bin/bash
sn: adri
uid: adrian
uidNumber: 2005
userPassword: {SSHA}0zmtwpE0l/LPP66t86OlA4HZrXIShlVr

dn: uid=ana,ou=People,dc=freston,dc=celia,dc=gonzalonazareno,dc=org
objectClass: posixAccount
objectClass: inetOrgPerson
objectClass: top
cn: Ana Rodriguez
gidNumber: 2006
homeDirectory: /home/ana
loginShell: /bin/bash
sn: ana
uid: ana
uidNumber: 2006
userPassword: {SSHA}d1oN9Uk36cp5xJ53Dbe8hHQhl4504+xY

dn: uid=lorena,ou=People,dc=freston,dc=celia,dc=gonzalonazareno,dc=org
objectClass: posixAccount
objectClass: inetOrgPerson
objectClass: top
cn: Lorena Garcia
gidNumber: 2007
homeDirectory: /home/lorena
loginShell: /bin/bash
sn: lorena
uid: lorena
uidNumber: 2007
userPassword: {SSHA}+itrewH/UYWCVoQDnXcvcr2fT3IO55t2

dn: uid=sara,ou=People,dc=freston,dc=celia,dc=gonzalonazareno,dc=org
objectClass: posixAccount
objectClass: inetOrgPerson
objectClass: top
cn: Sara Gonzalez
gidNumber: 2008
homeDirectory: /home/sara
loginShell: /bin/bash
sn: sara
uid: sara
uidNumber: 2008
userPassword: {SSHA}Yapb6M5GYjhUpyNSKpdWAI0lDzzaJ+rP

dn: uid=rosario,ou=People,dc=freston,dc=celia,dc=gonzalonazareno,dc=org
objectClass: posixAccount
objectClass: inetOrgPerson
objectClass: top
cn: Rosario Jadilla
gidNumber: 2009
homeDirectory: /home/rosario
loginShell: /bin/bash
sn: rosario
uid: rosario
uidNumber: 2009
userPassword: {SSHA}fdbK+kMk5BjZUyyy4SAi9KNOrExHZxkS

dn: uid=antonio,ou=People,dc=freston,dc=celia,dc=gonzalonazareno,dc=org
objectClass: posixAccount
objectClass: inetOrgPerson
objectClass: top
cn: Antonio Lainez
gidNumber: 2010
homeDirectory: /home/antonio
loginShell: /bin/bash
sn: antonio
uid: antonio
uidNumber: 2010
userPassword: {SSHA}XxOFWtmpAfaCY0fxF6JKuhZ69cq5iRkS

Ya creado el fichero ejecutamos el siguiente comando para agregar todos los usuarios:

ldapadd -x -D 'cn=admin,dc=freston,dc=celia,dc=gonzalonazareno,dc=org' -W -f usuarios.ldif

Vemos como se añaden los usuarios:

debian@freston:~$ ldapadd -x -D 'cn=admin,dc=freston,dc=celia,dc=gonzalonazareno,dc=org' -W -f usuarios.ldif
Enter LDAP Password: 

adding new entry "uid=celia,ou=People,dc=freston,dc=celia,dc=gonzalonazareno,dc=org"

adding new entry "uid=maria,ou=People,dc=freston,dc=celia,dc=gonzalonazareno,dc=org"

adding new entry "uid=mario,ou=People,dc=freston,dc=celia,dc=gonzalonazareno,dc=org"

adding new entry "uid=joni,ou=People,dc=freston,dc=celia,dc=gonzalonazareno,dc=org"

adding new entry "uid=adrian,ou=People,dc=freston,dc=celia,dc=gonzalonazareno,dc=org"

adding new entry "uid=ana,ou=People,dc=freston,dc=celia,dc=gonzalonazareno,dc=org"

adding new entry "uid=lorena,ou=People,dc=freston,dc=celia,dc=gonzalonazareno,dc=org"

adding new entry "uid=sara,ou=People,dc=freston,dc=celia,dc=gonzalonazareno,dc=org"

adding new entry "uid=rosario,ou=People,dc=freston,dc=celia,dc=gonzalonazareno,dc=org"

adding new entry "uid=antonio,ou=People,dc=freston,dc=celia,dc=gonzalonazareno,dc=org"

Crear grupos

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 otro fichero pero esta vez para los grupos

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

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

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

Los añadimos:

ldapadd -x -D cn=admin,dc=freston,dc=celia,dc=gonzalonazareno,dc=org -W -f grupos1.ldif

Vemos como se añaden:

debian@freston:~$ ldapadd -x -D cn=admin,dc=freston,dc=celia,dc=gonzalonazareno,dc=org -W -f grupos1.ldif
Enter LDAP Password: 
adding new entry "cn=comercial,ou=Group,dc=freston,dc=celia,dc=gonzalonazareno,dc=org"

adding new entry "cn=almacen,ou=Group,dc=freston,dc=celia,dc=gonzalonazareno,dc=org"

adding new entry "cn=admin,ou=Group,dc=freston,dc=celia,dc=gonzalonazareno,dc=org"

Añadir usuarios

Añade usuarios que pertenezcan a:

  • Solo al grupo comercial
  • Solo al grupo almacen
  • Al grupo comercial y almacen
  • Al grupo admin y comercial
  • Solo al grupo admin

Creamos el fichero nuevo para mover los usuario a los grupos indicados.

modificargrupos.ldif

# Solo al grupo comercial
dn: cn=comercial,ou=Group,dc=freston,dc=celia,dc=gonzalonazareno,dc=org
changetype:modify
add: member
member: uid=joni,ou=People,dc=freston,dc=celia,dc=gonzalonazareno,dc=org

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

# Solo al grupo almacen 
dn: cn=almacen,ou=Group,dc=freston,dc=celia,dc=gonzalonazareno,dc=org
changetype:modify
add: member
member: uid=maria,ou=People,dc=freston,dc=celia,dc=gonzalonazareno,dc=org

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

# Al grupo comercial y almacen
dn: cn=comercial,ou=Group,dc=freston,dc=celia,dc=gonzalonazareno,dc=org
changetype:modify
add: member
member: uid=mario,ou=People,dc=freston,dc=celia,dc=gonzalonazareno,dc=org

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

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

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

# Al grupo admin y al comercial

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

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

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

# Solo al grupo admin 

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

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

Ejecutamos el siguiente comando para añadirlos:

ldapmodify -x -D cn=admin,dc=freston,dc=celia,dc=gonzalonazareno,dc=org -W -f modificargrupos.ldif

Comprobamos que se han modificado:

debian@freston:~$ ldapsearch -x -h freston -b ou=Group,dc=freston,dc=celia,dc=gonzalonazareno,dc=org
# extended LDIF
#
# LDAPv3
# base <ou=Group,dc=freston,dc=celia,dc=gonzalonazareno,dc=org> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#

# Group, freston.celia.gonzalonazareno.org
dn: ou=Group,dc=freston,dc=celia,dc=gonzalonazareno,dc=org
objectClass: top
objectClass: organizationalUnit
ou: Group

# admin, Group, freston.celia.gonzalonazareno.org
dn: cn=admin,ou=Group,dc=freston,dc=celia,dc=gonzalonazareno,dc=org
objectClass: top
objectClass: groupOfNames
cn: admin
member:
member: uid=celia,ou=People,dc=freston,dc=celia,dc=gonzalonazareno,dc=org
member: uid=lorena,ou=People,dc=freston,dc=celia,dc=gonzalonazareno,dc=org
member: uid=antonio,ou=People,dc=freston,dc=celia,dc=gonzalonazareno,dc=org
member: uid=adrian,ou=People,dc=freston,dc=celia,dc=gonzalonazareno,dc=org

# almacen, Group, freston.celia.gonzalonazareno.org
dn: cn=almacen,ou=Group,dc=freston,dc=celia,dc=gonzalonazareno,dc=org
objectClass: top
objectClass: groupOfNames
cn: almacen
member:
member: uid=maria,ou=People,dc=freston,dc=celia,dc=gonzalonazareno,dc=org
member: uid=ana,ou=People,dc=freston,dc=celia,dc=gonzalonazareno,dc=org
member: uid=mario,ou=People,dc=freston,dc=celia,dc=gonzalonazareno,dc=org
member: uid=rosario,ou=People,dc=freston,dc=celia,dc=gonzalonazareno,dc=org

# comercial, Group, freston.celia.gonzalonazareno.org
dn: cn=comercial,ou=Group,dc=freston,dc=celia,dc=gonzalonazareno,dc=org
objectClass: top
objectClass: groupOfNames
cn: comercial
member:
member: uid=joni,ou=People,dc=freston,dc=celia,dc=gonzalonazareno,dc=org
member: uid=sara,ou=People,dc=freston,dc=celia,dc=gonzalonazareno,dc=org
member: uid=mario,ou=People,dc=freston,dc=celia,dc=gonzalonazareno,dc=org
member: uid=rosario,ou=People,dc=freston,dc=celia,dc=gonzalonazareno,dc=org
member: uid=celia,ou=People,dc=freston,dc=celia,dc=gonzalonazareno,dc=org
member: uid=lorena,ou=People,dc=freston,dc=celia,dc=gonzalonazareno,dc=org

# search result
search: 2
result: 0 Success

# numResponses: 5
# numEntries: 4

Atributo ‘memberOf’

Es un atributo que se refiere al ‘ser miembro y pertenencia’ de un grupo.

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

Lo primero que tenemos que hacer es crear una serie de ficheros .ldif para esta configuración.

Ficheros de configuración ldap: memberOf

Estos ficheros cargan el atributo memberOf.

Creamos los ficheros con el siguiente contenido:

memberof_config.ldif

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

memberof_config2.ldif

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

memberof_config3.ldif

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

Cargamos la configuración de la siguiente manera:

debian@freston:~$ sudo ldapadd -Y EXTERNAL -H ldapi:/// -f memberof_config.ldif 
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
adding new entry "cn=module,cn=config"

debian@freston:~$ sudo ldapadd -Y EXTERNAL -H ldapi:/// -f memberof_config2.ldif 
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
adding new entry "olcOverlay={0}memberof,olcDatabase={1}mdb,cn=config"

debian@freston:~$ sudo ldapadd -Y EXTERNAL -H ldapi:/// -f memberof_config3.ldif 
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
adding new entry "cn=module,cn=config"

adding new entry "olcOverlay={1}refint,olcDatabase={1}mdb,cn=config"

Actualizar grupos y usuarios para memberOf

Para comprobar que funciona esto, necesitamos eliminar todos los grupos que hemos creado anteriormente, y después volver a crearlos para que se cargue adecuadamente el atributo.

# Borrar los grupos
ldapdelete -x -D "cn=admin,dc=freston,dc=celia,dc=gonzalonazareno,dc=org" 'cn=nombredelgrupo,ou=Group,dc=freston,dc=celia,dc=gonzalonazareno,dc=org' -W
debian@freston:~$ ldapdelete -x -D "cn=admin,dc=freston,dc=celia,dc=gonzalonazareno,dc=org" 'cn=comercial,ou=Group,dc=freston,dc=celia,dc=gonzalonazareno,dc=org' -W
Enter LDAP Password: 
debian@freston:~$ ldapdelete -x -D "cn=admin,dc=freston,dc=celia,dc=gonzalonazareno,dc=org" 'cn=almacen,ou=Group,dc=freston,dc=celia,dc=gonzalonazareno,dc=org' -W
Enter LDAP Password: 
debian@freston:~$ ldapdelete -x -D "cn=admin,dc=freston,dc=celia,dc=gonzalonazareno,dc=org" 'cn=admin,ou=Group,dc=freston,dc=celia,dc=gonzalonazareno,dc=org' -W
Enter LDAP Password: 

Los agregamos de nuevo:

ldapadd -x -D cn=admin,dc=freston,dc=celia,dc=gonzalonazareno,dc=org -W -f grupos1.ldif

Comprobamos que se han agregado:

debian@freston:~$ ldapadd -x -D cn=admin,dc=freston,dc=celia,dc=gonzalonazareno,dc=org -W -f grupos1.ldif
Enter LDAP Password: 
adding new entry "cn=comercial,ou=Group,dc=freston,dc=celia,dc=gonzalonazareno,dc=org"

adding new entry "cn=almacen,ou=Group,dc=freston,dc=celia,dc=gonzalonazareno,dc=org"

adding new entry "cn=admin,ou=Group,dc=freston,dc=celia,dc=gonzalonazareno,dc=org"

Modificamos los usuarios a los grupos de nuevo:

ldapmodify -x -D cn=admin,dc=freston,dc=celia,dc=gonzalonazareno,dc=org -W -f modificargrupos.ldif

Y ahora hacemos una consulta externa , indicando el nombre identificador para ver si realmente se ha habilitado el atributo memberOf .

ldapsearch -LL -Y EXTERNAL -H ldapi:/// "(uid=lorena)" -b dc=freston,dc=celia,dc=gonzalonazareno,dc=org memberOf

Comprobación memberOf

Como podemos comprobar efectivamente aparece de qué grupo es cada usuario.

debian@freston:~$ ldapsearch -LL -Y EXTERNAL -H ldapi:/// "(uid=lorena)" -b dc=freston,dc=celia,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=lorena,ou=People,dc=freston,dc=celia,dc=gonzalonazareno,dc=org
memberOf: cn=admin,ou=Group,dc=freston,dc=celia,dc=gonzalonazareno,dc=org
memberOf: cn=comercial,ou=Group,dc=freston,dc=celia,dc=gonzalonazareno,dc=org

debian@freston:~$ ldapsearch -LL -Y EXTERNAL -H ldapi:/// "(uid=celia)" -b dc=freston,dc=celia,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=celia,dc=gonzalonazareno,dc=org
memberOf: cn=admin,ou=Group,dc=freston,dc=celia,dc=gonzalonazareno,dc=org
memberOf: cn=comercial,ou=Group,dc=freston,dc=celia,dc=gonzalonazareno,dc=org

debian@freston:~$ ldapsearch -LL -Y EXTERNAL -H ldapi:/// "(uid=joni)" -b dc=freston,dc=celia,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=joni,ou=People,dc=freston,dc=celia,dc=gonzalonazareno,dc=org
memberOf: cn=comercial,ou=Group,dc=freston,dc=celia,dc=gonzalonazareno,dc=org

ACLs

Para crear y actualizar ACL podemos usar la herramienta ldapmodify. Esta herramienta permite la creación, modificación y eliminación de cualquier conjunto de atributos asociados con una entrada en el directorio activo. Así pudiendo administrar y controlar el acceso a la información.

Las ACL actuales las podemos ver de la siguiente manera:

debian@freston:~$ sudo ldapsearch -LLLQ -Y EXTERNAL -H ldapi:/// -b cn=config -s one olcAccess
dn: cn=module{0},cn=config

dn: cn=module{1},cn=config

dn: cn=module{2},cn=config

dn: cn=schema,cn=config

dn: olcBackend={0}mdb,cn=config

dn: olcDatabase={-1}frontend,cn=config
olcAccess: {0}to * by dn.exact=gidNumber=0+uidNumber=0,cn=peercred,cn=external
 ,cn=auth manage by * break
olcAccess: {1}to dn.exact="" by * read
olcAccess: {2}to dn.base="cn=Subschema" by * read

dn: olcDatabase={0}config,cn=config
olcAccess: {0}to * by dn.exact=gidNumber=0+uidNumber=0,cn=peercred,cn=external
 ,cn=auth manage by * break

dn: olcDatabase={1}mdb,cn=config
olcAccess: {0}to attrs=userPassword by self write by anonymous auth by * none
olcAccess: {1}to attrs=shadowLastChange by self write by * read
olcAccess: {2}to * by * read

Crea las ACLs necesarias para que los usuarios del grupo almacen puedan ver todos los atributos de todos los usuarios pero solo puedan modificar las suyas.

Agregar a un grupo a la información de control de acceso

Creamos el fichero .ldif, podemos darle los permisos de dos formas:

  • Contenido del fichero .ldif
dn: olcDatabase={1}mdb,cn=config
changetype: modify
add: olcAccess
olcAccess: to dn.base="" by group="cn=almacen,ou=Groups,dc=freston,dc=celia,dc=gonzalonazareno,dc=org" by self write
olcAccess: to dn.base="" by group="cn=almacen,ou=Groups,dc=freston,dc=celia,dc=gonzalonazareno,dc=org" read
olcAccess: to dn.base="" by group="cn=almacen,ou=Groups,dc=freston,dc=celia,dc=gonzalonazareno,dc=org" search
  • Contenido del fichero 2
dn: olcDatabase={1}mdb,cn=config
changetype: modify
add: olcAccess
olcAccess: to dn.subtree="ou=Group,dc=freston,dc=celia,dc=gonzalonazareno,dc=org" 
  by group.exact="cn=almacen,ou=Group,ou=freston,dc=celia,dc=gonzalonazareno,dc=org" read
  by self write
  by * search
  • Así agregamos la ACL
debian@freston:~$ sudo ldapmodify -Y EXTERNAL -H ldapi:/// -f acl1.ldif 
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "olcDatabase={1}mdb,cn=config"
  • Comprobamos que se han añadido las ACL correctamente.
debian@freston:~$ sudo ldapsearch -LLLQ -Y EXTERNAL -H ldapi:/// -b cn=config -s one olcAccess
dn: cn=module{0},cn=config

dn: cn=module{1},cn=config

dn: cn=module{2},cn=config

dn: cn=schema,cn=config

dn: olcBackend={0}mdb,cn=config

dn: olcDatabase={-1}frontend,cn=config
olcAccess: {0}to * by dn.exact=gidNumber=0+uidNumber=0,cn=peercred,cn=external
 ,cn=auth manage by * break
olcAccess: {1}to dn.exact="" by * read
olcAccess: {2}to dn.base="cn=Subschema" by * read

dn: olcDatabase={0}config,cn=config
olcAccess: {0}to * by dn.exact=gidNumber=0+uidNumber=0,cn=peercred,cn=external
 ,cn=auth manage by * break

dn: olcDatabase={1}mdb,cn=config
olcAccess: {0}to attrs=userPassword by self write by anonymous auth by * none
olcAccess: {1}to attrs=shadowLastChange by self write by * read
olcAccess: {2}to * by * read
olcAccess: {3}to dn.base="" by group="cn=almacen,ou=Groups,dc=freston,dc=celia
 ,dc=gonzalonazareno,dc=org" read
olcAccess: {4}to dn.base="" by group="cn=almacen,ou=Groups,dc=freston,dc=celia
 ,dc=gonzalonazareno,dc=org" search
olcAccess: {5}to dn.base="" by group="cn=almacen,ou=Groups,dc=freston,dc=celia
 ,dc=gonzalonazareno,dc=org" by self write
olcAccess: {6}to dn.subtree="ou=Group,dc=freston,dc=celia,dc=gonzalonazareno,d
 c=org"  by group.exact="cn=almacen,ou=Group,ou=freston,dc=celia,dc=gonzalonaz
 areno,dc=org" read by self write by * search

Crea las ACLs necesarias para que los usuarios del grupo admin puedan ver y modificar cualquier atributo de cualquier objeto.

  • Le damos el permiso al grupo admin a modificar cualquier atributo.
dn: olcDatabase={1}mdb,cn=config
changetype: modify
add: olcAccess
olcAccess: {1}to * by dn="cn=admin,dc=freston,dc=celia,dc=gonzalonazareno,dc=org" write by group.exact="cn=admin,ou=Group,dc=freston,dc=celia,dc=gonzalonazareno,dc=org" write
  • Lo aplicamos
debian@freston:~$ sudo ldapmodify -Y EXTERNAL -H ldapi:/// -f acl3.ldif 
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "olcDatabase={1}mdb,cn=config"
  • Comprobamos que se ha añadido
debian@freston:~$ sudo ldapsearch -LLLQ -Y EXTERNAL -H ldapi:/// -b cn=config -s one olcAccess
dn: cn=module{0},cn=config

dn: cn=module{1},cn=config

dn: cn=module{2},cn=config

dn: cn=schema,cn=config

dn: olcBackend={0}mdb,cn=config

dn: olcDatabase={-1}frontend,cn=config
olcAccess: {0}to * by dn.exact=gidNumber=0+uidNumber=0,cn=peercred,cn=external
 ,cn=auth manage by * break
olcAccess: {1}to dn.exact="" by * read
olcAccess: {2}to dn.base="cn=Subschema" by * read

dn: olcDatabase={0}config,cn=config
olcAccess: {0}to * by dn.exact=gidNumber=0+uidNumber=0,cn=peercred,cn=external
 ,cn=auth manage by * break

dn: olcDatabase={1}mdb,cn=config
olcAccess: {0}to attrs=userPassword by self write by anonymous auth by * none
olcAccess: {1}to * by dn="cn=admin,dc=freston,dc=celia,dc=gonzalonazareno,dc=o
 rg" write by group.exact="cn=admin,ou=Group,dc=freston,dc=celia,dc=gonzalonaz
 areno,dc=org" write
olcAccess: {2}to attrs=shadowLastChange by self write by * read
olcAccess: {3}to * by * read
olcAccess: {4}to dn.base="" by group="cn=almacen,ou=Groups,dc=freston,dc=celia
 ,dc=gonzalonazareno,dc=org" read
olcAccess: {5}to dn.base="" by group="cn=almacen,ou=Groups,dc=freston,dc=celia
 ,dc=gonzalonazareno,dc=org" search
olcAccess: {6}to dn.base="" by group="cn=almacen,ou=Groups,dc=freston,dc=celia
 ,dc=gonzalonazareno,dc=org" by self write
olcAccess: {7}to dn.subtree="ou=Group,dc=freston,dc=celia,dc=gonzalonazareno,d
 c=org"  by group.exact="cn=almacen,ou=Group,ou=freston,dc=celia,dc=gonzalonaz
 areno,dc=org" read by self write by * search

Fuentes:

https://syspass-doc.readthedocs.io/en/3.1/configuration/ldap.html

https://www.openldap.org/lists/openldap-technical/201511/msg00154.html

https://wiki.debian.org/LDAP/OpenLDAPSetup#Access_Control_Lists

https://tldp.org/HOWTO/LDAP-HOWTO/accesscontrol.html

https://www.openldap.org/doc/admin24/access-control.html

http://www.zytrax.com/books/ldap/ch6/slapd-config.html#use-security

https://tldp.org/HOWTO/LDAP-HOWTO/accesscontrol.html