[How-To] Integración OTRS y LDAP

Post Reply
miguelmz
Znuny wizard
Posts: 370
Joined: 17 Nov 2011, 17:46
Znuny Version: 6.0.10
Real Name: Miguel
Company: SIA
Location: Madrid, Spain.

[How-To] Integración OTRS y LDAP

Post by miguelmz »

Buenas,

Hoy os traigo un pequeño tutorial acerca de como integrar OTRS con LDAP, existe mucha información al respecto en el foro, pero fragmentada y escasa en español. Este tutorial explica como usuarios registrados en LDAP puedan conectarse a OTRS y otras configuraciones derivadas.

Para ello, lo primero que necesitamos es disponer un usuario de LDAP que disponga de permisos de busqueda de los diferentes usuarios y sus propiedades al nivel apropiado del arbol LDAP deseado. Este usuario sera el que realizara la busqueda en LDAP cuando un Agente intente entrar en el sistema.

Configuración básica


Una vez dispuestos los requisitos, accedemos al archivo Config.pm situado en /otrs/Kernel.

Dentro del mismo, observaremos una funcion en la que se declaran las configuraciones especiales como esta, nos situamos al final de la funcion y emepzamos a escribir las siguientes lineas:

Code: Select all

########### INTEGRACION LDAP ##################
$Self->{'AuthModule'} = 'Kernel::System::Auth::LDAP';
$Self->{'AuthModule::LDAP::Host'} = '10.10.10.10';
$Self->{'AuthModule::LDAP::BaseDN'} = 'dc=test,dc=local';
$Self->{'AuthModule::LDAP::UID'} = 'sAMAccountName';
$Self->{'AuthModule::LDAP::SearchUserDN'} = 'CN=pruebas,OU=pruebas,DC=test,DC=local';
$Self->{'AuthModule::LDAP::SearchUserPw'} = '12345';
$Self->{'AuthModule::LDAP::Params'} = {
    port => 389,
    timeout => 120,
    async => 0,
    version => 3,
};
Ahora, modifique sus datos en funcion de los datos especificos de su LDAP:
  • $Self->{'AuthModule::LDAP::Host'}: Direccion ip del servidor LDAP.
    $Self->{'AuthModule::LDAP::BaseDN'}: Nombre del dominio (distinguishedName).
    $Self->{'AuthModule::LDAP::UID'}: Formato de busqueda del login del usuario puede ser sAMAccountName (login usuario) o userPrincipalName (login usuario @ dominio ).
    $Self->{'AuthModule::LDAP::SearchUserDN'}: Nombre distintivo del usuario que ejecuta las busquedas (distinguisedName).
    $Self->{'AuthModule::LDAP::SearchUserPw'}: Contraseña del usuario que ejecuta las busquedas.
Una vez hecho, guarde los datos y reinicie el servicio apache para ser efectivo. Con este cambio, solamente hemos activado la conexion principal por LDAP, esto implica 2 niveles de seguridad de acceso al OTRS. En primer lugar el usuario en cuestion sera verificado en LDAP, de disponer cuenta en el mismo se buscara al usuario en la Base de datos de OTRS y se procedera el acceso con sus respectivos permisos.
Como muchos os preguntareis ahora, esto por si solo no permitiria entrar a cualquier usuario de LDAP, solamente a los usuarios de LDAP registrados previamente en OTRS.

Ahora bien se disponen de mas formas de autenticacion con LDAP que requieren de esta (previa) conexion basica, sigue leyendo.


Restricción de acceso por grupos LDAP


En la fase de busqueda del usuario que intenta logear por LDAP, es posible realizar un filtrado especifico en funcion de X grupo asignado a los usuarios dentro del LDAP. Esto permite limitar una parte de los usuarios del LDAP a aquellos que sean miembros del grupo x.

Para realizarlo: Abra el fichero Config.pm, situese en el apartado de integracion LDAP de la conexión básica e inserte las siguientes lineas:

Code: Select all

$Self->{'AuthModule::LDAP::GroupDN'} = 'CN=SG,OU=pruebas,DC=gidtest,DC=local';
$Self->{'AuthModule::LDAP::AccessAttr'} = 'member';
$Self->{'AuthModule::LDAP::UserAttr'} = 'DN';
Modifique los campos en función de los datos específicos de su LDAP a excepción de UserAttr:
  • $Self->{'AuthModule::LDAP::GroupDN'}: Nombre distintivo del grupo (distinguisedName).
    $Self->{'AuthModule::LDAP::AccessAttr'}: Atributo de búsqueda sobre el grupo, en este caso "member".
Una vez implementado, guarde los cambios y reinicie el servidor web.


Creación automática de usuarios en BBDD de OTRS autenticados contra LDAP


Con las configuraciones previas disponemos de 2 niveles de autenticacion con los que asegurar el acceso a OTRS. No obstante, en determinadas situaciones es incomodo la necesidad de crear a mano todos los usuarios registrados en LDAP en el OTRS (y con razon) y se echa en falta un registro automatico.
Con esta nueva configuracion es posible, al realizar esta configuracion es altamente recomendable (sino imprescindible) añadir conjuntamente a la configuracion de restriccion de grupos descrita anteriormente. De lo contrario cualqueir usuario de LDAP podria acceder a OTRS.

Para realizarlo debemos acceder al fichero Config.pm e introducir las siguientes lineas dentro de nuestro apartado de integracion LDAP:

Code: Select all

# agent data sync against ldap
$Self->{'AuthSyncModule'} = 'Kernel::System::Auth::Sync::LDAP';
$Self->{'AuthSyncModule::LDAP::Host'} = '10.10.10.10';
$Self->{'AuthSyncModule::LDAP::BaseDN'} = 'dc=test,dc=local';
$Self->{'AuthSyncModule::LDAP::UID'} = 'sAMAccountName';
$Self->{'AuthSyncModule::LDAP::SearchUserDN'} = 'CN=pruebas,OU=pruebas,DC=gidtest,DC=local';
$Self->{'AuthSyncModule::LDAP::SearchUserPw'} = '12345';
$Self->{'AuthSyncModule::LDAP::UserSyncMap'} = {
# DB -> LDAP
UserFirstname => 'givenName',
UserLastname => 'name',
UserEmail => 'mail',
};
$Self->{'AuthSyncModule::LDAP::UserSyncInitialGroups'} = [
'users',
];
Ojo, a primera vista puede parecer que he duplicado informacion por la conexion básica. No es asi, estos datos son necesarios en conjunto con la configuracion básica (como todas las configuraciones extra que detallo). Esta configuracion es ejecutada posteriormente a la comprobacion de existencia del usuario en LDAP y variantes (restriccion grupo).

