iT邦幫忙

2024 iThome 鐵人賽

DAY 17
0
IT 管理

iTop:開源 ITSM 與 CMDB 解決方案 系列 第 17

iTop 用戶管理 LDAP User Authentication

  • 分享至 

  • xImage
  •  

輕量目錄存取協定 LDAP 能夠讓您同步 Active Directory 已存在的用戶帳號與訊息,而不是在 iTop 重複地建立這些的帳號,讓組織能夠統一管理身分驗證與授權。

以下是整合 LDAP 主要的好處:

  • 降低管理成本:集中式的帳號和權限管理減少了重複工作和人力成本
  • 增強安全性:避免各系統之間密碼政策可能不一致的問題
  • 減少密碼疲勞:只需記住一組帳號密碼即可

Data Collector for LDAP
此外掛程式負責從 LDAP 伺服器自動建立和更新 iTop 中的人員和使用者,並根據 LDAP 群組自動將設定檔指派給使用者。

此外掛程式無法由 iTop Hub 自動安裝,您必須將其手動部署在運行 PHP 的伺服器上。
https://store.itophub.io/en_US/products/ldap-data-collector

點選 iTop Store 找到 Data Collector for LDAP 外掛,選擇最新的 1.3.0 Version,點選 Free。

iTop Hub 會自動轉跳到以下畫面,點選 Download。

下載完後解壓縮到適當位置

sudo unzip ldap-data-collector-1_3_0.zip -d /var/www/html/itop/extensions
sudo chown -R www-data:www-data /var/www/html/itop/extensions/ldap-data-collector

請不要修改 Data Collector 預設的配置檔 params.distrib.xml

如果需要調整配置,請建立名為 params.local.xml 的文件,並將所需的定義複製,使兩個 XML 檔案的結構相同。

不要將 params.local.xml 存放在您的網頁伺服器目錄中,否則您的設定檔中的連線帳密可能外洩。

由於可能會有多個組織,建議透過名稱的方式將配置檔分開來存放。

sudo cp /var/www/html/itop/extensions/ldap-data-collector/conf/params.distrib.xml /etc/itop/params.ldap.your_company.xml
sudo chown www-data:www-data /etc/itop/params.ldap.your_company.xml

編輯新增的組態文件

sudo nano /etc/itop/params.ldap.your_company.xml

應包含用於連接到 iTop 伺服器和 LDAP 的參數

