Linux

OTRS 6 - AD 集成 - 域管理員使用者映射為代理,而不是 OTRS 管理員

  • January 4, 2021

我正在使用 ITSM 模組測試 OTRS 6。現在我只是在我們的 DEV 環境中測試它,所以如果它是最簡單的方法,那麼放棄一切並從頭開始不會有問題。我打算盡快將其投入生產,儘管如此。

我使用官方文件“按書”安裝它,它就像一個魅力!(編輯:安裝在 Ubuntu Server 18.04 LTS 上)我讓所有使用者使用 MySQL 上的使用者數據庫在本地進行身份驗證。我讓客戶、代理和管理員都能夠進行身份驗證並獲得正確的使用者面板。

在那之後,我已經能夠成功地將 OTRS 與我的 AD 集成,但有一個問題:我所有的 AD 使用者都被映射為客戶,我的所有域管理員(也屬於 OTRS_Admins AD 組)都是代理,並且…… . 我沒有帳戶來管理 OTRS。根本沒有管理員。

我該怎麼辦?如何將我的域管理員映射為 OTRS 管理員而不是代理?如何將我的一些域使用者映射為代理?難道我做錯了什麼?我完全迷路了。

官方文件並沒有太大幫助,而且我在 Google 上找不到任何有我特殊需要的人。

我的(編輯的)Config.pm:

    $Self->{'AuthModule'} = 'Kernel::System::Auth::LDAP';


       ### OTRS Admin Auth
       ### 
       $Self->{'AuthModule::LDAP::Host'} = '192.168.179.2';     # AD Server
       $Self->{'AuthModule::LDAP::BaseDN'} = 'dc=test,DC=local'; # Domain
       $Self->{'AuthModule::LDAP::UID'} = 'sAMAccountName';
       $Self->{'AuthModule::LDAP::GroupDN'} = 'CN=OTRS_Admins,CN=Users,DC=test,DC=local';   #OTRS Admin group
       $Self->{'AuthModule::LDAP::AccessAttr'} = 'member';
       $Self->{'AuthModule::LDAP::UserAttr'} = 'DN';
       $Self->{'AuthModule::LDAP::SearchUserDN'} = 'svc_otrs'; #OTRS service user
       $Self->{'AuthModule::LDAP::SearchUserPw'} = 'Passw0rd'; #And its passwird
       $Self->{'AuthModule::LDAP::AlwaysFilter'} = '';
       $Self->{'AuthModule::LDAP::Params'} = {
                         port => 389,
                         timeout => 120,
                         async => 0,
                         version => 3,
                         sscope => 'sub'
                       };

       ### User Sync
       ### AD <==> DB OTRS (MySQL)
       $Self->{'AuthSyncModule'} = 'Kernel::System::Auth::Sync::LDAP';
       $Self->{'AuthSyncModule::LDAP::Host'} = '192.168.179.2';      # AD SRV
       $Self->{'AuthSyncModule::LDAP::BaseDN'} = 'dc=test,DC=local'; # Domain
       $Self->{'AuthSyncModule::LDAP::UID'} = 'sAMAccountName';
       $Self->{'AuthSyncModule::LDAP::SearchUserDN'} = 'svc_otrs';         
       $Self->{'AuthSyncModule::LDAP::SearchUserPw'} = 'Passw0rd';    
       $Self->{'AuthSyncModule::LDAP::UserSyncMap'} = {
       # DB -> LDAP
       UserFirstname => 'givenName',
       UserLastname => 'sn',
       UserEmail => 'mail',
       };

       $Self->{'AuthSyncModule::LDAP::UserSyncInitialGroups'} = [
       'users', 'basic_admin',
       ];
 $Self->{'Customer::AuthModule'} = 'Kernel::System::CustomerAuth::LDAP';
   $Self->{'Customer::AuthModule::LDAP::Host'} = '192.168.179.2';
   $Self->{'Customer::AuthModule::LDAP::BaseDN'} = 'dc=test,DC=local';    
   $Self->{'Customer::AuthModule::LDAP::UID'} = 'sAMAccountName';
   $Self->{'Customer::AuthModule::LDAP::SearchUserDN'} = 'svc_otrs';     
   $Self->{'Customer::AuthModule::LDAP::SearchUserPw'} = 'Passw0rd';     
   $Self->{CustomerUser} = {
   Module => 'Kernel::System::CustomerUser::LDAP',
   Params => {
   Host => '192.168.179.2',     # AD Server
   BaseDN => 'dc=test,DC=local',      #Domain
   SSCOPE => 'sub',
   UserDN =>'svc_otrs',     #OTRS Service User
   UserPw => 'Passw0rd',    #its 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!
   #[ 'UserSalutation', 'Title', 'title', 1, 0, 'var' ],
   [ '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' ],
   #[ 'UserAddress', 'Address', 'postaladdress', 1, 0, 'var' ],
   #[ 'UserComment', 'Comment', 'description', 1, 0, 'var' ],
   ],
   };