Aparte de los campos ya familiares de puntos anteriores en su nueva version de sincronizacion, se describen 2 nuevos campos:
  • $Self->{'AuthSyncModule::LDAP::UserSyncMap'}: Recolecta los diferentes datos del LDAP para la creación del usuario. Es requisito mínimo disponer de estos 3 campos de OTRS rellenos (UserFirstname, UserLastname y UserEmail). Los diferentes campos pasados deben corresponderse con aquellos atributos del LDAP que contiene dicha información, como se expone en el comentario: el primer elemento corresponde al nombre de la columna en la base de datos y el segundo al elemento de LDAP donde se extraera esa información.
    Como ya podeis intuir, se pueden agregar nuevos campos en la tabla de usuarios de la base de datos para recolectar informaciones addicionales como departamentos, ips del puesto, etc. A lo cual seria necesario implementar backends de usuario (ver viewtopic.php?f=84&p=64483#p64483 )

    $Self->{'AuthSyncModule::LDAP::UserSyncInitialGroups'}: Asigna permisos por defecto a usuarios creados tras la autenticación en LDAP que no estén dispuestos en OTRS, es preciso declarar un grupo especifico inicial y limitado para que el usuario pueda cursar una petición posterior dentro del OTRS solicitando sus permisos conforme a su actividad.
En el caso de que no se dispusiera de la informacion declarada en $Self->{'AuthSyncModule::LDAP::UserSyncMap'}, bien sea: por el lado de las columnas de la tabla de usuarios de OTRS, por campos sin rellenar de los que son extraidas la informacion o una diferencia de tipos de datos entre ambos; El registro no se llevara a cabo y dara un error de autenticacion que puede ser confundido con la falta del grupo restrictivo el usuario en LDAP, mucho cuidado.

Adicionalmente, esta implementacion sincronizara automaticamente a los usuarios que ya hayan sido registrados. Por tanto, un usuario registrado al iniciar sesion, actualizara sus datos personales sincronizados en la base de datos de OTRS. El usuario que ejecutara la actualizacion de campos en la base de datos de OTRS sera el usuario general declarado en el propio archivo Config.pm.


Autenticación múltiple de usuarios por LDAP y Base de datos


A veces, se da la necesidad de implementar una integracion LDAP que no impida la sesion de algunos usuarios que ya dispusieramos en la base de datos y que no esten registrados en LDAP. Por ejemplo, nuestra politica de usuarios de LDAP podria restringirnos el uso de usuarios genericos en este entorno, pero no en OTRS donde podriamos disponer de algun usuario generico impersonal empleado para X acciones. Para permitir esta situacion generaremos una autenticacion multiple.

Debemos acceder al fichero Config.pm y junto al resto de configuraciones de la integracion de LDAP incluir esta:

Code: Select all

# Autenticacion Multple: Segundo Nivel
$Self->{'AuthModule2'} = 'Kernel::System::Auth::DB';
$Self->{'AuthModule::DB::CryptType2'} = 'crypt';
Como observareis pongo un "Segundo Nivel", esto es porque al realizar una integracion LDAP, siempre es consultado primeramente el LDAP y despues es revisada la Base de datos. Por lo cual, sin esta configuracion un usuario unicamente registrado en base de datos no pasaria del primer nivel (el LDAP) y fallaria su autenticacion.

No obstante, tenga en mente que de existir previamente un usuario en Base de datos que si este en LDAP, seguira un proceso de autenticacion validado en LDAP y de existir la sincronizacion su informacion personal sera machacada en el logeo de sesion. Para el resto de usuarios que no estuvieran en LDAP, podran conectarse manteniendo su informacion personal.


LDAP Troubleshooting


Por último, os enlazo un post de nuestro vecino Crythias donde se detallan los posibles errores que os mostrara el log de OTRS y su interpretacion para determinar que falla en la configuración.

viewtopic.php?f=60&t=16543


Espero que os sirva de ayuda,
Un saludo.
We want OTRS certifications in Spain!!

Check out my free addons! :mrgreen:
arcangel256
Znuny newbie
Posts: 1
Joined: 23 Aug 2012, 17:37
Znuny Version: 3.1.0
Real Name: Miguel Angel Abarca Beltran
Company: SIGEMTI

Re: [How-To] Integración OTRS y LDAP

Post by arcangel256 »

Muchas gracias por la información me sirvió mucho, te comento que tengo la version 3.1 y para el ultimo paso que comentas
Autenticación múltiple de usuarios por LDAP y Base de datos
Actualmente yo no tengo esa configuración y me permite autenticar con usuarios locales y de LDAP
con todo lo demás fue muy útil la información, espero sigas subiendo mas información
miguelmz
Znuny wizard
Posts: 370
Joined: 17 Nov 2011, 17:46
Znuny Version: 6.0.10
Real Name: Miguel
Company: SIA
Location: Madrid, Spain.

Re: [How-To] Integración OTRS y LDAP

Post by miguelmz »

Gracias,

Seguire poniendo cosas, aunque espero que tambien os animeis el resto a compartir vuestras cositas por pequeñas que sean :wink:
No lo sabia con la version 3.1, interesante.

Un saludo.
We want OTRS certifications in Spain!!

Check out my free addons! :mrgreen:
ioviedo
Znuny newbie
Posts: 63
Joined: 22 Jan 2013, 19:26
Znuny Version: 3.1.12
Real Name: Iván Oviedo
Company: ESPOl

Re: [How-To] Integración OTRS y LDAP

Post by ioviedo »

Hola Compañeros comparto mi pequeña experiencia con la integración otrs+ldap para los Agentes.

#Integracion con LDAP

$Self->{'AuthModule'} = 'Kernel::System::Auth::LDAP';
$Self->{'AuthModule::LDAP::Host'} = 'xxx.xxx.xxx.xxx:389';
$Self->{'AuthModule::LDAP::BaseDN'} = 'dc=dominio,dc=com,';
$Self->{'AuthModule::LDAP::UID'} = 'sAMAccountName';
$Self->{'AuthModule::LDAP::SearchUserDN'} = 'CN=usariobuscador,OU=Users,DC=dominio,DC=com';
$Self->{'AuthModule::LDAP::SearchUserPw'} = 'clavedelusuariobuscador';
$Self->{'AuthModule::LDAP::Params'} = {
port => 389,
timeout => 120,
async => 0,
version => 3,
};

# agent data sync against ldap
$Self->{'AuthSyncModule'} = 'Kernel::System::Auth::Sync::LDAP';
$Self->{'AuthSyncModule::LDAP::Host'} = 'xxx.xxx.xxx.xxx:389';
$Self->{'AuthSyncModule::LDAP::BaseDN'} = 'dc=dominio,dc=com';
$Self->{'AuthSyncModule::LDAP::UID'} = 'sAMAccountName';
$Self->{'AuthSyncModule::LDAP::SearchUserDN'} = 'CN=usariobuscador,OU=Users,DC=dominio,DC=com';
$Self->{'AuthSyncModule::LDAP::SearchUserPw'} = 'clavedelusuariobuscador';
$Self->{'AuthSyncModule::LDAP::UserSyncMap'} = {
# DB -> LDAP
UserFirstname => 'givenName',
UserLastname => 'name',
UserEmail => 'mail',
};
$Self->{'AuthSyncModule::LDAP::UserSyncInitialGroups'} = [
'users',
];


# Autenticacion Multple: Segundo Nivel
$Self->{'AuthModule2'} = 'Kernel::System::Auth::DB';
$Self->{'AuthModule::DB::CryptType2'} = 'crypt';






Nota: Importante fijense que al final de la dirección ip de su servidor LDAP va ":389" el puerto de ldap.

Espero que les sirva estimados compañeros.
ioviedo
Znuny newbie
Posts: 63
Joined: 22 Jan 2013, 19:26
Znuny Version: 3.1.12
Real Name: Iván Oviedo
Company: ESPOl

Re: [How-To] Integración OTRS y LDAP

Post by ioviedo »

Saludos Compañeros, a qué se refieren con "usuarios" es a caso a: Agentes o Customers???
carlosgallego
Znuny expert
Posts: 241
Joined: 17 Nov 2011, 18:17
Znuny Version: 2.4-3.0-3.1-3.2- 3.3
Real Name: Carlos Gallego
Location: Medellin, Colombia

Re: [How-To] Integración OTRS y LDAP

Post by carlosgallego »

Hola Miguel.

Que buen documento, te cuento que ya lo he realizado tanto para OpenLDAP como AD y funciona super bien.

Sin embargo quisiera saber si tienes alguna experiencia usando para autenticar 2 origenes uno AD y el otro OpenLDAP independientes si me funcionan pero juntos no.

Algo a tener en cuenta?

Saludos.

Carlos G.
OTRS 2.4.7 > 3.3 Ubuntu Server - Centos - RedHat, MySQL - PostgresSQL OracleDB
esalazar88
Znuny newbie
Posts: 7
Joined: 03 Jul 2013, 21:04
Znuny Version: 3.2.4

Re: [How-To] Integración OTRS y LDAP

Post by esalazar88 »

Buenas Tardes! Antes que nada un cordial saludo!

El post está realmente bueno, es uno de los pocos en Español que de verdad explica bien el tema de la integración del OTRS con LDAP.

En esta oportunidad les escribo porque a pesar de que ya logro autenticar el otrs con el Active Directory se me esta presentando un pequeño inconveniente el cual quisiera compartir con ustedes y ver si me podrían ayudar. El tema es el siguiente:

Quiero saber si hay alguna manera de autenticar el OTRS solamente con el Active Directory sin necesidad de revisar la información del usuario en la BD, ya que actualmente si desactivo la sincronización de los usuarios de LDAP con la BD y el usuario con el que intento autenticar (creado en ldap) no se encuentra en la BD el sistema me arroja el siguiente error:

"Panic, user authenticated but no user data can be found in OTRS DB!! Perhaps the user is invalid." y si revisamos los logs tenemos:

[Wed Jul 3 14:24:13 2013][Notice][Kernel::System::Auth::LDAP::Auth] User: pprueba (CN=Pedro Prueba,CN=Users,DC=my,DC=otrs,DC=local) authentication ok (REMOTE_ADDR: 10.10.10.10).
[Wed Jul 3 14:24:13 2013][Error][Kernel::System::User::UserLookup][795] No UserID found for 'pprueba'!
[Wed Jul 3 14:24:13 2013][Error][Kernel::System::User::UserLookup][795] No UserID found for 'pprueba'!
[Wed Jul 3 14:24:13 2013][Notice][Kernel::System::User::GetUserData] Panic! No UserData for user: 'pprueba'!!!

Esto debido a que esta realizando la búsqueda de dicho usuario en la BD y el mismo no existe. Si activo la sincronización con BD, verifica el usuario en ldap y luego me lo crea en BD. Esto es en un principio es funcional, pero se da el caso de que si actualizo el password del usuario en AD, en la BD no se actualiza, permitiendo así ingresar en el sistema con ambas claves, es decir, con la clave nueva registrada en el AD y con la que esta en BD.

Si alguien me pudiera decir como autenticar solo con ldap o que la clave del usuario se actualice automáticamente al cambiarla en el AD se lo agradecería.

Otrs Version: 3.2.7

Sin más que agregar, Saludos Cordiales y de antemano muchas Gracias!!!
carlosgallego
Znuny expert
Posts: 241
Joined: 17 Nov 2011, 18:17
Znuny Version: 2.4-3.0-3.1-3.2- 3.3
Real Name: Carlos Gallego
Location: Medellin, Colombia

Re: [How-To] Integración OTRS y LDAP

Post by carlosgallego »

Hola compañero, bienvenido al foro.

Mira es relativamente sencillo la integracion del LDAP es de 2 formas solo autenticacion como esta descrito en este post en la parte superior.

La otra forma es configurar el LDAP como origen de datos. para ello debes modificar el archivo Config.pm de la implementación incluyendo las lineas que se explican en la documentacion.

http://doc.otrs.org/3.2/en/html/externa ... ckend-ldap

Saludos.
OTRS 2.4.7 > 3.3 Ubuntu Server - Centos - RedHat, MySQL - PostgresSQL OracleDB
esalazar88
Znuny newbie
Posts: 7
Joined: 03 Jul 2013, 21:04
Znuny Version: 3.2.4

Re: [How-To] Integración OTRS y LDAP

Post by esalazar88 »

Gracias carlosgallego por la respuesta!

Pero lo que mencionas es exactamente lo que he hecho, es decir configurar el módulo de autenticación con LDAP como aparece al principio del post.
Al hacer eso e intentar Autenticar, el usuario autentica pero no inicia la sesión ya que no consigue el usuario en la BD y me arroja el error que mencione "Panic, user authenticated but no user data can be found in OTRS DB!! Perhaps the user is invalid".

Como hacer para que autentique e inicie sesión sólo con ldap?

De antemano gracias por el apoyo!
esalazar88
Znuny newbie
Posts: 7
Joined: 03 Jul 2013, 21:04
Znuny Version: 3.2.4

Re: [How-To] Integración OTRS y LDAP

Post by esalazar88 »

Por si sirve de ayuda estoy usando la versión 3.2.7 la cual a parte del config.pm utiliza el archivo default.pm el cual es llamado al final del config.pm
carlosgallego
Znuny expert
Posts: 241
Joined: 17 Nov 2011, 18:17
Znuny Version: 2.4-3.0-3.1-3.2- 3.3
Real Name: Carlos Gallego
Location: Medellin, Colombia

Re: [How-To] Integración OTRS y LDAP

Post by carlosgallego »

Hola,

Las lineas para autenticacion son unas, y las que traen la informacion son otras. es decir.

Para que te muestre la informacion debes contar con algo como esto:

Code: Select all

# CustomerUser
# (customer ldap backend and settings)
$Self->{CustomerUser} = {
    Name => 'LDAP Data Source',
    Module => 'Kernel::System::CustomerUser::LDAP',
    Params => {
        # ldap host
        Host => 'bay.csuhayward.edu',
        # ldap base dn
        BaseDN => 'ou=seas,o=csuh',
        # search scope (one|sub)
        SSCOPE => 'sub',
        # The following is valid but would only be necessary if the
        # anonymous user does NOT have permission to read from the LDAP tree
        UserDN => '',
        UserPw => '',
        # in case you want to add always one filter to each ldap query, use
        # this option. e. g. AlwaysFilter => '(mail=*)' or AlwaysFilter => '(objectclass=user)'
        AlwaysFilter => '',
            # if both your frontend and your LDAP are unicode, use this:
            SourceCharset => 'utf-8',
            DestCharset   => 'utf-8',
            # if your frontend is unicode and the charset of your
            # ldap server is iso-8859-1, use these options.
            # SourceCharset => 'iso-8859-1',
            # DestCharset => 'utf-8',
            # Net::LDAP new params (if needed - for more info see perldoc Net::LDAP)
            Params => {
                port => 389,
                timeout => 120,
                async => 0,
                version => 3,
            },
    },
    # customer unique id
    CustomerKey => 'uid',
    # customer #
    CustomerID => 'mail',
    CustomerUserListFields => ['cn', 'mail'],
    CustomerUserSearchFields => ['uid', 'cn', 'mail'],
    CustomerUserSearchPrefix => '',
    CustomerUserSearchSuffix => '*',
    CustomerUserSearchListLimit => 250,
    CustomerUserPostMasterSearchFields => ['mail'],
    CustomerUserNameFields => ['givenname', 'sn'],
    # show not own tickets in customer panel, CompanyTickets
    CustomerUserExcludePrimaryCustomerID => 0,
    # add an ldap filter for valid users (expert setting)
#    CustomerUserValidFilter => '(!(description=locked))',
    # administrator can't change customer preferences
    AdminSetPreferences => 0,
#    # cache time to live in sec. - cache any database queries
#    CacheTTL => 0,
    Map => [
        # note: Login, Email and CustomerID are mandatory!
        # var, frontend, storage, shown (1=always,2=lite), required, storage-type, http-link, readonly
        [ 'UserTitle',      'Title',      'title',           1, 0, 'var', '', 0 ],
        [ 'UserFirstname',  'Firstname',  'givenname',       1, 1, 'var', '', 0 ],
        [ 'UserLastname',   'Lastname',   'sn',              1, 1, 'var', '', 0 ],
        [ 'UserLogin',      'Username',   'uid',             1, 1, 'var', '', 0 ],
        [ 'UserEmail',      'Email',      'mail',            1, 1, 'var', '', 0 ],
        [ 'UserCustomerID', 'CustomerID', 'mail',            0, 1, 'var', '', 0 ],
#        [ 'UserCustomerIDs', 'CustomerIDs', 'second_customer_ids', 1, 0, 'var', '', 0 ],
        [ 'UserPhone',      'Phone',      'telephonenumber', 1, 0, 'var', '', 0 ],
        [ 'UserAddress',    'Address',    'postaladdress',   1, 0, 'var', '', 0 ],
        [ 'UserComment',    'Comment',    'description',     1, 0, 'var', '', 0 ],
    ],
};
Una vez tengas esta info definida y funcional revisa que los clientes que quieres autenticar o mostrar la info, tengan ya valores cargados en los campos que mapeaste, adiconal no esta de mas que revises que si se encuentren en la OU de donde quieres tomar los datos.

Saludos.
OTRS 2.4.7 > 3.3 Ubuntu Server - Centos - RedHat, MySQL - PostgresSQL OracleDB
AnaP
Znuny newbie
Posts: 13
Joined: 03 Jul 2013, 17:48
Znuny Version: OTRS::ITSM 3.1.3

Re: [How-To] Integración OTRS y LDAP

Post by AnaP »

Hola a todos!

Estoy intentando integar LDAP con OTRS, pero no consigo que un usuario que pertenece a dos grupos diferentes en LDAP tengas todos los privilegios (rw) en los grupos de OTRS, ya que estoy sincronizando los grupos de OTRS con los de LDAP. Me he fijado que aplica el mas restrictivo. No consigo que un usuario que pertenezca a dos grupos tenga todos los derechos y el que pertenezca solo ha un grupo de ellos privilegios de escalado. Estoy tratando con agentes y me han dicho que se puede hacer pero no consigo ver ningún ejemplo de ello.

Muchas gracias de antemano
esalazar88
Znuny newbie
Posts: 7
Joined: 03 Jul 2013, 21:04
Znuny Version: 3.2.4

Re: [How-To] Integración OTRS y LDAP

Post by esalazar88 »

Buenas Tardes!

Gracias por la ayuda carlosgallego pero aún sigo sin poder autenticar al 100% contra ldap.

El código que colocas para que me traiga la información es referente a los customer pero en mi caso sólo estoy trabajando con Agent. Hay una manera de autenticar y sincronizar completamente la data de los Agent??

De antemano Gracias!
juanmattica
Znuny newbie
Posts: 8
Joined: 16 Jul 2013, 15:09
Znuny Version: 3.2.8

Re: [How-To] Integración OTRS y LDAP

Post by juanmattica »

estimados estoy teniendo un problema con la sincronizacion con ldap.

el fallo que estoy teniendo es cuando voy a administracion/clientes me muestra los clientes en blanco sin ninguna informacion. pero muestra una lista.
es decir si intento hacer una busqueda de un nombre me da un resultado de varias filas, pero en blanco.

a continucacion les adjunto mi config.pm. si me pueden dar una mano seria excelente. muchas gracias



# --
# Kernel/Config.pm - Config file for OTRS kernel
# Copyright (C) 2001-2013 xxx, http://otrs.org/
# --
# This software comes with ABSOLUTELY NO WARRANTY. For details, see
# the enclosed file COPYING for license information (AGPL). If you
# did not receive this file, see http://www.gnu.org/licenses/agpl.txt.
# --
# Note:
#
# -->> Most OTRS configuration should be done via the OTRS web interface
# and the SysConfig. Only for some configuration, such as database
# credentials and customer data source changes, you should edit this
# file. For changes do customer data sources you can copy the definitions
# from Kernel/Config/Defaults.pm and paste them in this file.
# Config.pm will not be overwritten when updating OTRS.
# --

package Kernel::Config;

use strict;
use warnings;
use utf8;

sub Load {
my $Self = shift;

# ---------------------------------------------------- #
# database settings #
# ---------------------------------------------------- #

# The database host
$Self->{'DatabaseHost'} = 'localhost';

# The database name
$Self->{'Database'} = 'otrs';

# The database user
$Self->{'DatabaseUser'} = 'otrs';

# The password of database user. You also can use bin/otrs.CryptPassword.pl
# for crypted passwords
$Self->{'DatabasePw'} = 'hot';

# The database DSN for MySQL ==> more: "perldoc DBD::mysql"
$Self->{DatabaseDSN} = "DBI:mysql:database=$Self->{Database};host=$Self->{DatabaseHost};";

# The database DSN for PostgreSQL ==> more: "perldoc DBD::Pg"
# if you want to use a local socket connection
# $Self->{DatabaseDSN} = "DBI:Pg:dbname=$Self->{Database};";
# if you want to use a TCP/IP connection
# $Self->{DatabaseDSN} = "DBI:Pg:dbname=$Self->{Database};host=$Self->{DatabaseHost};";
# if you have PostgresSQL 8.1 or earlier, activate the legacy driver with this line:
# $Self->{DatabasePostgresqlBefore82} = 1;

# The database DSN for Microsoft SQL Server - only supported if OTRS is
# installed on Windows as well
# $Self->{DatabaseDSN} = "DBI:ODBC:driver={SQL Server};Database=$Self->{Database};Server=$Self->{DatabaseHost},1433";

# The database DSN for Oracle ==> more: "perldoc DBD::oracle"
# $ENV{ORACLE_HOME} = '/u01/app/oracle/product/10.2.0/client_1';
# $ENV{NLS_DATE_FORMAT} = 'YYYY-MM-DD HH24:MI:SS';
# $ENV{NLS_LANG} = "american_america.utf8";

# $Self->{DatabaseDSN} = "DBI:Oracle:sid=OTRS;host=$Self->{DatabaseHost};port=1522;";


# ---------------------------------------------------- #
# fs root directory
# ---------------------------------------------------- #
$Self->{Home} = '/opt/otrs';

# ---------------------------------------------------- #
# insert your own config settings "here" #
# config settings taken from Kernel/Config/Defaults.pm #
# ---------------------------------------------------- #
# $Self->{SessionUseCookie} = 0;
# $Self->{CheckMXRecord} = 0;

# ---------------------------------------------------- #


$Self->{'LogModule'} = 'Kernel::System::Log::File';

$Self->{'LogModule::LogFile'} = '/opt/otrs/var/log/otrs.log';
# $DIBI$

########### INTEGRACION LDAP ##################
# This is an example configuration for using an MS AD backend
$Self->{'AuthModule'} = 'Kernel::System::Auth::LDAP';
$Self->{'AuthModule::LDAP::Host'} = '10.0.1.36:389';
$Self->{'AuthModule::LDAP::BaseDN'} = 'dc=promedon,dc=org';
$Self->{'AuthModule::LDAP::UID'} = 'sAMAccountName';
# Bind credentials to log into AD
$Self->{'AuthModule::LDAP::SearchUserDN'} = 'CN=otrs,DC=promedon,DC=org';
$Self->{'AuthModule::LDAP::SearchUserPw'} = 'promedon';
$Self->{'AuthModule::LDAP::Params'} = {
port => 389,
timeout => 120,
async => 0,
version => 3,
};

# Check if the user is allowed to auth in a posixGroup
# (e. g. user needs to be in a group OTRS_Agents to use otrs)
$Self->{'AuthModule::LDAP::GroupDN'} = 'CN=otrs_allow_A,DC=promedon,DC=org';
$Self->{'AuthModule::LDAP::AccessAttr'} = 'member';
$Self->{'AuthModule::LDAP::UserAttr'} = 'DN';


# agent data sync against ldap
$Self->{'AuthSyncModule'} = 'Kernel::System::Auth::Sync::LDAP';
$Self->{'AuthSyncModule::LDAP::Host'} = '10.0.1.36:389';
$Self->{'AuthSyncModule::LDAP::BaseDN'} = 'dc=promedon,dc=org';
$Self->{'AuthSyncModule::LDAP::UID'} = 'sAMAccountName';
$Self->{'AuthSyncModule::LDAP::SearchUserDN'} = 'CN=otrs,DC=promedon,DC=org';
$Self->{'AuthSyncModule::LDAP::SearchUserPw'} = 'promedon';
$Self->{'AuthSyncModule::LDAP::UserSyncMap'} = {
# DB -> LDAP
UserFirstname => 'givenName',
UserLastname => 'name',
UserEmail => 'mail',
};
$Self->{'AuthSyncModule::LDAP::UserSyncInitialGroups'} = [
'users',
];

# Autenticacion Multple: Segundo Nivel
$Self->{'AuthModule2'} = 'Kernel::System::Auth::DB';
$Self->{'AuthModule::DB::CryptType2'} = 'crypt';


$Self->{'Customer::AuthModule'} = 'Kernel::System::CustomerAuth::LDAP';
$Self->{'Customer::AuthModule::LDAP::Host'} = '10.0.1.36:389';
$Self->{'Customer::AuthModule::LDAP::BaseDN'} ='dc=promedon,dc=org';
$Self->{'Customer::AuthModule::LDAP::UID'} = 'sAMAccountName';
$Self->{'Customer::AuthModule::LDAP::SearchUserDN'} ='CN=otrs,DC=promedon,DC=org';
$Self->{'Customer::AuthModule::LDAP::SearchUserPw'} = 'promedon';
$Self->{'Customer::AuthModule::LDAP::AlwaysFilter'} = '';
$Self->{'Customer::AuthModule::LDAP::Params'} = {
port => 389,
timeout => 120,
async => 0,
version => 3,
};

#Configuracion del Cliente con el LDAP (customers)

#CustomerUser
#(customer user database backend and settings)
$Self->{CustomerUser} = {
Name => 'AD',
Module => 'Kernel::System::CustomerUser::LDAP',
Params => {
Host => '10.0.1.36:389',
BaseDN => 'dc=promedon,dc=org',
SSCOPE => 'sub',
UserDN =>'CN=otrs,DC=promedon,DC=org',
UserPw => 'promedon',
#SourceCharset => 'iso-8859-1',
#DestCharset => 'utf-8',
},
# customer unique id
CustomerKey => 'cn',
# customer #
CustomerID => 'mail',
CustomerUserListFields => ['sAMAccountName', 'cn', 'mail'],
CustomerUserSearchFields => ['sAMAccountName', 'cn', 'mail'],
CustomerUserSearchPrefix => '',
CustomerUserSearchSuffix => '*',
CustomerUserSearchListLimit => 500,
CustomerUserPostMasterSearchFields => ['mail'],
CustomerUserNameFields => ['givenname', 'sn'],
Map => [
[ 'UserSalutation', 'Salutation', 'title', 1, 0, 'var', '', 0 ],
[ 'UserFirstname', 'Firstname', 'first_name', 1, 1, 'var', '', 0 ],
[ 'UserLastname', 'Lastname', 'last_name', 1, 1, 'var', '', 0 ],
[ 'UserLogin', 'Username', 'login', 1, 0, 'var', '', 0 ],
[ 'UserPassword', 'Password', 'pw', 1, 0, 'var', '', 0 ],
[ 'UserEmail', 'Email', 'email', 1, 1, 'var', '', 0 ],
[ 'UserCustomerID', 'CustomerID', 'customer_id', 1, 0, 'var', '', 0 ],
[ 'Telefono', 'Telefono', 'phone', 1, 0, 'var', '', 0 ],
[ 'Fax', 'Fax', 'fax', 1, 0, 'var', '', 0 ],
[ 'Movil', 'Movil', 'mobile', 1, 0, 'var', '', 0 ],
[ 'Calle', 'Calle', 'street', 1, 0, 'var', '', 0 ],
[ 'CP', 'CP', 'zip', 1, 0, 'var', '', 0 ],
[ 'Ciudad', 'Ciudad', 'city', 1, 0, 'var', '', 0 ],
[ 'Pais', 'Pais', 'country', 1, 0, 'var', '', 0 ],
[ 'Empresa', 'Empresa', 'empresa', 1, 0, 'var', '', 0 ],
[ 'Departamento', 'Departamento','departamento', 1, 0, 'var', '', 0 ],
[ 'Ubicacion', 'Ubicacion', 'ubicacion', 1, 0, 'var', '', 0 ],
[ 'ValidID', 'Valid', 'valid_id', 1, 1, 'int', '', 0 ],
[ 'UserComment', 'Comment', 'comments', 1, 0, 'var', '', 0 ],
],
};
# ---------------------------------------------------- #
# insert your own config settings "here" #
# config settings taken from Kernel/Config/Defaults.pm #
# ---------------------------------------------------- #



# ---------------------------------------------------- #
# data inserted by installer #
# ---------------------------------------------------- #
# $DIBI$

# ---------------------------------------------------- #
# ---------------------------------------------------- #
# #
# end of your own config options!!! #
# #
# ---------------------------------------------------- #
# ---------------------------------------------------- #
}

# ---------------------------------------------------- #
# needed system stuff (don't edit this) #
# ---------------------------------------------------- #
use strict;
use warnings;

use vars qw(@ISA);

use Kernel::Config::Defaults;
push (@ISA, 'Kernel::Config::Defaults');

# -----------------------------------------------------#

1;
carlosgallego
Znuny expert
Posts: 241
Joined: 17 Nov 2011, 18:17
Znuny Version: 2.4-3.0-3.1-3.2- 3.3
Real Name: Carlos Gallego
Location: Medellin, Colombia

Re: [How-To] Integración OTRS y LDAP

Post by carlosgallego »

Hola compañero.

Tu problema esta en estos campos:
[ 'UserSalutation', 'Salutation', 'title', 1, 0, 'var', '', 0 ],
[ 'UserFirstname', 'Firstname', 'first_name', 1, 1, 'var', '', 0 ],
[ 'UserLastname', 'Lastname', 'last_name', 1, 1, 'var', '', 0 ],
[ 'UserLogin', 'Username', 'login', 1, 0, 'var', '', 0 ],
[ 'UserPassword', 'Password', 'pw', 1, 0, 'var', '', 0 ],
[ 'UserEmail', 'Email', 'email', 1, 1, 'var', '', 0 ],
[ 'UserCustomerID', 'CustomerID', 'customer_id', 1, 0, 'var', '', 0 ],
[ 'Telefono', 'Telefono', 'phone', 1, 0, 'var', '', 0 ],
[ 'Fax', 'Fax', 'fax', 1, 0, 'var', '', 0 ],
[ 'Movil', 'Movil', 'mobile', 1, 0, 'var', '', 0 ],
Los valores de la tercera columna deben ser tal como se llaman en el directorio activo. por ejemplo estos 2 que recuerdo de memoria.

Code: Select all

[ 'UserEmail', 'Email', 'mail', 1, 1, 'var', '', 0 ],
[ 'UserLogin', 'Username', 'SamAccountName', 1, 0, 'var', '', 0 ],
Tambien debes relacionar el common name y demas, te recomiendo leer la documentacion de la configuracion del backend alli estan los ejemplos de como poner esta informacion.

Tambien puedes realizar un ldapsearch desde el linux para determinar los nombres de los valores mencionados

Saludos.
OTRS 2.4.7 > 3.3 Ubuntu Server - Centos - RedHat, MySQL - PostgresSQL OracleDB
esalazar88
Znuny newbie
Posts: 7
Joined: 03 Jul 2013, 21:04
Znuny Version: 3.2.4

Re: [How-To] Integración OTRS y LDAP

Post by esalazar88 »

Mi problema continúa con la actualización del password!

Si cambio la clave en ldap no se syncroniza la nueva clave con la bd =S. Por el contrario si cambio algún otro campo como el nombre en ldap si se syncroniza todo de nuevo incluyendo el password. =S
juanmattica
Znuny newbie
Posts: 8
Joined: 16 Jul 2013, 15:09
Znuny Version: 3.2.8

Re: [How-To] Integración OTRS y LDAP

Post by juanmattica »

carlos muchisimas gracias por tu ayuda. realmente me funciono.
ahora estoy teniendo otros problemas, porque el usuario que cree en ldap y me trae los datos en otrs, me trae toda la informacion y solo deseo ver los usuarios. hay alguna forma de filtrarlos??

carlosgallego wrote:Hola compañero.

Tu problema esta en estos campos:
[ 'UserSalutation', 'Salutation', 'title', 1, 0, 'var', '', 0 ],
[ 'UserFirstname', 'Firstname', 'first_name', 1, 1, 'var', '', 0 ],
[ 'UserLastname', 'Lastname', 'last_name', 1, 1, 'var', '', 0 ],
[ 'UserLogin', 'Username', 'login', 1, 0, 'var', '', 0 ],
[ 'UserPassword', 'Password', 'pw', 1, 0, 'var', '', 0 ],
[ 'UserEmail', 'Email', 'email', 1, 1, 'var', '', 0 ],
[ 'UserCustomerID', 'CustomerID', 'customer_id', 1, 0, 'var', '', 0 ],
[ 'Telefono', 'Telefono', 'phone', 1, 0, 'var', '', 0 ],
[ 'Fax', 'Fax', 'fax', 1, 0, 'var', '', 0 ],
[ 'Movil', 'Movil', 'mobile', 1, 0, 'var', '', 0 ],
Los valores de la tercera columna deben ser tal como se llaman en el directorio activo. por ejemplo estos 2 que recuerdo de memoria.

Code: Select all

[ 'UserEmail', 'Email', 'mail', 1, 1, 'var', '', 0 ],
[ 'UserLogin', 'Username', 'SamAccountName', 1, 0, 'var', '', 0 ],
Tambien debes relacionar el common name y demas, te recomiendo leer la documentacion de la configuracion del backend alli estan los ejemplos de como poner esta informacion.

Tambien puedes realizar un ldapsearch desde el linux para determinar los nombres de los valores mencionados

Saludos.
AnaP
Znuny newbie
Posts: 13
Joined: 03 Jul 2013, 17:48
Znuny Version: OTRS::ITSM 3.1.3

Re: [How-To] Integración OTRS y LDAP

Post by AnaP »

Hola a todos!

Estoy intentando integar LDAP con OTRS, pero no consigo que un usuario que pertenece a dos grupos diferentes en LDAP tengas todos los privilegios (rw) en los grupos de OTRS, ya que estoy sincronizando los grupos de OTRS con los de LDAP. Me he fijado que aplica el mas restrictivo. No consigo que un usuario que pertenezca a dos grupos tenga todos los derechos y el que pertenezca solo ha un grupo de ellos privilegios de escalado. Estoy tratando con agentes y me han dicho que se puede hacer pero no consigo ver ningún ejemplo de ello. Sigo buscando y aunque me han dicho que se puede hacer no consigo realizarlo, alguien me puede guiar o ayudar, por favor?

Un ejemplo de código que tengo es.

$Self->{'AuthSyncModule::LDAP::UserSyncGroupsDefinition'} = {
'cn=Unix,ou=GROUPS,dc=plaza,dc=eu' => {
'OPER' => {
move_into => 1,
ro => 1,
},
'Soporte Almacenamiento-Backup' => {
move_into => 1,
ro => 1,
},
'Soporte Antivirus' => {
move_into => 1,
ro => 1,
},
'Soporte Unix' => {
rw => 1,
},

},
'cn=Almacenamiento,ou=GROUPS,dc=plaza,dc=eu' => {
'OPER' => {
move_into => 1,
ro => 1,
},
'Soporte Almacenamiento-Backup' => {
rw => 1,
},
'Soporte Antivirus' => {
move_into => 1,
ro => 1,
},
'Soporte Unix' => {
move_into => 1,
ro => 1,
},
}
…..
};

Yo lo que quiero es que el usuario que pertence a Unix y Almacenamiento tenga derechos de rw para esos grupos y para el resto solo derechos de lectura y escalado, pero no consigo porque chocan los derechos. Se puede realizar de alguna forma?? Carlosgallego me puedes indicar si se puede realizar?

Muchas gracias de antemano
esalazar88
Znuny newbie
Posts: 7
Joined: 03 Jul 2013, 21:04
Znuny Version: 3.2.4

Re: [How-To] Integración OTRS y LDAP

Post by esalazar88 »

Buenas Tardes! Ya logre resolver los problemas que mencione en mi anteriores publicaciones y de hecho ya estoy autenticando a la perfección con asignación de roles y todo! Pero como nunca falta el Sr Murphy ahorita que estoy realizando la migración de la configuración al ambiente de producción por llamarlo de alguna manera se me esta presentando un problema de Search Failed y por lo visto en los logs es cuestión de interpretación de acentos cuando realiza la búsqueda en el Directorio Activo.

Básicamente está tomando la o acentuada "ó" como F3 el cual corresponde a su código asccii Hex.

El log muestra:

Mon Sep 9 15:20:01 2013][Error][Kernel::System::Auth::LDAP::Auth][273] Search failed! base='CN=Seguridad de la InformaciF3n' ....