<?xml version="1.0" encoding="UTF-8"?>
<!-- Default values for parameters. Do NOT alter this file, use params.local.xml instead -->
<parameters>
  <itop_url>http://your_itop_ip/iTop</itop_url>
  <itop_login>datacollector</itop_login>
  <itop_password>your_datacollector_password</itop_password>
  <itop_token/>
  <itop_login_mode/>

  <ldapuri>ldap://your_ldap_ip:389</ldapuri>
  <ldapdn>DC=your_company,DC=com,DC=tw</ldapdn>
  <ldaplogin>CN=datacollector,OU=ServiceAccounts,DC=your_company,DC=com,DC=tw</ldaplogin>
  <ldappassword>your_datacollector_password</ldappassword>
  <page_size>1000</page_size>

  <!-- Parameters for Person synchronization -->
  <ldappersonfilter>(objectClass=person)</ldappersonfilter>
  <person_fields>
    <!--  Mapping between LDAP fields and iTop Person's object fields -->
    <primary_key>samaccountname</primary_key>
    <name>sn</name>
    <first_name>givenname</first_name>
    <email>mail</email>
    <phone>telephonenumber</phone>
    <mobile_phone>mobile</mobile_phone>
    <function>title</function>
    <employee_number>employeenumber</employee_number>
  </person_fields>
  <person_defaults>
    <!--  Default values for iTop Person's object fields -->
    <org_id>My Demo</org_id>
    <status>active</status>
  </person_defaults>
  <!-- Parameters for User synchronization -->
  <collect_person_only>no</collect_person_only>
  <ldapuserfilter>(&amp;(objectClass=person)(mail=*))</ldapuserfilter>
  <synchronize_profiles>no</synchronize_profiles>
  <itop_group_pattern>/^CN=itop-(.*),OU=.*/</itop_group_pattern>
  <user_fields>
    <!--  Mapping between LDAP fields and iTop UserLDAP's object fields -->
    <primary_key>samaccountname</primary_key>
    <login>samaccountname</login>
    <contactid>mail</contactid>
  </user_fields>
  <user_defaults>
    <!--  Default values for iTop UserLDAP's object fields -->
    <profile>Portal user</profile>
    <language>EN US</language>
  </user_defaults>

  <!-- console_log_level: level of logging to console (std output)
  -1 : none, nothing will be logged to the console
   0 : System wide emergency errors only (LOG_EMERG)
   1 : Alert errors (LOG_ALERT)
   2 : Critical errors (LOG_CRIT)
   3 : Application level errors (LOG_ERR)
   4 : Warnings
   5 : Notice
   6 : Information
   7 : Debug traces
   -->
  <console_log_level>6</console_log_level>

  <!-- eventissue_log_level: level of creating event issue object on remote itop
  -1 : none, nothing will be logged to the console
   0 : System wide emergency errors only (LOG_EMERG)
   1 : Alert errors (LOG_ALERT)
   2 : Critical errors (LOG_CRIT)
   3 : Application level errors (LOG_ERR)
   4 : Warnings
   5 : Notice
   6 : Information
   7 : Debug traces
   -->
  <eventissue_log_level>-1</eventissue_log_level>

  <!--
    dateformat: logging date format
    Example: [Y-m-d H:i:s] => will produce a log like "[2020-04-29 14:36:16]    [Info]  ......"
  -->
  <console_log_dateformat>[Y-m-d H:i:s]</console_log_dateformat>

  <!-- syslog_log_level: level of logging to Syslog
  -1 : none, nothing will be logged to syslog
   0 : System wide emergency errors (LOG_EMERG)
   1 : Alert errors (LOG_ALERT)
   2 : Critical errors (LOG_CRIT)
   3 : Application level errors (LOG_ERR)
   4 : Warnings
   5 : Notice
   6 : Information
   7 : Debug traces
   -->
  <syslog_log_level>-1</syslog_log_level>

  <!-- data_path: location where to store the temporary data (.raw and .csv files).
  Make sure that you change this value if you run several instances of the collector
  from the same location (with different configuration files).
  You can use the placeholder %APPROOT% to build a path relative to the location of the collector itself
   -->
  <data_path>%APPROOT%/data/your_company</data_path>

  <!-- Maximum number of elements to process in one iteration (for upload and synchro in iTop) -->
  <max_chunk_size>1000</max_chunk_size>
  <!-- Timeout for waiting for the execution of one data synchro task (in seconds) -->
  <itop_synchro_timeout>600</itop_synchro_timeout>
  <!-- Whether or not to stop when an error occurs during a synchronization -->
  <stop_on_synchro_error>no</stop_on_synchro_error>
  <!-- When using cUrl to connect to the iTop Webservices the cUrl options can be specified below
  The syntax is:
  <NAME_OF_THE_OPTION1>VALUE_OF_THE_OPTION1</NAME_OF_THE_OPTION1>
  <NAME_OF_THE_OPTION2>VALUE_OF_THE_OPTION2</NAME_OF_THE_OPTION2>
  etc...

  Where NAME_OF_THE_OPTIONx and VALUE_OF_THE_OPTIONx are either:
  - The numeric value of the option
  - or the string representation of the corresponding PHP "define" (case sensitive)

  The four examples below are equivalent:
   <CURLOPT_SSLVERSION>CURL_SSLVERSION_TLSv1_2</CURLOPT_SSLVERSION>
  or
   <CURLOPT_SSLVERSION>6</CURLOPT_SSLVERSION>
  or
   <32>CURL_SSLVERSION_TLSv1_2</32>
  or
   <32>6</32>

  Since in PHP we have:
  define ('CURLOPT_SSLVERSION', 32);
  define ('CURL_SSLVERSION_TLSv1_2', 6);

  Note: because the recommandation about which is the best SSL/TLS version
        to use varies over time (as security bugs are found in the procotols)
        it is BETTER NOT TO force any SSL/TLS version at all and let the
        system decide which version to use.

        However if the web server running iTop requires a specific TLS/SSL
        version you can use the configuration to force it anyway...
        but be prepared to revisit this setting regularly.
  -->
  <curl_options>
    <CURLOPT_SSL_VERIFYHOST>0</CURLOPT_SSL_VERIFYHOST>
    <CURLOPT_SSL_VERIFYPEER>1</CURLOPT_SSL_VERIFYPEER>
  </curl_options>
