cristian Lozano

Creació de contingut dins del directori

Un cop instal·lat el servidor OpenLDAP, el directori es troba buit. Per fer-lo funcional i útil en un entorn empresarial, cal poblar-lo amb una estructura jeràrquica que reflecteixi l’organització real de l’empresa.

Hem optat per una estructura basada en Unitats Organitzatives (OUs) per departaments, ja que permet:

  • Aplicar polítiques d’accés i permisos de forma granular per departament.
  • Facilitar la cerca i gestió dels usuaris de forma ordenada.
  • Escalar fàcilment afegint nous departaments o usuaris sense afectar la resta.
  • Simular un entorn empresarial real, preparat per connectar clients Linux i Windows.

Estructura del directori

L’arbre del directori LDAP ha quedat organitzat de la manera següent:

dc=equipo2,dc=es
├── ou=usuaris
│   ├── ou=major
│   │   ├── uid=jfernandez
│   │   └── uid=mruiz
│   ├── ou=clientes
│   │   ├── uid=ptorres
│   │   └── uid=agomez
│   └── ou=marketing
│       ├── uid=lcastell
│       └── uid=droig
└── ou=grups
    ├── cn=major
    ├── cn=clientes
    └── cn=marketing

Hem creat 3 departaments (major, clientes, marketing), cadascun amb la seva pròpia OU dins d’ou=usuaris i el seu grup corresponent dins d’ou=grups. Cada usuari té tots els atributs necessaris per a un entorn posix real: uid, uidNumber, gidNumber, homeDirectory i loginShell.

Creació de les Unitats Organitzatives

El primer pas és crear les OUs, ja que els usuaris i grups han d’existir dins d’elles. L’ordre és important: les OUs pare han d’existir abans que les filles.

Arxiu ubicat a /home/vagrant/ou.ldif

# OU per a usuaris
dn: ou=usuaris,dc=equipo2,dc=es
objectClass: organizationalUnit
ou: usuaris
description: Unitat organitzativa que conte tots els usuaris de l'empresa

# OU per a grups
dn: ou=grups,dc=equipo2,dc=es
objectClass: organizationalUnit
ou: grups
description: Unitat organitzativa que conte tots els grups de l'empresa

# OU departament Major
dn: ou=major,ou=usuaris,dc=equipo2,dc=es
objectClass: organizationalUnit
ou: major
description: Departament de Comptes Major

# OU departament Clientes
dn: ou=clientes,ou=usuaris,dc=equipo2,dc=es
objectClass: organizationalUnit
ou: clientes
description: Departament d'Atencio al Client

# OU departament Marketing
dn: ou=marketing,ou=usuaris,dc=equipo2,dc=es
objectClass: organizationalUnit
ou: marketing
description: Departament de Marketing i Comunicacio

Ara hem de carregar les OUs.

ldapadd -x -D "cn=admin,dc=equipo2,dc=es" -W -f /home/vagrant/ou.ldif

Les opcions del comandament signifiquen:

  • x → Autenticació simple (sense SASL).
  • D → DN de l’administrador LDAP per autenticar-se.
  • W → Demana la contrasenya de forma interactiva.
  • f → Ruta al fitxer LDIF que es vol carregar.

Creació dels Grups

Els grups permeten assignar permisos col·lectius a conjunts d’usuaris. Fem servir l’objectClass posixGroup, que és compatible amb sistemes Linux.

Arxiu ubicat a /home/vagrant/grups.ldif

# Grup Major
dn: cn=major,ou=grups,dc=equipo2,dc=es
objectClass: posixGroup
cn: major
gidNumber: 5000
description: Grup del departament de Comptes Major

# Grup Clientes
dn: cn=clientes,ou=grups,dc=equipo2,dc=es
objectClass: posixGroup
cn: clientes
gidNumber: 5001
description: Grup del departament d'Atencio al Client

# Grup Marketing
dn: cn=marketing,ou=grups,dc=equipo2,dc=es
objectClass: posixGroup
cn: marketing
gidNumber: 5002
description: Grup del departament de Marketing

Comanda per carregar tots els usuaris:

ldapadd -x -D "cn=admin,dc=equipo2,dc=es" -W -f /home/vagrant/usuaris.ldif

Verificació de l'estructura

Un cop carregades totes les dades, cal verificar que tot s’ha creat correctament amb “ldapsearch”:

Veure tot l’arbre de directoris:

ldapsearch -x -D “cn=admin,dc=equipo2,dc=es” -W  -b “dc=equipo2,dc=es” “(objectClass=*)” dn

Veure tots els usuaris amb detalls:

ldapsearch -x -D “cn=admin,dc=equipo2,dc=es” -W  -b “ou=usuaris,dc=equipo2,dc=es”  “(objectClass=posixAccount)” uid cn mail homeDirectory

Veure tots els grups:

ldapsearch -x -D “cn=admin,dc=equipo2,dc=es” -W  -b “ou=grups,dc=equipo2,dc=es” “(objectClass=posixGroup)”

Buscar un usuari concret:

ldapsearch -x -D “cn=admin,dc=equipo2,dc=es” -W   -b “dc=equipo2,dc=es” “(uid=jfernandez)”

Resum i conclusions

Hem creat un directori LDAP completament funcional que simula l’estructura d’una empresa real amb 3 departaments, 3 grups posix i 6 usuaris amb tots els atributs necessaris.

Aspectes clau de la implementació:

S’han fet servir fitxers .ldif separats per a OUs, grups i usuaris, mantenint l’ordre correcte de càrrega.

Les contrasenyes s’han xifrat amb SSHA per garantir la seguretat.

Cada usuari té homeDirectory i loginShell correctes per poder iniciar sessió des de clients Linux.

L’estructura jeràrquica permet aplicar polítiques d’accés diferenciades per departament en el futur.

