Há 2 anos eu fiz uma integração entre o OpenLDAP e o OTRS, fazendo parte de um conjunto de softwares para automação de infra-estrutura, facilitando sua manutenção e utilização.
OTRS: é um software aberto (com versão business também) que está a muito, mais muito tempo no mercado se torando um dos lideres Open Source para gerenciamento de serviços de TI e outros itens em geral que utilizam sistema de Requisições de Tickets.
OpenLDAP: é um software aberto que implementa o Lightweight Directory Access Protocol que é o protocolo padrão para diretório, concorrendo diretamente com o MS Active Directory.
Segue abaixo o Guia Prático de como integrar o OpenLDAP + OTRS ITSM versão 5.
Obervações:
- Diferente das outras configurações do OTRS, o OpenLDAP Auth é necessário configurar no arquivo Kernel/Config.pm
- Realmente, vale a pena ler o arquivo Kernel/Config/Defaults.pm! ele contém mais informações que o manual.
. - RTFM
Para facilitar o entendimento das integrações segue um diagrama de como está baseada a configuração do LDAP onde estamos autenticando.
Diagrama do LDAP
# OpenLDAP
# Parte 1: Autentica os Atendentes (Agents) no LDAP
$Self->{'AuthModule'} = 'Kernel::System::Auth::LDAP';
$Self->{'AuthModule::LDAP::Host'} = 'ldap.magicorp.com.br';
$Self->{'AuthModule::LDAP::BaseDN'} = 'dc=ldap,dc=magicorp,dc=com,dc=br';
$Self->{'AuthModule::LDAP::UID'} = 'uid';
$Self->{'AuthModule::LDAP::SearchUserDN'} = 'cn=admin,dc=ldap,dc=magicorp,dc=com,dc=br';
$Self->{'AuthModule::LDAP::SearchUserPw'} = 'M1nh4S3nh4';
$Self->{'AuthModule::LDAP::AlwaysFilter'} = '(|(memberOf=cn=Magicorp,ou=Users,dc=ldap,dc=magicorp,dc=com,dc=br)(memberOf=cn=OTRS,ou=Groups,dc=ldap,dc=magicorp,dc=com,dc=br))';
$Self->{'AuthModule::LDAP::UserSuffix'} = '';
$Self->{'AuthModule::LDAP::Params'} = {port => 389,timeout => 120,async => 0,version => 3,};
# Sincroniza os Agents do LDAP no DB local do OTRS
$Self->{'AuthSyncModule'} = 'Kernel::System::Auth::Sync::LDAP';
$Self->{'AuthSyncModule::LDAP::Host'} = 'ldap.magicorp.com.br';
$Self->{'AuthSyncModule::LDAP::BaseDN'} = 'dc=ldap,dc=magicorp,dc=com,dc=br';
$Self->{'AuthSyncModule::LDAP::UID'} = 'uid';
$Self->{'AuthSyncModule::LDAP::SearchUserDN'} = 'cn=admin,dc=ldap,dc=magicorp,dc=com,dc=br';
$Self->{'AuthSyncModule::LDAP::SearchUserPw'} = 'M1nh4S3nh4';
$Self->{'AuthSyncModule::LDAP::UserSyncMap'} = {
# DB -> LDAP
UserFirstname => 'givenName',
UserLastname => 'sn',
UserEmail => 'mail',
UserLogin => "uid",
};
# Use estas linhas de exemplo para sincronizar todos do grupo "Users" para o DB,
# sem diferenciação.
# AuthSyncModule::LDAP::UserSyncInitialGroups
# (Sincroniza o seguinte grupo com permissão rw após o primeiro Agent autenticar)
$Self->{'AuthSyncModule::LDAP::UserSyncInitialGroups'} = ['Users',];
# Use isto para sincronizar os grupos do LDAP no OTRS
$Self->{'AuthSyncModule::LDAP::AccessAttr'} = 'member';
$Self->{'AuthSyncModule::LDAP::UserAttr'} = 'DN';
# Coloque eles aqui
$Self->{'AuthSyncModule::LDAP::UserSyncGroupsDefinition'} = {
'cn=L3,ou=OTRS,ou=Groups,dc=ldap,dc=magicorp,dc=com,dc=br' => {
'admin' => {
rw => 1,
ro => 1,
},
'faq' => {
rw => 1,
ro => 0,
},
'users' => {
rw => 1,
ro => 1,
},
},
'cn=L1,ou=OTRS,ou=Groups,dc=ldap,dc=magicorp,dc=com,dc=br' => {
'l1' => {
rw => 1,
ro => 1,
},
'faq' => {
rw => 0,
ro => 0,
},
'users' => {
rw => 1,
ro => 1,
},
},
# Parte 2: autentica os Clientes(Customers) no LDAP
# A nomeclatura "2" no final dos itens mantém de forma conjunta o LDAP e o DB como autenticações
$Self->{'Customer::AuthModule2'} = 'Kernel::System::CustomerAuth::LDAP';
$Self->{'Customer::AuthModule::LDAP::Host2'} = 'ldap.magicorp.com.br';
$Self->{'Customer::AuthModule::LDAP::BaseDN2'} = 'dc=ldap,dc=magicorp,dc=com,dc=br';
$Self->{'Customer::AuthModule::LDAP::UID2'} = 'uid';
$Self->{'Customer::AuthModule::LDAP::SearchUserDN2'} = 'cn=admin,dc=ldap,dc=magicorp,dc=com,dc=br';
$Self->{'Customer::AuthModule::LDAP::SearchUserPw2'} = 'M1nh4S3nh4';
$Self->{'Customer::AuthModule::LDAP::AlwaysFilter2'} = '(memberOf=ou=Clientes,ou=Users,dc=ldap,dc=magicorp,dc=com,dc=br)';
$Self->{'Customer::AuthModule::LDAP::Params'} = {
port => 389,
timeout => 120,
async => 0,
version => 3,
};
# Mapeia os Atributos dos Clientes
$Self->{CustomerUser2} = {
Name => 'LDAP-Backend',
Module => 'Kernel::System::CustomerUser::LDAP',
Params => {
Host => 'ldap.magicorp.com.br',
BaseDN => 'dc=ldap,dc=magicorp,dc=com,dc=br',
SSCOPE => 'sub',
UserDN => 'cn=admin,dc=ldap,dc=magicorp,dc=com,dc=br',
UserPw => 'M1nh4S3nh4',
AlwaysFilter => '(memberOf=ou=Clientes,ou=Users,dc=ldap,dc=magicorp,dc=com,dc=br)',
},
CustomerKey => 'uid',
CustomerID => 'mail',
# show these fields when searching in admin interface
CustomerUserListFields => ['uid', 'cn', 'mail'],
# search for these fields in ldap
CustomerUserSearchFields => ['uid', 'cn', 'mail'],
CustomerUserSearchPrefix => '',
CustomerUserSearchSuffix => '*',
CustomerUserSearchListLimit => 250,
CustomerUserPostMasterSearchFields => ['mail'],
CustomerUserNameFields => ['givenName', 'sn'],
Map => [
# note: Login, Email and CustomerID needed!
# var, frontend, storage, shown, required, storage-type
[ 'UserFirstname', 'Firstname', 'givenName', 1, 1, 'var' ],
[ 'UserLastname', 'Lastname', 'sn', 1, 1, 'var' ],
[ 'UserLogin', 'Login', 'uid', 1, 1, 'var' ],
[ 'UserEmail', 'Email', 'mail', 1, 1, 'var' ],
[ 'UserCustomerID', 'CustomerID', 'uid', 0, 1, 'var' ],
],
};
# IMPORTANTE: Clientes não são sincronizados no MySQL®
# ---------------------------------------------------- #


Nenhum comentário:
Postar um comentário