</parameters>

LDAP 的參數說明如下

  • ldapuri:連接到 LDAP 伺服器的 URI,例如 ldap://:。
  • ldapdn:LDAP 的 Company DN,例如我們僅同步 IT 部門的使用者。
  • ldaplogin:我們在 ServiceAccounts OU 底下建立 datacollector 使用者,專門用來連接 LDAP 伺服器。
  • ldappassword:datacollector 連接到 LDAP 伺服器的密碼
  • page_size:若要啟動分頁搜索,請將此數字設為大於零的值。
  <ldapuri>ldap://your_ldap_ip:389</ldapuri>
  <ldapdn>OU=IT,DC=your_company,DC=com,DC=tw</ldapdn>
  <ldaplogin>CN=datacollector,OU=ServiceAccounts,DC=your_company,DC=com,DC=tw</ldaplogin>
  <ldappassword>your_datacollector_password</ldappassword>
  <page_size>1000</page_size>

可以透過在 XML 參數檔案中新增額外的定義來設定 Data Collector,下列範例配置了 Person 與 User 的收集。

  <!-- Parameters for Person synchronization -->
  <ldappersonfilter>(objectClass=person)</ldappersonfilter>
  <person_fields>
    <!--  Mapping between LDAP fields and iTop Person's object fields -->
    <primary_key>samaccountname</primary_key>
    <name>sn</name>
    <first_name>givenname</first_name>
    <email>mail</email>
    <phone>telephonenumber</phone>
    <mobile_phone>mobile</mobile_phone>
    <function>title</function>
    <employee_number>employeenumber</employee_number>
  </person_fields>
  <person_defaults>
    <!--  Default values for iTop Person's object fields -->
    <org_id>My Demo</org_id>
    <status>active</status>
  </person_defaults>
  <!-- Parameters for User synchronization -->
  <collect_person_only>no</collect_person_only>
  <ldapuserfilter>(&amp;(objectClass=person)(mail=*))</ldapuserfilter>
  <synchronize_profiles>no</synchronize_profiles>
  <itop_group_pattern>/^CN=itop-(.*),OU=.*/</itop_group_pattern>
  <user_fields>
    <!--  Mapping between LDAP fields and iTop UserLDAP's object fields -->
    <primary_key>samaccountname</primary_key>
    <login>samaccountname</login>
    <contactid>mail</contactid>
  </user_fields>
  <user_defaults>
    <!--  Default values for iTop UserLDAP's object fields -->
    <profile>Portal user</profile>
    <language>EN US</language>
  </user_defaults>

如何找到對應的 LDAP 欄位,可以參考屬性編輯器內的屬性。

將同步資料透過組織名稱的方式分開來存放,並授予適當權限。

sudo mkdir /var/www/html/itop/extensions/ldap-data-collector/data/your_organization
sudo chown -R www-data:www-data /var/www/html/itop/extensions/ldap-data-collector/data/your_company

我們先手動執行同步作業

sudo -u www-data /usr/bin/php \
/var/www/html/itop/extensions/ldap-data-collector/exec.php \
--config_file=/etc/itop/params.ldap.your_company.xml

點選 Configuration Management 選單的 Search for Contacts,就可以看到 Data Collector 自動幫我們建立 Person 物件,包含 Active Directory 的使用者資訊。

點選 Administration 選單的 User Accounts,您會發現 Data Collector 已經幫我們建立好 LDAP 類型的使用者帳戶。這些帳戶會自動與 Person 關聯,並將 Portal User 設定檔指派給使用者。

在處理完使用者帳戶與權限之後,我們還要告訴 iTop 如何連接到您的 LDAP 伺服器進行身份驗證。

User Authentication Options
iTop 可以使用多種身份驗證機制無縫整合到您的環境,例如使用 Local 密碼來進行自動化流程和腳本等功能性的登入,使用者則是透過 LDAP 來進行驗證會比較方便。

目前 iTop 支援兩種類型的內部身份驗證:

  • Local:基於存儲在 iTop 資料庫中的加密密碼
  • LDAP:通過與遠端的 LDAP 或 Active Directory 伺服器互動