Aquesta estructura és la base per a les tasques posteriors de connexió de clients Linux i Windows al servidor LDAP.

Comprovació comandes

vagrant@debian:~$ ldapsearch -x -D "cn=admin,dc=equipo2,dc=es" -W \
  -b "dc=equipo2,dc=es" \
  "(objectClass=*)" dn
Enter LDAP Password: 
# extended LDIF
#
# LDAPv3
# base <dc=equipo2,dc=es> with scope subtree
# filter: (objectClass=*)
# requesting: dn 
#

# equipo2.es
dn: dc=equipo2,dc=es

# usuaris, equipo2.es
dn: ou=usuaris,dc=equipo2,dc=es

# grups, equipo2.es
dn: ou=grups,dc=equipo2,dc=es

# administradors, grups, equipo2.es
dn: cn=administradors,ou=grups,dc=equipo2,dc=es

# comercials, grups, equipo2.es
dn: cn=comercials,ou=grups,dc=equipo2,dc=es

# rrhh, grups, equipo2.es
dn: cn=rrhh,ou=grups,dc=equipo2,dc=es

# major, grups, equipo2.es
dn: cn=major,ou=grups,dc=equipo2,dc=es

# clientes, grups, equipo2.es
dn: cn=clientes,ou=grups,dc=equipo2,dc=es

# marketing, grups, equipo2.es
dn: cn=marketing,ou=grups,dc=equipo2,dc=es

# major, usuaris, equipo2.es
dn: ou=major,ou=usuaris,dc=equipo2,dc=es

# clientes, usuaris, equipo2.es
dn: ou=clientes,ou=usuaris,dc=equipo2,dc=es

# marketing, usuaris, equipo2.es
dn: ou=marketing,ou=usuaris,dc=equipo2,dc=es

# jfernandez, major, usuaris, equipo2.es
dn: uid=jfernandez,ou=major,ou=usuaris,dc=equipo2,dc=es

# mruiz, major, usuaris, equipo2.es
dn: uid=mruiz,ou=major,ou=usuaris,dc=equipo2,dc=es

# ptorres, clientes, usuaris, equipo2.es
dn: uid=ptorres,ou=clientes,ou=usuaris,dc=equipo2,dc=es

# agomez, clientes, usuaris, equipo2.es
dn: uid=agomez,ou=clientes,ou=usuaris,dc=equipo2,dc=es

# lcastell, marketing, usuaris, equipo2.es
dn: uid=lcastell,ou=marketing,ou=usuaris,dc=equipo2,dc=es

# droig, marketing, usuaris, equipo2.es
dn: uid=droig,ou=marketing,ou=usuaris,dc=equipo2,dc=es

# search result
search: 2
result: 0 Success

# numResponses: 19
# numEntries: 18
vagrant@debian:~$ ldapsearch -x -D "cn=admin,dc=equipo2,dc=es" -W \
  -b "ou=usuaris,dc=equipo2,dc=es" \
  "(objectClass=posixAccount)" uid cn mail homeDirector
Enter LDAP Password: 
# extended LDIF
#
# LDAPv3
# base <ou=usuaris,dc=equipo2,dc=es> with scope subtree
# filter: (objectClass=posixAccount)
# requesting: uid cn mail homeDirector 
#

# jfernandez, major, usuaris, equipo2.es
dn: uid=jfernandez,ou=major,ou=usuaris,dc=equipo2,dc=es
uid: jfernandez
cn: Josep Fernandez
mail: jfernandez@equipo2.es

# mruiz, major, usuaris, equipo2.es
dn: uid=mruiz,ou=major,ou=usuaris,dc=equipo2,dc=es
uid: mruiz
cn: Marta Ruiz
mail: mruiz@equipo2.es

# ptorres, clientes, usuaris, equipo2.es
dn: uid=ptorres,ou=clientes,ou=usuaris,dc=equipo2,dc=es
uid: ptorres
cn: Paula Torres
mail: ptorres@equipo2.es

# agomez, clientes, usuaris, equipo2.es
dn: uid=agomez,ou=clientes,ou=usuaris,dc=equipo2,dc=es
uid: agomez
cn: Andreu Gomez
mail: agomez@equipo2.es

# lcastell, marketing, usuaris, equipo2.es
dn: uid=lcastell,ou=marketing,ou=usuaris,dc=equipo2,dc=es
uid: lcastell
cn: Laia Castell
mail: lcastell@equipo2.es

# droig, marketing, usuaris, equipo2.es
dn: uid=droig,ou=marketing,ou=usuaris,dc=equipo2,dc=es
uid: droig
cn: David Roig
mail: droig@equipo2.es

# search result
search: 2
result: 0 Success

# numResponses: 7
# numEntries: 6
vagrant@debian:~$ ldapsearch -x -D "cn=admin,dc=equipo2,dc=es" -W \
  -b "dc=equipo2,dc=es" \
  "(uid=jfernandez)"
Enter LDAP Password: 
# extended LDIF
#
# LDAPv3
# base <dc=equipo2,dc=es> with scope subtree
# filter: (uid=jfernandez)
# requesting: ALL
#

# jfernandez, major, usuaris, equipo2.es
dn: uid=jfernandez,ou=major,ou=usuaris,dc=equipo2,dc=es
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
uid: jfernandez
cn: Josep Fernandez
sn: Fernandez
givenName: Josep
mail: jfernandez@equipo2.es
uidNumber: 1001
gidNumber: 5000
homeDirectory: /home/jfernandez
loginShell: /bin/bash
userPassword:: e1NTSEF9RUxfVEVVX0hBU0hfQVFVSQ==
description: Cap del departament Major

# search result
search: 2
result: 0 Success

# numResponses: 2
# numEntries: 1
dif