LdapUsers — Plugin LDAP para FacturaScripts

Desarrollado por Basal-AI Solutions S.L.

Plugin para FacturaScripts 2025.81+ que permite autenticar usuarios contra un servidor LDAP (FreeIPA, Active Directory, OpenLDAP) y controlar el acceso y permisos mediante grupos LDAP.

Requisitos

  • FacturaScripts 2025.81 o superior.
  • PHP 8.1+ con la extensión php-ldap instalada.

En Ubuntu/Debian:

apt install php8.3-ldap
systemctl restart php8.3-fpm

Instalación

  1. Descargar LdapUsers.zip.
  2. En FacturaScripts ir a Admin → Plugins.
  3. Pulsar Subir plugin y seleccionar el archivo LdapUsers.zip.
  4. Activar el plugin LdapUsers.

Tras activar aparecerá un nuevo menú: Admin → Configuración LDAP.

Configuración

1. Servidor LDAP

Campo Descripción Ejemplo
Host Hostname o IP del servidor LDAP ldap.empresa.com
Tipo de conexión Sin cifrar, SSL (LDAPS) o STARTTLS SSL / LDAPS (puerto 636)
Puerto Se rellena automáticamente al elegir tipo de conexión. Se puede cambiar manualmente 636

Nota: SSL y STARTTLS son mutuamente excluyentes. SSL cifra toda la conexión desde el inicio (puerto 636). STARTTLS negocia el cifrado sobre una conexión plana (puerto 389).

2. Búsqueda de usuarios

Campo Descripción Ejemplo FreeIPA Ejemplo Active Directory
Base DN DN donde buscar usuarios cn=users,cn=accounts,dc=empresa,dc=com OU=Users,DC=empresa,DC=com
Atributo de usuario Atributo LDAP que contiene el nombre de login uid sAMAccountName

3. Filtro por grupos

Permite restringir el acceso a miembros de determinados grupos LDAP y asignar automáticamente el nivel admin/usuario según la pertenencia a grupo.

Campo Descripción Ejemplo
DN base de grupos DN donde residen los grupos cn=groups,cn=accounts,dc=empresa,dc=com
Grupos de administradores CNs de grupos cuyos miembros serán admin en FacturaScripts (separar con coma) fs-admins, sysadmins
Grupos de usuarios CNs de grupos cuyos miembros tendrán acceso normal sin admin (separar con coma) fs-users, contabilidad

Reglas de acceso:

  • Si el usuario pertenece a cualquiera de los grupos admin → cuenta local con admin = true.
  • Si no es admin pero pertenece a cualquiera de los grupos de usuarios → cuenta local con admin = false.
  • Si no pertenece a ningún grupo autorizado → acceso denegado.
  • Si ambos campos de grupo están vacíos → cualquier usuario LDAP autenticado tiene acceso (sin filtro).

El nivel admin se sincroniza en cada login. Si un usuario es eliminado del grupo admin en LDAP, perderá los permisos de administrador la próxima vez que inicie sesión.

4. Cuenta de servicio (bind)

Campo Descripción Ejemplo
DN de la cuenta de servicio DN de una cuenta de solo lectura para buscar usuarios en el directorio uid=svc-facturascripts,cn=sysaccounts,cn=etc,dc=empresa,dc=com
Contraseña Contraseña de la cuenta de servicio. Al dejarla en blanco se conserva la ya guardada

Si el servidor permite búsquedas anónimas (como FreeIPA por defecto), se pueden dejar ambos campos vacíos.

Diagnóstico

La sección Diagnóstico aparece en la parte inferior de la página de configuración una vez se ha guardado un host. Ofrece dos herramientas:

Probar conexión

Comprueba que el servidor LDAP es accesible con la configuración guardada y que el bind de servicio funciona correctamente.

Probar usuario

Permite introducir un nombre de usuario (y opcionalmente una contraseña) para verificar paso a paso:

  • Si el usuario existe en el directorio LDAP y cuál es su DN.
  • Su email (atributo mail).
  • Todos los grupos a los que pertenece (atributo memberOf).
  • Si encaja con alguno de los grupos configurados como admin o usuario, y qué resultado tendría (admin, acceso normal, o acceso denegado).
  • Si la contraseña es correcta (solo cuando se proporciona).

