Интеграция OTRS и Active Directory
Введение
При развертывании OTRS в корпоративном ИТ-ландшафте использование Active Directory (далее - AD) в качестве средства аутентификации и хранилища учетных записей безусловно, является лучшей практикой.
Active Directory может быть задействован для:
- Хранения учетных записей и аутентификации агентов
- Хранения учетных записей и аутентификации клиентов
- Маппинга групп безопасности
В Таблице 1 приведены сценарии использования внешних хранилищ учетных записей клиентов и агентов в зависимости от направлений предоставления ИТ-услуг.
ИТ услуги предоставляются: | Хранилище агентов | Хранилище клиентов |
---|---|---|
Внешним потребителям (CRM-система отсутствует) | Внешнее (AD) | Внутреннее (база OTRS) |
Внешним потребителям (клиенты ведутся в CRM-системе) | Внешнее (AD) | Внешняя база данных |
Внутренним потребителям (подразделениям компании) | Внешнее (AD) | Внешнее (AD) |
- Нюансы ведения клиентов (customers) во внешней базе выходят за рамки настоящей статьи, этот вопрос достаточно хорошо освещен в официальной документации, раздел Using External backends.
- Конфигурационные параметры задаются в файле Kernel/Config.pm.
- Для получения дополнительной информации по синтаксису и настройкам необходимо обратить внимание на конфигурационный файл Kernel/Config/Defaults.pm.
-
Перед выполнением настроек необходимо получить нужные атрибуты LDAP. В Microsoft Windows Server используется утилита ldifde, например:
ldifde –f ldap.txt
Либо использовать инструментарий наподобие LDAP Explorer Tool или Apache Directory Studio. - Доступ OTRS к дереву LDAP осуществляется в режиме только чтения. Вы не сможете редактировать данные, извлеченные из Active Directory посредством OTRS.
Аутентификация пользователей (агентов)
Аутентификация агентов - модуль Kernel::System::Auth::LDAP.
$Self->{'AuthModule'} = 'Kernel::System::Auth::LDAP'; $Self->{'AuthModule::LDAP::Host'} = 'Синхронизация агентов - модуль Kernel::System::Auth::Sync::LDAP. Применение данных настроек позволяет сократить число запросов к Active Directory и увеличивает скорость аутентификации агентов. Синхронизация данных выполнятся при первом входе агента в OTRS.contoso.com
'; $Self->{'AuthModule::LDAP::BaseDN'} = 'dc=contoso,dc=com
'; $Self->{'AuthModule::LDAP::UID'} = 'sAMAccountName'; $Self->{'AuthModule::LDAP::GroupDN'} = 'cn=otrs_agents,ou=OTRS,ou=Groups,dc=contoso,dc=com
'; $Self->{'AuthModule::LDAP::AccessAttr'} = 'member'; $Self->{'AuthModule::LDAP::UserAttr'} = 'DN'; $Self->{'AuthModule::LDAP::SearchUserDN'} = 'CN=otrs_user,ou=Other,OU=Services,dc=contoso,dc=com
'; $Self->{'AuthModule::LDAP::SearchUserPw'} = 'otrs_password
'; $Self->{'AuthModule::LDAP::AlwaysFilter'} = ''; $Self->{'AuthModule::LDAP::Params'} = { port => 389, timeout => 120, async => 0, version => 3, };
$Self->{'AuthSyncModule'} = 'Kernel::System::Auth::Sync::LDAP'; $Self->{'AuthSyncModule::LDAP::Host'} = 'contoso.com
'; $Self->{'AuthSyncModule::LDAP::BaseDN'} = 'dc=contoso, dc=com
'; $Self->{'AuthSyncModule::LDAP::UID'} = 'sAMAccountName'; $Self->{'AuthSyncModule::LDAP::SearchUserDN'} = 'cn=otrs_user,ou=Other,ou=Services,dc=contoso,dc=com
'; $Self->{'AuthSyncModule::LDAP::SearchUserPw'} = 'otrs_password
'; $Self->{'AuthSyncModule::LDAP::UserSyncMap'} = { # DB -> LDAP UserFirstname => 'givenName', UserLastname => 'sn', UserEmail => 'mail', UserPhone => 'telephoneNumber', UserTitle => 'title', }; $Self->{'AuthSyncModule::LDAP::AccessAttr'} = 'member'; $Self->{'AuthSyncModule::LDAP::UserSyncInitialGroups'} = [ 'users', ];
- SearchUserDN - Указать DN (Distinguished Name) учетной записи, под которой будет осуществляться обзор каталога LDAP.
- SearchUserPw - Пароль к учетной записи.
- AlwaysFilter - отбор агентов по фильтру, например: (&(objectclass=user)(mail=*)(!(userAccountControl:1.2.840.113556.1.4.803:=2))), имеют заполненный атрибут mail и не включены в отпределенную группу.
- UserSyncInitialGroups - Группа пользователей по-умолчанию
Маппинг групп пользователей (агентов)
Вы можете использовать группы пользователей Active Directory для включения агентов в соответствующие группы OTRS. Модуль - AuthSyncModule::LDAP::UserSyncGroupsDefinition
Пример 1. Пользователям (агентам), входящим в группу otrs_agents Active Directory, назначается группа users в OTRS.
$Self->{'AuthSyncModule::LDAP::UserSyncGroupsDefinition'} = { 'cn=otrs_agents,ou=OTRS,ou=Groups,dc=contoso,dc=com' => { # otrs group 'users' => { # permission rw => 1, move_into => 1, create => 1, note => 1, owner => 1, priority => 1, ro => 1, }, }, };Пример 2. Пользователям, входящим в группу otrs_admins, назначаются сразу две группы OTRS: users и admins (блок указывается внутри блока UserSyncGroupsDefinition)
'cn=otrs_admins,ou=OTRS,ou=Groups,dc=contoso,dc=com' => { # otrs group 'admin' => { # permission rw => 1, ro => 1, }, 'users' => { # permission rw => 1, move_into => 1, create => 1, note => 1, owner => 1, priority => 1, ro => 1, }, },Пример 3. Пользователям, входящим в группу otrs_ro, назначается группа users с правами note и read only (блок указывается внутри блока UserSyncGroupsDefinition)
'cn=otrs_ro,ou=OTRS,ou=Groups,dc=contoso,dc=com' => { 'users' => { # permission rw => 0, move_into => 0, create => 0, note => 1, owner => 0, priority => 0, ro => 1, }, }
Аутентификация и маппинг клиентов (customers)
$Self->{'Customer::AuthModule'} = 'Kernel::System::CustomerAuth::LDAP'; $Self->{'Customer::AuthModule::LDAP::Host'} = 'contoso.com
'; $Self->{'Customer::AuthModule::LDAP::BaseDN'} = 'dc=contoso,dc=com
'; $Self->{'Customer::AuthModule::LDAP::UID'} = 'sAMAccountName'; $Self->{'Customer::AuthModule::LDAP::SearchUserDN'} = 'cn=otrs_user,ou=Other,ou=Services,dc=contoso,dc=com
'; $Self->{'Customer::AuthModule::LDAP::SearchUserPw'} = 'otrs_password
'; $Self->{'CustomerUser'} = { Module => 'Kernel::System::CustomerUser::LDAP', Params => { Host => 'contoso.com
', BaseDN => 'DC=contoso,DC=com
', SSCOPE => 'sub', UserDN =>'cn=otrs_user,ou=Other,ou=Services,dc=contoso,dc=com
', UserPw => 'otrs_password
', AlwaysFilter => '(&(samAccountType=805306368)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))
', SourceCharset => 'utf-8', DestCharset => 'utf-8', }, CustomerKey => 'sAMAccountName', CustomerID => 'mail', CustomerUserListFields => ['sAMAccountName', 'cn', 'mail'], CustomerUserSearchFields => ['sAMAccountName', 'cn', 'mail'], CustomerUserSearchPrefix => '', CustomerUserSearchSuffix => '*', CustomerUserSearchListLimit => 10000, CustomerUserPostMasterSearchFields => ['mail'], CustomerUserNameFields => ['givenname', 'sn'], Map => [ # note: Login, Email and CustomerID needed! [ 'UserFirstname', 'Firstname', 'givenname', 1, 1, 'var' ], [ 'UserLastname', 'Lastname', 'sn', 1, 1, 'var' ], [ 'UserLogin', 'Login', 'sAMAccountName', 1, 1, 'var' ], [ 'UserEmail', 'Email', 'mail', 1, 1, 'var' ], [ 'UserCustomerID', 'CustomerID', 'mail', 0, 1, 'var' ], [ 'UserPhone', 'Phone', 'telephoneNumber', 1, 0, 'var' ], ], };
Распространенные ошибки
Некорректно указана учетная запись псевдопользователя для обзора дерева AD (SearchUserDN/SearchUserPw):
[Error][Kernel::System::Auth::LDAP::Auth][Line:192]:: First bind failed! 80090308: LdapErr: DSID-0C09042F, comment: AcceptSecurityContext error, data 52e, v2580
другие статьи