Saben como resolver este problema?
Nota: En el directorio activo el CN está creado con acento es decir "CN=Seguridad de la Información"
carlosgallego
Znuny expert
Posts: 241
Joined: 17 Nov 2011, 18:17
Znuny Version: 2.4-3.0-3.1-3.2- 3.3
Real Name: Carlos Gallego
Location: Medellin, Colombia

Re: [How-To] Integración OTRS y LDAP

Post by carlosgallego »

Hola esalazar,

En la opcion de traer datos del ldap existe la posibilidad de setear los valores del charset de entrada y de salida, estos deben ser en utf-8

Son estass lineas.

# SourceCharset => 'iso-8859-1',
# DestCharset => 'utf-8',

Ubicalas y juega con ellas, para que te de el resultado requerido, sin embargo personalmente recomiendo NO usar caracteres especiales en los login, ya que algunas aplicaciones pueden presentar este problema.

Saludos.
OTRS 2.4.7 > 3.3 Ubuntu Server - Centos - RedHat, MySQL - PostgresSQL OracleDB
esalazar88
Znuny newbie
Posts: 7
Joined: 03 Jul 2013, 21:04
Znuny Version: 3.2.4

Re: [How-To] Integración OTRS y LDAP

Post by esalazar88 »

Buenas carlosgallego,

