Cicle formatiu: CFGM Sistemes Microinformàtics i Xarxes (SMX) / CFGS Administració de Sistemes Informàtics en Xarxa (ASIX)
Mòdul: 0224 – Sistemes operatius en xarxa / 0374 - Administració de sistemes operatius
Entorn: Ubuntu Server 26.04 LTS
LDAP (Lightweight Directory Access Protocol) és un protocol de xarxa que permet accedir i mantenir serveis de directori distribuïts. S’utilitza habitualment per centralitzar l’autenticació d’usuaris en entorns corporatius i educatius.
OpenLDAP és la implementació lliure i de codi obert més estesa del protocol LDAP, i és la que s’instal·la en aquest document.
| Rol | Hostname | IP | Sistema |
|---|---|---|---|
| Servidor LDAP | ldapserver |
192.168.1.10 |
Ubuntu Server 26.04 |
| Client LDAP | ldapclient |
192.168.1.20 |
Ubuntu Desktop 26.04 |
| Domini LDAP | dc=thos,dc=local |
— | — |
| Administrador | cn=admin,dc=thos,dc=local |
— | — |
Adapta les IP, el hostname i el domini al teu entorn real.
| Terme | Significat |
|---|---|
| DN (Distinguished Name) | Identificador únic d’una entrada al directori. Ex: cn=Joan,ou=Usuaris,dc=thos,dc=local |
| RDN (Relative Distinguished Name) | Part del DN que identifica l’entrada dins del seu contenidor. Ex: cn=Joan |
| DC (Domain Component) | Component del domini. Ex: dc=thos,dc=local |
| CN (Common Name) | Nom comú d’un objecte. Ex: cn=admin |
| OU (Organizational Unit) | Unitat organitzativa (contenidor). Ex: ou=Usuaris |
| UID (User ID) | Identificador d’usuari. Ex: uid=joan |
| DIT (Directory Information Tree) | Arbre jeràrquic que conté totes les entrades del directori |
| Schema | Defineix els tipus d’objectes i atributs permesos al directori |
| objectClass | Atribut que defineix el tipus d’entrada (persona, grup, unitat org.) |
dc=thos,dc=local ← Arrel (base DN)
├── cn=admin ← Administrador
├── ou=Usuaris ← Unitat organitzativa
│ ├── uid=joan
│ ├── uid=maria
│ └── uid=pere
├── ou=Grups ← Unitat organitzativa
│ ├── cn=professors
│ └── cn=alumnes
└── ou=Serveis ← Unitat organitzativa
└── cn=mailserverLDIF (LDAP Data Interchange Format) és el format de fitxer estàndard per importar i exportar entrades LDAP.
# Exemple d'entrada LDIF per a un usuari
dn: uid=joan,ou=Usuaris,dc=thos,dc=local
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
uid: joan
cn: Joan Garcia
sn: Garcia
givenName: Joan
mail: joan@thos.local
uidNumber: 1001
gidNumber: 1001
homeDirectory: /home/joan
loginShell: /bin/bash
userPassword: {SSHA}...Actualitza la llista de paquets:
sudo apt update Actualitza el sistema:
sudo apt upgradeConfigura el hostname:
sudo hostnamectl set-hostname ldapserverAfegeix l’entrada al fitxer /etc/hosts:
sudo nano /etc/hostsAfegeix aquesta línia:
192.168.1.10 ldapserver.thos.local ldapserver
Comprova:
hostname -fResposta esperada:
ldapserver.thos.localsudo apt install slapd ldap-utilsDurant la instal·lació, el sistema demanarà la contrasenya de l’administrador LDAP. Introdueix-la i confirma-la.
Recorda aquesta contrasenya; és la de cn=admin,dc=thos,dc=local.
Si necessites reconfigurar el servei (canviar domini, contrasenya, etc.):
sudo dpkg-reconfigure slapdEl procés farà les preguntes següents:
| Pregunta | Resposta recomanada |
|---|---|
| Ometre la configuració d’OpenLDAP? | No |
| Nom DNS del domini | thos.local |
| Nom de l’organització | thos (o el nom real) |
| Contrasenya de l’administrador | (la que triïs) |
| Motor de base de dades | MDB (recomanat) |
| Eliminar la base de dades en purgar slapd? | No |
| Moure la base de dades antiga? | Sí |
Comprova que el servei està actiu:
sudo systemctl status slapdResposta esperada:
● slapd.service - OpenLDAP Server Daemon
Loaded: loaded (/usr/lib/systemd/system/slapd.service; enabled; preset: enabled)
Active: active (running) since Mon 2026-07-06 15:53:54 UTC; 28s ago
Invocation: 57ac00e16e414f498cf382efec19c85f
Docs: man:slapd
man:slapd-config
man:slapd-mdb
Main PID: 17415 (slapd)
Tasks: 3 (limit: 1885)
Memory: 3M (peak: 3.4M)
CPU: 15ms
CGroup: /system.slice/slapd.service
└─17415 /usr/sbin/slapd -d0 -h "ldap:/// ldapi:///" -u openldap -g openldap
de jul. 06 15:53:54 ldapserver systemd[1]: Starting slapd.service - OpenLDAP Server Daemon...
de jul. 06 15:53:54 ldapserver slapd[17415]: @(#) $OpenLDAP: slapd 2.6.10+dfsg-1ubuntu5 (Nov 24 2025 11:17:55) $
Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
de jul. 06 15:53:54 ldapserver slapd[17415]: slapd starting
de jul. 06 15:53:54 ldapserver systemd[1]: Started slapd.service - OpenLDAP Server Daemon.Comprova que escolta al port 389:
sudo ss -tlnp | grep slapdResposta esperada:
LISTEN 0 2048 0.0.0.0:389 0.0.0.0:* users:(("slapd",pid=17415,fd=7))
LISTEN 0 2048 [::]:389 [::]:* users:(("slapd",pid=17415,fd=8)) Prova de connexió bàsica (sense autenticació):
ldapsearch -x -b "dc=thos,dc=local" -H ldap://localhostResposta esperada:
# extended LDIF
#
# LDAPv3
# base <dc=thos,dc=local> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#
# thos.local
dn: dc=thos,dc=local
objectClass: top
objectClass: dcObject
objectClass: organization
o: thos.local
dc: thos
# search result
search: 2
result: 0 Success
# numResponses: 2
# numEntries: 1Prova amb autenticació d’administrador:
ldapsearch -x -D "cn=admin,dc=thos,dc=local" -W -b "dc=thos,dc=local"La resposta ha de mostrar l’entrada arrel del directori.
Resposta esperada:
Enter LDAP Password:
# extended LDIF
#
# LDAPv3
# base <dc=thos,dc=local> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#
# thos.local
dn: dc=thos,dc=local
objectClass: top
objectClass: dcObject
objectClass: organization
o: thos.local
dc: thos
# search result
search: 2
result: 0 Success
# numResponses: 2
# numEntries: 1OpenLDAP a Ubuntu 26.04 utilitza el sistema de configuració dinàmica
cn=config (OLC — On-Line Configuration), que
substitueix el fitxer slapd.conf tradicional.
Veure tota la configuració (requereix sudo):
sudo ldapsearch -Y EXTERNAL -H ldapi:/// -b "cn=config"Veure els paràmetres del servidor:
sudo ldapsearch -Y EXTERNAL -H ldapi:/// -b "cn=config" "(objectClass=olcGlobal)"Veure la base de dades configurada:
sudo ldapsearch -Y EXTERNAL -H ldapi:/// -b "cn=config" "(objectClass=olcDatabaseConfig)"Crea el fitxer log.ldif:
sudo nano log.ldifdn: cn=config
changetype: modify
replace: olcLogLevel
olcLogLevel: stats
Aplica’l:
sudo ldapmodify -Y EXTERNAL -H ldapi:/// -f log.ldifNivells de log disponibles:
| Nivell | Valor | Descripció |
|---|---|---|
none |
0 | Sense log |
stats |
256 | Estadístiques de connexions (recomanat en producció) |
filter |
32 | Filtres de cerca |
acl |
128 | Comprovacions ACL |
any |
-1 | Tot (només per depurar) |
Configura rsyslog per separar els logs de LDAP:
sudo nano /etc/rsyslog.d/10-slapd.conflocal4.* /var/log/slapd.log
Reinicia syslog:
sudo systemctl restart rsyslogReinicia ldap:
sudo systemctl restart slapdsudo nano index.ldif# fitxer: index.ldif
dn: olcDatabase={1}mdb,cn=config
changetype: modify
replace: olcDbIndex
olcDbIndex: objectClass eq
olcDbIndex: uid eq,pres,sub
olcDbIndex: cn eq,pres,sub
olcDbIndex: sn eq,pres,sub
olcDbIndex: mail eq,pres,sub
olcDbIndex: memberUid eq
sudo ldapmodify -Y EXTERNAL -H ldapi:/// -f index.ldifCrea el fitxer estructura.ldif:
sudo nano estructura.ldif# Unitat organitzativa: Usuaris
dn: ou=Usuaris,dc=thos,dc=local
objectClass: organizationalUnit
ou: Usuaris
description: Usuaris del sistema
# Unitat organitzativa: Grups
dn: ou=Grups,dc=thos,dc=local
objectClass: organizationalUnit
ou: Grups
description: Grups del sistema
Importa l’estructura:
ldapadd -x -D "cn=admin,dc=thos,dc=local" -W -f estructura.ldifResposta esperada:
Enter LDAP Password:
adding new entry "ou=Usuaris,dc=thos,dc=local"
adding new entry "ou=Grups,dc=thos,dc=local"Verifica:
ldapsearch -x -b "dc=thos,dc=local" -H ldap://localhost "(objectClass=organizationalUnit)"Resposta esperada:
# extended LDIF
#
# LDAPv3
# base <dc=thos,dc=local> with scope subtree
# filter: (objectClass=organizationalUnit)
# requesting: ALL
#
# Usuaris, thos.local
dn: ou=Usuaris,dc=thos,dc=local
objectClass: organizationalUnit
ou: Usuaris
description: Usuaris del sistema
# Grups, thos.local
dn: ou=Grups,dc=thos,dc=local
objectClass: organizationalUnit
ou: Grups
description: Grups del sistema
# search result
search: 2
result: 0 Success
# numResponses: 3
# numEntries: 2Primer, genera un hash de contrasenya:
slappasswd
# Introdueix la contrasenya i et retornarà el hash {SSHA}...Resposta esperada:
New password:
Re-enter new password:
{SSHA}TBIdrK2UoZVHk6h9bORCURCYz/3DccH2Crea el fitxer usuaris.ldif:
sudo nano usuaris.ldif# Usuari: Joan Garcia
dn: uid=joan,ou=Usuaris,dc=thos,dc=local
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
uid: joan
cn: Joan Garcia
sn: Garcia
givenName: Joan
displayName: Joan Garcia
mail: joan@thos.local
uidNumber: 10001
gidNumber: 10001
homeDirectory: /home/joan
loginShell: /bin/bash
userPassword: {SSHA}XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
# Usuari: Maria Puig
dn: uid=maria,ou=Usuaris,dc=thos,dc=local
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
uid: maria
cn: Maria Puig
sn: Puig
givenName: Maria
displayName: Maria Puig
mail: maria@thos.local
uidNumber: 10002
gidNumber: 10001
homeDirectory: /home/maria
loginShell: /bin/bash
userPassword: {SSHA}XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Substitueix {SSHA}XXXXX... pel hash generat amb slappasswd.
ldapadd -x -D "cn=admin,dc=thos,dc=local" -W -f usuaris.ldifResposta esperada:
Enter LDAP Password:
adding new entry "uid=joan,ou=Usuaris,dc=thos,dc=local"
adding new entry "uid=maria,ou=Usuaris,dc=thos,dc=local"Crea el fitxer grups.ldif:
sudo nano grups.ldif# Grup: professors
dn: cn=professors,ou=Grups,dc=thos,dc=local
objectClass: posixGroup
cn: professors
gidNumber: 10001
memberUid: joan
memberUid: maria
# Grup: alumnes
dn: cn=alumnes,ou=Grups,dc=thos,dc=local
objectClass: posixGroup
cn: alumnes
gidNumber: 10002
ldapadd -x -D "cn=admin,dc=thos,dc=local" -W -f grups.ldifResposta esperada:
Enter LDAP Password:
adding new entry "cn=professors,ou=Grups,dc=thos,dc=local"
adding new entry "cn=alumnes,ou=Grups,dc=thos,dc=local"| Ordre | Funció |
|---|---|
ldapsearch |
Cerca entrades al directori |
ldapadd |
Afegeix entrades noves |
ldapmodify |
Modifica entrades existents |
ldapdelete |
Elimina entrades |
ldappasswd |
Canvia contrasenyes |
slappasswd |
Genera hash de contrasenya |
Cerca tots els usuaris
ldapsearch -x -b "ou=Usuaris,dc=thos,dc=local" "(objectClass=posixAccount)"Cerca un usuari per uid
ldapsearch -x -b "dc=thos,dc=local" "(uid=joan)"Cerca per nom parcial (comodí)
ldapsearch -x -b "dc=thos,dc=local" "(cn=Joan*)"Mostra només atributs específics
ldapsearch -x -b "dc=thos,dc=local" "(objectClass=posixAccount)" uid cn mailCerca tots els membres d’un grup
ldapsearch -x -b "ou=Grups,dc=thos,dc=local" "(cn=professors)" memberUidAutenticació amb l’usuari administrador
ldapsearch -x -D "cn=admin,dc=thos,dc=local" -W -b "dc=thos,dc=local"Per modificar atributs, crea un fitxer LDIF amb el tipus de canvi:
sudo nano canvis.ldif# Canvia el correu d'un usuari (replace)
dn: uid=joan,ou=Usuaris,dc=thos,dc=local
changetype: modify
replace: mail
mail: joan.garcia@thos.local
# Afegeix un atribut nou (add)
dn: uid=joan,ou=Usuaris,dc=thos,dc=local
changetype: modify
add: telephoneNumber
telephoneNumber: +34 93 000 0001
# Elimina un atribut (delete)
dn: uid=joan,ou=Usuaris,dc=thos,dc=local
changetype: modify
delete: telephoneNumber
ldapmodify -x -D "cn=admin,dc=thos,dc=local" -W -f canvis.ldifResposta esperada:
Enter LDAP Password:
modifying entry "uid=joan,ou=Usuaris,dc=thos,dc=local"
modifying entry "uid=joan,ou=Usuaris,dc=thos,dc=local"
modifying entry "uid=joan,ou=Usuaris,dc=thos,dc=local"Canvia la contrasenya d’un usuari (com a administrador)
ldappasswd -x -D "cn=admin,dc=thos,dc=local" -W -s novacontrasenya \
"uid=joan,ou=Usuaris,dc=thos,dc=local"L’usuari canvia la seva pròpia contrasenya
ldappasswd -x -D "uid=joan,ou=Usuaris,dc=thos,dc=local" -W -s novacontrasenyaElimina un usuari
ldapdelete -x -D "cn=admin,dc=thos,dc=local" -W \
"uid=joan,ou=Usuaris,dc=thos,dc=local"Elimina una OU (ha d’estar buida)
ldapdelete -x -D "cn=admin,dc=thos,dc=local" -W \
"ou=Temporal,dc=thos,dc=local"Exporta tot el directori a LDIF
sudo slapcat -v -l backup_ldap.ldifImporta (amb slapd aturat)
Atura
sudo systemctl stop slapdImporta
sudo slapadd -v -l backup_ldap.ldifEngega
sudo systemctl start slapdConfigura el client LDAP (192.168.1.20)
perquè els usuaris LDAP puguin iniciar sessió al sistema.
/etc/hostsEdita el fitxer /etc/hosts. Afegeix el servidor
LDAP:
sudo nano /etc/hosts192.168.1.10 ldapserver.thos.local ldapserver
Comprova connectivitat i que el servidor respon:
ldapsearch -x -H ldap://ldapserver.thos.local -b "dc=thos,dc=local" -s baseResposta esperada:
# extended LDIF
#
# LDAPv3
# base <dc=thos,dc=local> with scope baseObject
# filter: (objectclass=*)
# requesting: ALL
#
# thos.local
dn: dc=thos,dc=local
objectClass: top
objectClass: dcObject
objectClass: organization
o: thos.local
dc: thos
# search result
search: 2
result: 0 Success
# numResponses: 2
# numEntries: 1
ramon@client:~$ /etc/sssd/sssd.confsudo nano /etc/sssd/sssd.confContingut bàsic:
[sssd]
services = nss, pam
domains = thos.local
[domain/thos.local]
id_provider = ldap
auth_provider = ldap
ldap_uri = ldap://ldapserver.thos.local
ldap_search_base = dc=thos,dc=local
ldap_id_use_start_tls = false
ldap_auth_disable_tls_never_use_in_production = true
lookup_family_order = ipv4_first
Canvia el propietari
sudo chown root:root /etc/sssd/sssd.confCanvia els permisos (SSSD es nega a arrencar si no són correctes):
sudo chmod 600 /etc/sssd/sssd.confActiva la creació automàtica del home directory
sudo pam-auth-update --enable mkhomedirAixò afegeix pam_mkhomedir.so a la pila PAM perquè es
creï /home/usuari automàticament al primer login si
l’usuari existeix a LDAP però no localment.
Reinicia SSSD
sudo systemctl restart sssdHabilita SSSD en l’inici
sudo systemctl enable sssdProva que funciona
getent passwd joanResposta esperada:
joan:*:10001:10001:Joan Garcia:/home/joan:/bin/bashid joanResposta esperada:
uid=10001(joan) gid=10001(professors) groups=10001(professors)Si retorna informació de l’usuari LDAP, NSS ja el troba. Per provar l’autenticació completa:
su - joanResposta esperada:
Contrasenya:
Creant el directori '/home/joan'.
joan@client:~$
Per defecte, LDAP transmet les dades en text pla. És imprescindible activar TLS en entorns de producció.
Crea el directori per als certificats
sudo mkdir -p /etc/ldap/certsMou-te al directori creat
cd /etc/ldap/certsGenera la clau privada i el certificat de la CA
sudo openssl req -new -x509 -nodes -out ca.crt -keyout ca.key -days 3650 \
-subj "/C=ES/ST=Catalunya/L=Mataro/O=THOS/CN=CA-LDAP"Genera la clau del servidor
sudo openssl genrsa -out ldapserver.key 4096Genera la petició de certificat (CSR)
sudo openssl req -new -key ldapserver.key -out ldapserver.csr \
-subj "/C=ES/ST=Catalunya/L=Mataro/O=THOS/CN=ldapserver.thos.local"Signa el certificat amb la CA
sudo openssl x509 -req -in ldapserver.csr -CA ca.crt -CAkey ca.key \
-CAcreateserial -out ldapserver.crt -days 3650Canvia el propietari
sudo chown openldap:openldap /etc/ldap/certs/*.keyAjusta permisos
sudo chmod 640 /etc/ldap/certs/*.keyTorna al teu home
cdCrea el fitxer tls.ldif:
sudo nano tls.ldifdn: cn=config
changetype: modify
add: olcTLSCACertificateFile
olcTLSCACertificateFile: /etc/ldap/certs/ca.crt
-
add: olcTLSCertificateFile
olcTLSCertificateFile: /etc/ldap/certs/ldapserver.crt
-
add: olcTLSCertificateKeyFile
olcTLSCertificateKeyFile: /etc/ldap/certs/ldapserver.key
-
add: olcTLSVerifyClient
olcTLSVerifyClient: never
sudo ldapmodify -Y EXTERNAL -H ldapi:/// -f tls.ldifResposta esperada:
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "cn=config"Edita la configuració del servei:
sudo nano -l /etc/default/slapdModifica la variable SLAPD_SERVICES (línia 24):
SLAPD_SERVICES="ldap:/// ldapi:/// ldaps:///"
sudo systemctl restart slapdVerifica que escolta al port 636
sudo ss -tlnp | grep slapdResposta esperada:
LISTEN 0 2048 0.0.0.0:636 0.0.0.0:* users:(("slapd",pid=3356,fd=10))
LISTEN 0 2048 0.0.0.0:389 0.0.0.0:* users:(("slapd",pid=3356,fd=7))
LISTEN 0 2048 [::]:636 [::]:* users:(("slapd",pid=3356,fd=11))
LISTEN 0 2048 [::]:389 [::]:* users:(("slapd",pid=3356,fd=8)) Configura el client LDAP (192.168.1.20)
perquè els usuaris LDAP puguin iniciar sessió al sistema.
/etc/hostsEdita el fitxer /etc/hosts. Afegeix el servidor
LDAP:
sudo nano /etc/hosts192.168.1.10 ldapserver.thos.local ldapserver
Comprova connectivitat i que el servidor respon:
ldapsearch -x -H ldap://ldapserver.thos.local -b "dc=thos,dc=local" -s baseResposta esperada:
# extended LDIF
#
# LDAPv3
# base <dc=thos,dc=local> with scope baseObject
# filter: (objectclass=*)
# requesting: ALL
#
# thos.local
dn: dc=thos,dc=local
objectClass: top
objectClass: dcObject
objectClass: organization
o: thos.local
dc: thos
# search result
search: 2
result: 0 Success
# numResponses: 2
# numEntries: 1
ramon@client:~$ Crea una carpeta per al certificat
sudo mkdir -p /etc/ssl/certs/thos-caCopia el certificat de la CA al client:
sudo scp ramon@ldapserver:/etc/ldap/certs/ca.crt /etc/ssl/certs/thos-ca/ca.crtProva la negociació TLS
openssl s_client -connect ldapserver:389 -starttls ldap -CAfile /etc/ssl/certs/thos-ca/ca.crtopenssl s_client -connect ldapserver:636 -CAfile /etc/ssl/certs/thos-ca/ca.crt/etc/sssd/sssd.conf per fer servir TLSsudo nano /etc/sssd/sssd.conf [sssd]
services = nss, pam
domains = thos.local
[domain/thos.local]
id_provider = ldap
auth_provider = ldap
ldap_uri = ldap://ldapserver.thos.local
ldap_search_base = dc=thos,dc=local
ldap_id_use_start_tls = true
ldap_tls_reqcert = demand
ldap_tls_cacert = /etc/ssl/certs/thos-ca/ca.crt
lookup_family_order = ipv4_first
Canvia el propietari
sudo chown root:root /etc/sssd/sssd.confCanvia els permisos (SSSD es nega a arrencar si no són correctes):
sudo chmod 600 /etc/sssd/sssd.confActiva la creació automàtica del home directory
sudo pam-auth-update --enable mkhomedirAixò afegeix pam_mkhomedir.so a la pila PAM perquè es
creï /home/usuari automàticament al primer login si
l’usuari existeix a LDAP però no localment. Reinicia el servei:
sudo systemctl restart sssdHabilita SSSD en l’inici
sudo systemctl enable sssdProva que funciona
getent passwd joanResposta esperada:
joan:*:10001:10001:Joan Garcia:/home/joan:/bin/bashid joanResposta esperada:
uid=10001(joan) gid=10001(professors) groups=10001(professors)Si retorna informació de l’usuari LDAP, NSS ja el troba. Per provar l’autenticació completa:
su - joanResposta esperada:
Contrasenya:
joan@client:~$ Apache Directory Studio és una eina gràfica (GUI) per gestionar servidors LDAP, basada en Eclipse RCP. S’instal·la en una màquina de la xarxa amb GUI, no al servidor.
- Navegar per l’arbre LDAP (DIT): veure entrades, atributs i la seva jerarquia de forma visual, en lloc d’anar fent
ldapsearchper terminal.- Editar entrades: crear, modificar o eliminar usuaris, grups, unitats organitzatives, etc. amb formularis, sense escriure LDIF a mà.
- Importar/exportar LDIF: molt útil per fer càrregues massives o backups de la teva base LDAP.
- Executar cerques LDAP amb filtres, de forma similar a
ldapsearchperò amb interfície visual i historial de cerques.- Gestionar schemas: veure i editar les objectClasses i attributeTypes disponibles al servidor.
- Connexions múltiples: pots tenir definides connexions a diversos servidors (útil si tens
ldapserver.thos.locali potser altres entorns de prova).
Descàrrega des de https://directory.apache.org/studio/ la versió per a Linux (tar.gz)
wget -c https://dlcdn.apache.org/directory/studio/2.0.0.v20210717-M17/ApacheDirectoryStudio-2.0.0.v20210717-M17-linux.gtk.x86_64.tar.gzDescomprimeix
tar -zxvf ApacheDirectoryStudio-2.0.0.v20210717-M17-linux.gtk.x86_64.tar.gzSi no tens un entorn d’execució Java (JRE) instal·la:
sudo apt install default-jreExecuta
ApacheDirectoryStudio/ApacheDirectoryStudioCrea una nova connexió:
- Host:
ldapserver.thos.localo192.168.1.10- Port:
389(o636per LDAPS)- Bind DN:
cn=admin,dc=thos,dc=local- Base DN:
dc=thos,dc=local
phpLDAPadmin és una eina web (PHP) per administrar servidors LDAP des del navegador, a diferència d’Apache Directory Studio que és una aplicació d’escriptori. S’instal·la al servidor.
- Navegar i editar el DIT des d’un navegador web, amb una interfície d’arbre similar a Directory Studio.
- Crear/modificar/eliminar entrades (usuaris, grups, OU) amb formularis HTML.
- Importar/exportar LDIF des de la interfície web.
- Cercar amb filtres LDAP predefinits o personalitzats.
- Gestió d’esquemes: consultar objectClasses i attributeTypes disponibles.
| phpLDAPadmin | Apache Directory Studio | |
|---|---|---|
| Tipus | Aplicació web (Apache+PHP) | Aplicació d’escriptori (Java) |
| Accés | Des de qualsevol navegador de la xarxa | Cal instal·lar-lo a cada màquina client |
| Manteniment | Projecte pràcticament abandonat des de fa anys | Actiu i mantingut per Apache |
| TLS/SSL | Suport limitat i configuració sovint problemàtica | Gestió de certificats més robusta |
phpLDAPadmin fa anys que no rep actualitzacions actives (l’última versió estable és de 2015-2016, tot i que hi ha forks comunitaris com ldapadmin o phpLDAPadmin mantingut per algunes distribucions).
sudo apt install phpldapadminConfigura la connexió
sudo nano -l /etc/phpldapadmin/config.phpModifica les línies 324, 331 i 358:
$servers->setValue('server','host','192.168.1.10');
$servers->setValue('server','base',array('dc=thos,dc=local'));
$servers->setValue('login','bind_id','cn=admin,dc=thos,dc=local');Accedeix des del navegador: http://192.168.1.10/phpldapadmin
LDAP Account Manager és una interfície web avançada
per administrar comptes d’usuari, grups i altres objectes LDAP, pensada
com a alternativa moderna i mantinguda a phpLDAPadmin. Destaca per la
seva integració amb esquemes estàndard (posixAccount, inetOrgPerson, Samba, etc.) i per oferir funcions de gestió
massiva d’usuaris. S’instal·la al servidor.
- Gestió d’usuaris i grups amb formularis pensats per a casos d’ús reals (POSIX accounts, Samba accounts, Kerberos, etc.), no només edició genèrica d’atributs com phpLDAPadmin.
- Assistents (wizards) per crear usuaris/grups amb tots els atributs necessaris ja predefinits (UID, GID, shell, home directory…), útil per no haver d’omplir manualment cada objectClass.
- Suport per a múltiples esquemes: Unix, Samba, Kolab, etc.
- Perfils de configuració: permet definir plantilles diferents segons el tipus d’entrada (professors, alumnes, equips…).
- Importació/exportació massiva en format LDIF o CSV
- Gestió de contrasenyes amb polítiques configurables
- Auditoria de canvis al directori
- Perfils múltiples per gestionar diversos servidors LDAP
- LAM Pro (versió de pagament, encara que hi ha versió gratuïta prou completa) afegeix autoservei per a usuaris, gestió de polítiques de contrasenyes, i més integracions.
| LAM | phpLDAPadmin | |
|---|---|---|
| Manteniment | Actiu (última release el 2025) | Abandonat des de ~2015 |
| TLS/SSL modern | Suport complet TLS 1.2/1.3 | Sovint problemàtic |
| Enfocament | Orientat a tasques (crear usuari, grup…) | Edició genèrica d’atributs bruts |
| PHP modern | Compatible amb PHP 8.x | Pot requerir pedaços per PHP recent |
sudo apt install ldap-account-managerFins a la versió d’Ubuntu 24.04, això instal·la LAM i configura
automàticament Apache per servir-lo a /lam, però a la
versió 26.04 d’Ubuntu s’ha endurit el sandboxing.
Has de donar permisos d’escriptura a dos directoris:
sudo systemctl edit apache2[Service]
ReadWritePaths=/etc/ldap-account-manager /var/lib/ldap-account-manager
Rellegeix els unit files
(.service, .socket, .timer,
etc.)
sudo systemctl daemon-reloadReinicia Apache
sudo systemctl restart apache2Configuració inicial
Accedeix a la interfície de configuració:
http://ldapserver.thos.local/lamLa contrasenya de configuració per defecte és
lam. Canvia-la immediatament a LAM
configuration → General settings → Master password.
Ves a LAM configuration → Edit server profiles i configura:
| Paràmetre | Valor |
|---|---|
| Server address | ldap://192.168.1.10:389 |
| Tree suffix | dc=thos,dc=local |
| List of valid users | cn=admin,dc=thos,dc=local |
| Login method | Fixed list |
A la pestanya Account types, defineix on es guarden els usuaris i grups:
| Tipus | Suffix LDAP |
|---|---|
| Users | ou=Usuaris,dc=thos,dc=local |
| Groups | ou=Grups,dc=thos,dc=local |
Desa el perfil i accedeix al panell principal:
http://192.168.1.10/lam
Per connectar via LDAPS, edita el perfil i canvia l’adreça del servidor:
ldaps://192.168.1.10:636
Si el certificat és autosignat, cal afegir la CA al sistema:
sudo cp /etc/ldap/certs/ca.crt /usr/local/share/ca-certificates/ldap-ca.crt
sudo update-ca-certificates
sudo systemctl restart apache2sudo apt install ldapscripts
sudo nano /etc/ldapscripts/ldapscripts.confParàmetres clau:
SERVER="ldap://localhost"
BINDDN="cn=admin,dc=thos,dc=local"
BINDPWDFILE="/etc/ldapscripts/ldapscripts.passwd"
SUFFIX="dc=thos,dc=local"
USUFFIX="ou=Usuaris"
GSUFFIX="ou=Grups"
UIDSTART=10000
GIDSTART=10000# Desa la contrasenya de l'administrador
echo -n "contrasenya_admin" | sudo tee /etc/ldapscripts/ldapscripts.passwd
sudo chmod 400 /etc/ldapscripts/ldapscripts.passwd
# Afegir usuari
sudo ldapadduser pere professors
# Eliminar usuari
sudo ldapdeleteuser pere
# Afegir grup
sudo ldapaddgroup devops
# Afegir usuari a grup
sudo ldapaddusertogroup joan devops# Estat del servei
sudo systemctl status slapd
# Logs en temps real
sudo journalctl -u slapd -f
# Logs de rsyslog (si configurat)
sudo tail -f /var/log/slapd.log
# Comprovar la sintaxi de la configuració
sudo slaptest -v
# Comprovar la integritat de la base de dades
sudo slapd -T test -f /etc/ldap/slapd.confError: Can't contact LDAP server
# Comprova que slapd està en marxa
sudo systemctl start slapd
# Comprova el port
sudo ss -tlnp | grep 389
# Comprova el tallafoc
sudo ufw status
sudo ufw allow 389/tcp
sudo ufw allow 636/tcpError: Invalid credentials (49)
# El DN o la contrasenya són incorrectes. Verifica:
ldapwhoami -x -D "cn=admin,dc=thos,dc=local" -W
# Reseteja la contrasenya de l'admin
sudo ldappasswd -Y EXTERNAL -H ldapi:/// \
-s nova_contrasenya \
"cn=admin,dc=thos,dc=local"Error: No such object (32) en
cercar
# La base de cerca no existeix. Verifica la base DN:
sudo ldapsearch -Y EXTERNAL -H ldapi:/// -b "cn=config" \
"(olcSuffix=*)" olcSuffixError: TLS: can't connect
# Comprova els certificats
openssl verify -CAfile /etc/ldap/certs/ca.crt /etc/ldap/certs/ldapserver.crt
# Comprova la data de caducitat
openssl x509 -in /etc/ldap/certs/ldapserver.crt -noout -dates
# Desactiva temporalment la verificació TLS per depurar
LDAPTLS_REQCERT=never ldapsearch -x -ZZ -b "dc=thos,dc=local" \
-H ldap://ldapserver.thos.localProblema: usuaris LDAP no apareixen amb getent passwd
# Comprova nsswitch.conf
grep passwd /etc/nsswitch.conf
# Comprova la connexió des del client
ldapsearch -x -b "ou=Usuaris,dc=thos,dc=local" -H ldap://192.168.1.10
# Reinicia nscd
sudo systemctl restart nscd
# Neteja la caché de nscd
sudo nscd -i passwd
sudo nscd -i group# Activar log detallat temporalment
sudo ldapmodify -Y EXTERNAL -H ldapi:/// << EOF
dn: cn=config
changetype: modify
replace: olcLogLevel
olcLogLevel: -1
EOF
# Tornar al nivell normal quan hagis acabat
sudo ldapmodify -Y EXTERNAL -H ldapi:/// << EOF
dn: cn=config
changetype: modify
replace: olcLogLevel
olcLogLevel: stats
EOF| Port | Protocol | Servei | Descripció |
|---|---|---|---|
| 389 | TCP | LDAP | Connexió LDAP estàndard (text pla o STARTTLS) |
| 636 | TCP | LDAPS | LDAP sobre SSL/TLS |
| 3268 | TCP | GC | Global Catalog (Active Directory) |
| 3269 | TCP | GC over SSL | Global Catalog sobre SSL |
# Iniciar / aturar / reiniciar / comprovar l'estat
sudo systemctl start|stop|restart|status slapd
# Cercar tots els objectes
ldapsearch -x -b "dc=thos,dc=local" -H ldap://localhost
# Afegir entrades des de fitxer LDIF
ldapadd -x -D "cn=admin,dc=thos,dc=local" -W -f fitxer.ldif
# Modificar entrades des de fitxer LDIF
ldapmodify -x -D "cn=admin,dc=thos,dc=local" -W -f canvis.ldif
# Eliminar una entrada
ldapdelete -x -D "cn=admin,dc=thos,dc=local" -W "uid=joan,ou=Usuaris,dc=thos,dc=local"
# Exportar el directori complet
sudo slapcat -v -l backup.ldif
# Importar (slapd ha d'estar aturat)
sudo systemctl stop slapd
sudo slapadd -v -l backup.ldif
sudo systemctl start slapd