事實上,這是一個三部分的問題:

  1. 當我使用 LDAP 後端時,我從 DB 後端失去了我的使用者(包括 root@localhost 超級使用者)
  2. 來自 LDAP 後端的代理使用者沒有管理員權限
  3. OTRS 文件在這里和那裡有點過時

問題 1:失去了我的 DB 後端Config.pm中,我插入了以下行來選擇代理後端:

$Self->{'AuthModule'} = 'Kernel::System::Auth::LDAP';

好吧,這條線的作用是覆蓋系統中其他地方的原始後端選擇器。因此,為了擁有 DB Backend Admin 使用者和 LDAP 代理使用者,您應該使用 OTRS 自己(並記錄在案!)的方式來擁有多個後端,即將數字後綴附加到模組實例(請注意 de 1緊隨其後AuthModule):

$Self->{'AuthModule1'} = 'Kernel::System::Auth::LDAP';

當然,您必須將數字放入所有模組的屬性中:

$Self->{'AuthModule::LDAP::Host1'} = '192.168.xx.xx';    
$Self->{'AuthModule::LDAP::BaseDN1'} = 'dc=test,DC=local'; 
$Self->{'AuthModule::LDAP::UID1'} = 'sAMAccountName';
$Self->{'AuthModule::LDAP::GroupDN1'} = CN=GS_OTRS_Agents,CN=Users,DC=test,DC=local';
$Self->{'AuthModule::LDAP::AccessAttr1'} = 'member';
$Self->{'AuthModule::LDAP::UserAttr1'} = 'DN';
$Self->{'AuthModule::LDAP::SearchUserDN1'} = 'OTRS';    #OTRS LDAP User
$Self->{'AuthModule::LDAP::SearchUserPw1'} = 'somepass'; #Password for the LDAP User
$Self->{'AuthModule::LDAP::AlwaysFilter1'} = '';
$Self->{'AuthModule::LDAP::Params1'} = {
                 port => 389,
                 timeout => 120,
                 async => 0,
                 version => 3,
                 sscope => 'sub'
               };    

(將其與上面發布的程式碼進行比較,關於原始問題。)

公平地說,OTRS 管理手冊中有一節解釋瞭如何更改後端,以及如何擁有多個後端。但是,如果您使用$Self->{'AuthModule'}而不是$Self->{'AuthModule1'}將覆蓋本機數據庫後端,而不是並排執行,則缺少資訊。花了很多死腦筋來解決這個問題。

這解決了我的管理員使用者失去的問題,這些使用者都在原始數據庫後端。所有 LDAP 代理都不是完全管理員,因此他們可以回答工單,但不能以管理員身份管理 OTRS 系統。有了這個,我有兩種使用者。

這就引出了第二個問題。

問題 2:來自 LDAP 後端的代理使用者沒有管理員權限

我的意思是,我必須能夠在我的 AD 上創建代理使用者,並且他/她也應該能夠成為管理員。他們是!

`$Self->{'AuthSyncModule::LDAP::UserSyncInitialGroups'} = [
'users',
];`

如果不只是“使用者”,我還在該列表中添加了“basic_admin”,那麼我所有的初始代理也將是管理員。稍後我可以撤銷他們的管理員權限,但是由於問題 1,我被鎖定在 OTRS 之外,沒有管理員使用者,我無法授予或撤銷任何人的任何管理員權限。

畢竟,我選擇保留它,並將我的代理創建為使用者,因為我已經將我的原始 root@localhost 使用者作為管理員(因為我已經解決了問題 1),並且將為所有人手動授予管理員權限我未來的管理員。但這是 OTRS 管理手冊中另一個沒有很好記錄的細節。

問題 3:OTRS 管理手冊未完全更新

我知道,對於所有開源項目,這種情況會不時發生。但是,由於誤導性資訊,這裡到處都有一些陷阱,這些陷阱是從未更新的以前版本的 OTRS 繼承而來的。例如,手冊中提到了一些屬性,但對版本 6 無效。

我偶然發現了一個適用於版本 5 並且沒有從版本 6 中清除的版本。我的意思是,指向屬性的 QuickRef 頁面的連結已被刪除,因為該頁面 - 以及該屬性 - 不再存在,但它仍然在其他地方提到在手冊中,關於重要的配置部分。

引用自:https://serverfault.com/questions/964489