Páginas

quinta-feira, 7 de janeiro de 2016

Integrando OTRS 5 no OpenLDAP

Ai Pessoal,

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