Gracias por el apoyo pero lo acabo de resolver colocando esta función:

utf8::decode('Aquí el String de LDAP');

Tienes toda la razón con respecto al no usar carácteres especiales en los login porque puede traer problemas, pero bueno ya la definición del grupo en el LDAP estaba creado así y no puedo modificarlo.

Saludos y Gracias por el apoyo prestado!
AzazelMendoza
Znuny newbie
Posts: 5
Joined: 05 Sep 2016, 16:09
Znuny Version: version 5
Real Name: Tyronne Mendoza
Company: mefcorp

Re: [How-To] Integración OTRS y LDAP

Post by AzazelMendoza »

Hola en el caso de la version 5 el archivo config.pm no tiene esas lineas, donde puedo encontrar esa configuracion?
facundocaballe
Znuny newbie
Posts: 12
Joined: 27 Mar 2017, 22:07
Znuny Version: OTRS5
Real Name: Facundo Caballe
Company: Yagmour

Re: [How-To] Integración OTRS y LDAP

Post by facundocaballe »

AzazelMendoza wrote:Hola en el caso de la versión 5 el archivo config.pm no tiene esas lineas, donde puedo encontrar esa configuración?
Hola que tal. Me pasa lo mismo que a Azazel. No encuentro donde colocar esta información. Intente ponerlo en cualquier linea del archivo Config.pm, y no me levanto el servidor. Volví atrás y no hubo problema.
Pero necesitaría poder hacerlo.

