====== 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