¡Esta es una revisión vieja del documento!


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

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

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

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

   <IfModule security2_module>\\

       SecRuleRemoveById 980130
       SecRuleRemoveById 949110
       SecRuleRemoveById 932160
       SecRuleRemoveById 932150
       SecRuleRemoveById 932100
       SecRuleRemoveById 932150
  </IfModule>

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

  <IfModule security2_module>
     SecRuleRemoveById 980140
     SecRuleRemoveById 953100
     SecRuleRemoveById 959100
  </IfModule>

Referencias

Volver arriba