記得到 Configuration 的 General Configuration,填寫 LDAP 的參數如下。

  • host:您的 LDAP 伺服器的 IP 位址或主機名稱
  • port:用於連接 LDAP 的 Port,預設為 389。
  • default_user & default_pwd:用來識別一個具有足夠權限的 LDAP 帳戶,以便搜尋指定的使用者。若您的 LDAP 伺服器允許匿名,則可以將這兩個欄位留空。
  • base_dn:定義用於搜尋使用者的基礎。
  • user_query:定義用於搜尋使用者的 LDAP 查詢

/**
 *
 * Modules specific settings
 *
 */
$MyModuleSettings = array(
  ...
  'authent-ldap' => array (
    'host' => 'your_ldap_ip',
    'port' => 389,
    'default_user' => 'CN=datacollector,OU=ServiceAccounts,DC=your_company,DC=com,DC=tw',
    'default_pwd' => 'your_datacollector_password',
    'base_dn' => 'DC=your_company,DC=com,DC=tw',
    'user_query' => '(&(samaccountname=%1$s))',
    'options' => array (
      17 => 3,
      8 => 0,
    ),
    'start_tls' => false,
    'debug' => false,
    'servers' => array (
    ),
  ),
);

我們就可以透過 Active Directory 的帳號登入 iTop 了

若您的企業底下擁有多間公司的時候,單純使用 Active Directory 的 samaccountname 屬性當作登入的帳戶,可能會遇到同名同姓名的問題。

我們可以把登入的帳戶改為填寫 mail 來避免,將 user_fields 的 login 欄位改成 mail。

  <!-- Parameters for User synchronization -->
  <collect_person_only>no</collect_person_only>
  <ldapuserfilter>(&amp;(objectClass=person)(mail=*))</ldapuserfilter>
  <synchronize_profiles>no</synchronize_profiles>
  <itop_group_pattern>/^CN=itop-(.*),OU=.*/</itop_group_pattern>
  <user_fields>
    <!--  Mapping between LDAP fields and iTop UserLDAP's object fields -->
    <primary_key>samaccountname</primary_key>
    <login>mail</login>
    <contactid>mail</contactid>
  </user_fields>

需要手動執行同步作業來更新物件

sudo -u www-data /usr/bin/php \
/var/www/html/itop/extensions/ldap-data-collector/exec.php \
--config_file=/etc/itop/params.ldap.your_company.xml

點選 Administration 選單的 User Accounts,您會發現 Login 的欄位已經變成 mail 了。

記得到 General Configuration 將 user_query 改成使用 mail 查詢

/**
 *
 * Modules specific settings
 *
 */
$MyModuleSettings = array(
  ...
  'authent-ldap' => array (
    'host' => 'your_ldap_ip',
    'port' => 389,
    'default_user' => 'CN=datacollector,OU=ServiceAccounts,DC=your_company,DC=com,DC=tw',
    'default_pwd' => 'your_datacollector_password',
    'base_dn' => 'DC=your_company,DC=com,DC=tw',
    'user_query' => '(&(mail=%1$s))',
    'options' => array (
      17 => 3,
      8 => 0,
    ),
    'start_tls' => false,
    'debug' => false,
    'servers' => array (
    ),
  ),
);

如此一來我們就可以透過 mail 的方式來登入 iTop 囉。

記得將同步的指令放入工作排程

sudo crontab -u www-data -e

依照自己的環境調整頻率,例如每天上午十點執行。

00 10 * * * /usr/bin/php /var/www/html/itop/extensions/ldap-data-collector/exec.php --config_file=/etc/itop/params.ldap.your_company.xml > /tmp/dc-ldap-your_company.log 2>&1

今天的分享就到這邊,感謝收看。

參考文件

  1. https://www.itophub.io/wiki/page?hide%5Bsidebar%5D=1&referer%5Bid%5D=store&referer%5Bpath%5D=%2Fen_US%2Fproducts%2Fldap-data-collector&id=extensions%3Aldap-data-collector
  2. https://www.itophub.io/wiki/page?id=extensions%3Aauthent-ldap
  3. https://www.itophub.io/wiki/page?id=latest%3Aadmin%3Auser_authentication_options

上一篇
iTop 組態管理 Azure Cloud - Microsoft Azure
下一篇
iTop 組態管理 Datacenter View - Infrastructure
系列文
iTop:開源 ITSM 與 CMDB 解決方案 32
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言