Esta herramienta no crea ni modifica ninguna cuenta local. Solo realiza consultas de lectura contra el LDAP.

Flujo de autenticación

Cuando un usuario introduce sus credenciales en la pantalla de login de FacturaScripts:

                     ¿LDAP configurado?
                           │
                    sí ────┤──── no
                    │              │
             Buscar en LDAP     Auth local FS
                    │
            ¿Usuario existe?
                    │
             sí ────┤──── no
             │             │
      Verificar pass    Auth local FS
             │
      ¿Pass correcta?
             │
       sí ──┤── no
       │         │
  ¿Filtro     DENEGADO
  grupos?    (sin fallback)
       │
  sí ──┤── no
  │         │
¿En grupo   Acceso
 válido?    (admin=false)
  │
sí ──┤── no
│         │
Acceso   DENEGADO
(admin según grupo)

Puntos clave:

  • Si el usuario existe en LDAP pero la contraseña es incorrecta, el acceso se deniega sin intentar autenticación local. Esto evita que un usuario local con la misma contraseña antigua pueda entrar si cambia su contraseña en LDAP.
  • Si el usuario no existe en LDAP, se intenta la autenticación local normal de FacturaScripts (para el usuario admin inicial u otros usuarios creados manualmente).
  • En el primer login LDAP exitoso de un usuario nuevo, se crea automáticamente su cuenta local con una contraseña aleatoria (inutilizable) y el email obtenido del LDAP.
  • En cada login sucesivo, se sincronizan el email y el nivel admin según los grupos LDAP actuales.

Ejemplo completo: FreeIPA

Host:                  ipa.empresa.com
Tipo de conexión:      SSL / LDAPS (puerto 636)
Puerto:                636
Base DN:               cn=users,cn=accounts,dc=empresa,dc=com
Atributo de usuario:   uid
DN base de grupos:     cn=groups,cn=accounts,dc=empresa,dc=com
Grupos admin:          fs-admins, sysadmins
Grupos usuarios:       fs-users, contabilidad
DN cuenta servicio:    uid=svc-facturascripts,cn=sysaccounts,cn=etc,dc=empresa,dc=com
Contraseña:            ********

Ejemplo completo: Active Directory

Host:                  dc01.empresa.local
Tipo de conexión:      SSL / LDAPS (puerto 636)
Puerto:                636
Base DN:               OU=Users,DC=empresa,DC=local
Atributo de usuario:   sAMAccountName
DN base de grupos:     OU=Groups,DC=empresa,DC=local
Grupos admin:          Domain Admins, FS-Admins
Grupos usuarios:       FS-Users, Contabilidad
DN cuenta servicio:    CN=svc-facturascripts,OU=Service Accounts,DC=empresa,DC=local
Contraseña:            ********

Resolución de problemas

Problema Causa probable Solución
"Se requiere la extensión ldap" al activar php-ldap no instalado apt install php8.3-ldap && systemctl restart php8.3-fpm
Timeout (504) al probar conexión Host o puerto incorrectos, o firewall bloqueando Verificar conectividad: ldapsearch -x -H ldaps://host:636 -b "" -s base
Error STARTTLS Certificado del servidor no confiable Instalar la CA del servidor LDAP en el almacén de certificados del sistema: copiar el .crt a /usr/local/share/ca-certificates/ y ejecutar update-ca-certificates
Error bind cuenta de servicio DN o contraseña incorrectos Verificar con: ldapwhoami -x -H ldaps://host -D "DN" -W
Usuario no encontrado Base DN o atributo de usuario incorrectos Usar el test de usuario en Diagnóstico para verificar
Acceso denegado (grupos) El usuario no es miembro de ningún grupo configurado Usar el test de usuario para ver sus memberOf y compararlos con los grupos configurados
El usuario pierde admin al hacer login Ha sido eliminado del grupo admin en LDAP Comportamiento esperado: los permisos se sincronizan en cada login

Licencia

LGPL-3.0-or-later

Cookies
Usamos cookies en nuestro sitio web para brindarte la experiencia más relevante recordando tus preferencias y visitas repetidas. Al hacer clic en "Aceptar", aceptas el uso de TODAS las cookies necesarias.
Copyright (c) 2013-2026 FacturaScripts
0.06187s

Soporte