====== OpenLDAP ======
===== Descripción =====
Servidor de Directorio, autenticación, o Single Sign On o AAA (Autentication, Autorization, Accounting)
===== Prerequistos =====
Un servidor con Linux .. preferiblemente Kuine LAMP con MySQL apagado
===== Instalación =====
Instale el sistema
apt install slapd ldap-utils ldapscripts
dpkg-reconfigure slapd
firewall-cmd --zone=external --permanent --add-service=ldap
firewall-cmd --zone=external --permanent --add-service=ldaps
slappasswd
New password:
Re-enter new password:
{SSHA}5oKzyJYzkCq21LhXDZFNZpPQD9uE
Ahora Alimente la base del arbol
$ vim basedn.ldif
dn: ou=people,dc=miejemplo,dc=com\\
objectClass: organizationalUnit\\
ou: people
dn: ou=groups,dc=miejemplo,dc=com\\
objectClass: organizationalUnit\\
ou: groups\\
\\
dn: cn=operadores,ou=groups,dc=miejemplo,dc=com\\
objectClass: posixGroup\\
cn: operadores\\
gidNumber: 10001\\
memberUid: alice\\
\\
dn: cn=alice,ou=People,dc=miejemplo,dc=com\\
objectClass: top\\
objectClass: account\\
objectClass: posixAccount\\
objectClass: shadowAccount\\
cn: alice\\
uid: alice\\
uidNumber: 10001\\
gidNumber: 10001\\
homeDirectory: /dev/null\\
userPassword: {SSHA}5D94oKzVyJYzkCq21LhXDZFNZpPQD9uE\\
loginShell: /bin/nologin\\
$ ldapadd -x -D cn=admin,dc=miejemplo,dc=com -W -f basedn.ldif
Para que mire que tiene
$ slapcat
Referencias\\
La facil .. siga este howto que lo deja listo con un arbol base incluyendo la rama de usuarios, un usuario grupos, como setear bien los passwords en ldiff y LAM para administrar\\
https://computingforgeeks.com/how-to-install-and-configure-openldap-server-on-debian/ \\
Estos me parecieron cheveres tambien\\
- https://www.howtoforge.com/how-to-install-openldap-on-debian-11/ $%%**%% Introductorio rapidin\\
- https://ubuntu.com/server/docs/service-ldap $%%**%% Este es super completo\\
===== Configuración =====
==== 1. Asegurar con SSL ====
Voy a usar este howto\\
\\
https://kifarunix.com/setup-openldap-server-with-ssl-tls-on-debian-10/?expand_article=1\\
\\
Quize usar los autofirmados que trae el sistema pero no sirve para syncronizar .. entonces toca generarlos\\
---------------\\
\\
$ vim ldap-tls.ldif\\
dn: cn=config\\
changetype: modify\\
add: olcTLSCACertificateFile\\
olcTLSCACertificateFile: /etc/ssl/openldap/certs/cacert.pem\\
-\\
replace: olcTLSCertificateFile\\
olcTLSCertificateFile: /etc/ssl/openldap/certs/ldapserver-cert.crt\\
-\\
replace: olcTLSCertificateKeyFile\\
olcTLSCertificateKeyFile: /etc/ssl/openldap/private/ldapserver-key.key\\
\\
\\
$ ldapmodify -Y EXTERNAL -H ldapi:/// -f ldap-tls.ldif
\\
---------------\\
\\
\\
NO olvide poner ldaps:/// en el /etc/default/slapd\\
\\
Tambien toca colocar en /etc/ldap.conf\\
\\
ssl start_tls\\
ssl on\\
\\
Y en /etc/ldap/ldap.conf\\
\\
TLS_CACERT /etc/ssl/openldap/certs/cacert.pem\\
TLS_REQCERT allow\\
\\
Y pruebe con \\
\\
$ ldapwhoami -H ldap:%%//atento-dir1.miejemplo.com -x -ZZ -- STARTTLS
$ ldapwhoami -H ldaps:%%//atento-dir1.miejemplo.com -x -- LDPS
\\
https://computingforgeeks.com/secure-ldap-server-with-ssl-tls-on-ubuntu/\\
\\
Este tambien ayuda un poco\\
https://kifarunix.com/setup-openldap-server-with-ssl-tls-on-debian-10/?expand_article=1\\
\\
\\
\\
\\
---- si por el contrario no quiere nada
TLS_REQCERT never
O en la syncronizacion
olcSyncrepl: {0}rid=001 provider=ldap://ldap02/ bin
dmethod=simple binddn="cn=admin,dc=skinatech,dc=com" credentials="ga111aer8Iv
3h" searchbase="dc=teleatento,dc=com" scope=sub schemachecking=on type=refres
hAndPersist retry="30 5 300 3" interval=00:00:05:00 starttls=critical tls_req
cert=never
==== 2. Detalles de LAM ====
wget https://github.com/LDAPAccountManager/lam/releases/download/8.6/ldap-account-manager_8.6-1_all.deb\\
sudo apt install -f ./ldap-account-manager_*_all.deb\\
\\
A LAM toca configurarle varias cosas (las indica el howto de arriba\\
- Ponga en todo lado su dominio .. en vez del de ejemplo\\
- A veces molesta Groups .. group .. los nombres de las ramas\\
\\
Pero tambien mejora si\\
- quitar InetOrgPerson por simplemente Account en Modulos si solo se usa para cuentas\\
\\
%%**%% EN Debian 12 me toco mas bien "copiar" el contenido del deb por una dependencia
==== 3. Configuración del SO como cliente ldap ====
\\
https://www.server-world.info/en/note?os=Debian_12&p=openldap&f=3\\
\\
\\
https://wiki.debian.org/LDAP/OpenLDAPSetup
===== Trucos =====
==== 1. LAM deja importar CSVs ====
Hay que afinarlos .. pero se logra super. Hay que ponerle comilas a todo y separado por comas\\
\\
dn_suffix dn_rdn overwrite posixAccount_cn posixAccount_userName posixAccount_group posixAccount_homedir posixAccount_shell posixAccount_password\\
ou=People,dc=skinatech,dc=com uid false Jaime Gomez jgomez agentes /dev/null /bin/false secreto\\
==== 2. cambie Password ====
ldappasswd -x -ZZ -D cn=admin,dc=example,dc=com -W -S cn=replicator,dc=example,dc=com
==== 3. Busque ====
Anonimo
ldapsearch -x -b 'dc=miejemplo,dc=com' '(objectclass=*)'
O si quiere como un dump ya autenticado
ldapsearch -x -ZZ -D cn=admin,dc=miejemplo,dc=com -W -b 'dc=miejemplo,dc=com' '(objectclass=*)'
La configuracion
ldapsearch -Q -LLL -Y EXTERNAL -H ldapi:%%//%%/ -b cn=config dn
==== 4. Borrar ====
ldapdelete -x -W -D "cn=admin,dc=miejemplo,dc=com" "uid=mibeyam,ou=people,dc=miejemplo,dc=com"
==== 5. Debug ====
Apaguelo y levantelo a mano con el debug prendido\\
\\
/usr/sbin/slapd -h "ldap:/// ldapi:/// ldaps:///" -g openldap -u openldap -F /etc/ldap/slapd.d
==== 6. Crear otro usuario administrador ====
\\
Este en el nuevo formato es un camello pero ahi nos dimos mañas. Creamos un OU de admins y ahi puse un administrador (admin_users.ldiff)\\
\\
# admins, miejemplo.com
dn: ou=admins,dc=miejemplo,dc=com
ou: admins
objectClass: organizationalUnit
objectClass: top
# admin_uno, admins, miejemplo.com
dn: cn=admin_uno,ou=admins,dc=miejemplo,dc=com
cn: admin_uno
objectClass: organizationalRole
objectClass: top
objectClass: simpleSecurityObject
userPassword:: e01ENX1LbjZaOFRNWXNTUWIxemh5SEgzWlFBPT0=
Y ahora me toca darle permiso para administrar a los usuarios agregando una regla (admin_access.ldiff)\\
dn: olcDatabase={1}mdb,cn=config
changetype: modify
add: olcAccess
olcAccess: {0}to dn.subtree="ou=people,dc=teleatento,dc=com"
by dn.children="ou=admins,dc=teleatento,dc=com" manage
by * break
\\
ldapadd -Y EXTERNAL -H ldapi:/// -f admin_access.ldif\\
\\
Mire si quedo bien\\
\\
ldapsearch -Q -Y EXTERNAL -H ldapi:/// -LLL -b cn=config '(olcSuffix=dc=miejemplo,dc=com)' olcAccess\\
\\
Si el cero no corresponde puede borrar la linea 0 que agrego (borrar.ldiff)\\
\\
dn: olcDatabase={1}mdb,cn=config\\
changetype: modify\\
delete: olcAccess\\
olcAccess: {0}\\
\\
ldapadd -Y EXTERNAL -H ldapi:/// -f borrar.ldiff\\
\\
OJO con no borrar las basicas\\
==== 7. Cambiar el limite de las busquedas ====
vim /etc/openldap/scratch/olcSizeLimit.ldif
dn: cn=config
changetype: modify
replace: olcSizeLimit
olcSizeLimit: unlimited
dn: olcDatabase={-1}frontend,cn=config
changetype: modify
replace: olcSizeLimit
olcSizeLimit: unlimited
sudo ldapmodify -Y EXTERNAL -H ldapi:/// -f /etc/openldap/scratch/olcSizeLimit.ldif
\\
https://github.com/ConsortiumGARR/idem-tutorials/blob/master/idem-fedops/miscellaneous/HOWTO%20Install%20and%20Configure%20OpenLDAP%20for%20federated%20access-CentOS.md//
==== 8. Agregar esquema eduperson ====
\\
Esto es chevere porque LAM lo soporta sin problema\\
\\
wget https://raw.githubusercontent.com/LEARN-LK/IAM/master/eduperson-201602.ldif
sudo ldapadd -Y EXTERNAL -H ldapi:/// -f eduperson-201602.ldif
\\
La referencia\\
https://github.com/LEARN-LK/IAM/blob/master/Ldap-with-eduperson.md\\
==== 9. Backup ====
Hace un dump
slapcat -b "dc=ldap,dc=example,dc=com" -l backup.ldif
Y luego restaure: baja servcio, sube datos, y reinicia
service stop slapd.service
slapadd -f backup.ldif
chown -R ldap.ldap /var/lib/ldap/*
service restart slapd.service
Tambien se pude sacar un dump usando mdb
Este siguiente link tiene mas detalle en la restauracion para arrancar de cero.
https://documentation.ubuntu.com/server/how-to/openldap/backup-and-restore/?_ga=2.16440438.1997738845.1731680930-1670906910.1632838828
==== 10. Monitorear ====
Para incluirlo con los plugines de munin
https://blog.kmp.or.at/monitoring-openldap/
===== Problemas =====
==== 1. LAM No funciona (Forbidden o en blanco) ====
Hay dos temas por ajustar\\
\\
En el php.ini .. en open_basedir toca agregar\\
\\
open_basedir = /var/www/html:/usr/share/php:/var/lib/php:/dev/random:/dev/urandom:/usr/share/ldap-account-manager:/var/lib/ldap-account-manager:/etc/ldap-account-manager:/usr/share/ldap-account-manager/templates/config/../../docs/manual:/usr/share/ldap-account-manager/templates/misc/\\
\\
Y en la configuracion del aplicativo las excepciones de Modsecurity\\
\\
\\
SecRuleRemoveById 980130\\
SecRuleRemoveById 949110\\
SecRuleRemoveById 932160\\
SecRuleRemoveById 932150\\
SecRuleRemoveById 932100\\
SecRuleRemoveById 932150\\
\\
\\
==== 2. PHPLDAPADMIN No funciona (Forbidden o en blanco) ====
\\
Hay dos temas por ajustar igual que LAM\\
\\
En el php.ini .. en open_basedir toca agregar\\
\\
/usr/share/phpldapadmin:/etc/phpldapadmin:/usr/share/doc/phpldapadmin\\
\\
Y en la configuracion del aplicativo las excepciones de Modsecurity
SecRuleRemoveById 980140
SecRuleRemoveById 953100
SecRuleRemoveById 959100
===== Referencias =====
- Tareas administrativas https://www.digitalocean.com/community/tutorials/how-to-configure-openldap-and-perform-administrative-ldap-tasks
FIN