Agradezco su ayuda.

Saludos.
Facundo
alangc
Znuny newbie
Posts: 6
Joined: 11 Apr 2017, 16:53
Znuny Version: otrs 3.2.9

Re: [How-To] Integración OTRS y LDAP

Post by alangc »

Una consulta, se pueden poner mas de un grupo para la autenticación? ... es decir algo asi...
# ---------------------------------------------------- #
# Autentificacion LDAP Directorio Activo IMCS Group
$Self->{'AuthModule'} = 'Kernel::System::Auth::LDAP';
$Self->{'AuthModule::LDAP::Host'} = '0.0.0.0';
$Self->{'AuthModule::LDAP::BaseDN'} = 'ou=Usuarios,dc=xxxx,dc=xx';
$Self->{'AuthModule::LDAP::UID'} = 'sAMAccountName';
$Self->{'AuthModule::LDAP::SearchUserDN'} = 'cn=apache,ou=xxxxxx,ou=xxxxxx,dc=xxxx,dc=xx';
$Self->{'AuthModule::LDAP::SearchUserPw'} = '';
$Self->{'AuthModule::LDAP::AlwaysFilter'} = '(objectClass=*)';
$Self->{'AuthModule::LDAP::GroupDN'} = 'CN=ESTRUCTURA_1,OU=Estructura,OU=Grupos,DC=xxxx,DC=xx';
$Self->{'AuthModule::LDAP::GroupDN'} = 'CN=ESTRUCTURA_2,OU=Estructura,OU=Grupos,DC=xxxx,DC=xx';

$Self->{'AuthModule::LDAP::AccessAttr'} = 'member';
miguelmz
Znuny wizard
Posts: 370
Joined: 17 Nov 2011, 17:46
Znuny Version: 6.0.10
Real Name: Miguel
Company: SIA
Location: Madrid, Spain.

Re: [How-To] Integración OTRS y LDAP

Post by miguelmz »

Hola,

Hacia tiempo que no entraba por aqui e igual te pilla un poco tarde :lol:
No se puede duplicar esos atributos dentro del mismo perfil, lo que tendrias que hacer es repetir toda la estructura seguido de uno numero entero.

$Self->{'AuthModule1'} = 'Kernel::System::Auth::LDAP';
$Self->{'AuthModule::LDAP::Host1'} = '0.0.0.0';
$Self->{'AuthModule::LDAP::BaseDN1'} = 'ou=Usuarios,dc=xxxx,dc=xx';
$Self->{'AuthModule::LDAP::UID1'} = 'sAMAccountName';
$Self->{'AuthModule::LDAP::SearchUserDN1'} = 'cn=apache,ou=xxxxxx,ou=xxxxxx,dc=xxxx,dc=xx';
$Self->{'AuthModule::LDAP::SearchUserPw1'} = '';
$Self->{'AuthModule::LDAP::AlwaysFilter1'} = '(objectClass=*)';
$Self->{'AuthModule::LDAP::GroupDN1'} = 'CN=ESTRUCTURA_1,OU=Estructura,OU=Grupos,DC=xxxx,DC=xx';

Pero deberas tener en mente que eso haria intentos de autenticacion en orden: primero el sin numero, luego el 1, 2, 3 y asi sucesivamente.
Lo que podria provocar (segun configuracion del LDAP) que se bloqueen usuarios.

Un saludo
We want OTRS certifications in Spain!!

Check out my free addons! :mrgreen:
Post Reply