CMDBuild4 LDAP連携

CMDBuildは、クラウド環境に最適なオープンソース構成管理システムです。
仮想化環境での論理構成と物理構成の複雑化、変更の高頻度・高速化による構成情報の爆発に対して、強力な自動化機能、外部システム連携機能を備え、運用管理自動化基盤を実現します。

詳細は以下をご参照ください。

https://www.cmdbuild.org/en

https://www.ossl.co.jp

CMDBuildでは、デフォルトのDBに保存された資格情報を使用した認証と、LDAPシステムを使用した認証方法を使用することができます。
本書では、WindowsServerとのAD連携方法について記載します。

# １．前提条件

CMDBuild4.0以上がインストール済みであること
CMDBuildの概要及びインストール方法については以下を参照ください

https://qiita.com/Yoshitami/items/1bf53bd406db425e9897

# ２．CMDBuildサーバ/ADサーバインストール環境

* CMDBuildサーバ
    * Red Hat Enterprise Linux release 8.10 (Ootpa)
    * CMDBuild 4.0.0
    * PostgreSQL 17-17.4
    * OpenJDK 17.0.2
    * ApacheTomcat 10.1.40
    * スタンドアロン構成
    * SELinuxはDisabled、Firewalldは停止されていること
    * 作業はすべてrootで実施

※ldapsearchコマンドがインストールされていること（ADユーザ確認のため使用）
　ldapsearchコマンドがインストールされていない場合は以下のコマンドでインストールします。

```shell-session
# yum install openldap-clients
```

* ADサーバ
    * WindowsServer 2019 Standard Evaluation
    * ADサーバのIPアドレス：192.168.9.158
    * ADで使用するポート：389
    * OU=cmdbuild
    * ドメイン=test.local

※ADサーバの基本設定、OU、ドメインは作成されているものとします。

# ３．ADユーザの作成手順

**（１）AD検索用ユーザの作成**

CMDBuildがADユーザを検索するために検索用のユーザを作成します。
本書での検索用のユーザは「cmdbuild@test.local」とします。

ADサーバにAdministrator権限アカウントでログインし、
スタートボタン ＞ Windows管理ツール ＞ Active Directoryユーザとコンピュータの順で移動し、
CMDBuildとAD連携させるユーザを作成します。
※ドメイン=test.local、OU=cmdbuild上でユーザを新規作成します。

![SnapCrab_Active Directory ユーザーとコンピューター_2025-5-13_15-59-47_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/66557/ebb16b6f-6eea-4ac1-8179-63dfa057a0be.png)

![SnapCrab_新しいオブジェクト - ユーザー_2025-5-13_16-17-36_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/66557/21b6262f-57a6-40d0-85e8-37fbdb88aa4e.png)

本書では以下の内容で作成します。
姓：cmdbuild
ユーザログオン名：cmdbuild@test.local

![SnapCrab_新しいオブジェクト - ユーザー_2025-5-13_16-18-39_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/66557/bcad9a41-1615-487b-9d56-466ec52336c7.png)

※ユーザは次回ログオン時にパスワード変更が必要のチェックを外して作成します。

**（２）ADユーザの作成**

CMDBuildがログインできるADユーザを作成します。
本書でのADユーザは「yamashita」とします。

ADサーバにAdministrator権限アカウントでログインし、
スタートボタン ＞ Windows管理ツール ＞ Active Directoryユーザとコンピュータの順で移動し、
CMDBuildとAD連携させるユーザを作成します。
※ドメイン=test.local、OU=cmdbuild上でユーザを新規作成します。

![SnapCrab_Active Directory ユーザーとコンピューター_2025-5-13_16-21-47_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/66557/392f0ae4-ecae-4be0-b13c-f1258169ae55.png)

![SnapCrab_新しいオブジェクト - ユーザー_2025-5-13_16-23-11_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/66557/0bc97cbb-b1a6-47d0-9aef-7e33b17c575e.png)

本書では以下の内容で作成します。
姓：yamashita
ユーザログオン名：yamashita@test.local

![SnapCrab_新しいオブジェクト - ユーザー_2025-5-13_16-18-39_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/66557/f097fcb2-17bb-41e9-abad-0f4fa8793dec.png)

※ユーザは次回ログオン時にパスワード変更が必要のチェックを外して作成します。

**（３）ADユーザの確認**
CMDBuildサーバより、作成したADユーザが検索できることを確認します。

```shell-session
# ldapsearch -x -D "cmdbuild@test.local" -w P@ssword -h 192.168.9.158 \
  -b "ou=cmdbuild,dc=test,dc=local" "(objectclass=*)" "cn=yamashita"
```
```shell-session
# extended LDIF
#
# LDAPv3
# base <ou=cmdbuild,dc=test,dc=local> with scope subtree
# filter: (objectclass=*)
# requesting: cn=yamashita 
#

# cmdbuild, test.local
dn: OU=cmdbuild,DC=test,DC=local

# cmdbuild, cmdbuild, test.local
dn: CN=cmdbuild,OU=cmdbuild,DC=test,DC=local

# yamashita, cmdbuild, test.local
dn: CN=yamashita,OU=cmdbuild,DC=test,DC=local

# search result
search: 2
result: 0 Success

# numResponses: 4
# numEntries: 3
```

# ４．CMDBuild LDAP連携設定

CMDBuildサーバより、CMDBuildがあらかじめ用意している「cmdbuild.sh」スクリプトを使用してLDAP連携の設定を行います。

```shell-session
# cd /opt/tomcat/cmdbuild/webapps/cmdbuild

# ./cmdbuild.sh restws setconfig  org.cmdbuild.auth.ldap.enabled true
## LDAP認証を有効化

# ./cmdbuild.sh restws setconfig org.cmdbuild.auth.ldap.server.address 192.168.9.158
## ADサーバのIPアドレスを指定

# ./cmdbuild.sh restws setconfig org.cmdbuild.auth.ldap.server.port 389
## ポートを指定（デフォルトの389を使用する際はこの設定は不要）

# ./cmdbuild.sh restws setconfig org.cmdbuild.auth.ldap.bind.attribute samaccountname
## ユーザログオン名としてアクセスできるように設定﻿

# ./cmdbuild.sh restws setconfig org.cmdbuild.auth.ldap.basedn ou=cmdbuild,dc=test,dc=local
## OU等のドメインを指定

# ./cmdbuild.sh restws setconfig org.cmdbuild.auth.ldap.search.auth.principal cmdbuild@test.local
## AD検索用アカウントを設定

# ./cmdbuild.sh restws setconfig org.cmdbuild.auth.ldap.search.auth.password P@ssword
## AD検索用アカウントパスワードを設定

# ./cmdbuild.sh restws setconfig org.cmdbuild.auth.ldap.search.filter \(objectClass=*\)
## フィルタを指定
```

スクリプトを使用して設定を反映させます。

```shell-session
# cd /opt/tomcat/cmdbuild/webapps/cmdbuild
# ./cmdbuild.sh restws reload
OK
```

スクリプトを使用してLDAPの設定が反映されたことを確認します。

```shell-session
# cd /opt/tomcat/cmdbuild/webapps/cmdbuild
# ./cmdbuild.sh restws configs
org.cmdbuild.database.ext                                               plpgsql
org.cmdbuild.database.db.admin.password                                 postgres
org.cmdbuild.database.db.password                                       password
org.cmdbuild.database.db.username                                       cmdbuild
org.cmdbuild.database.db.admin.username                                 postgres
org.cmdbuild.database.db.url                                            jdbc:postgresql://localhost:5432/cmdbuild
org.cmdbuild.workflow.enabled                                           true
org.cmdbuild.core.logger.config                                         paxg246o2vh0gggg5989sudlqmttq4ohgfevu8qat555k2anmuebd5j73s40p4ec329gqr4p7du8kh6nr8h6... (2312 chars)
org.cmdbuild.core.config.ready                                          true
org.cmdbuild.sql.ddl_log.enabled                                        true
org.cmdbuild.auth.ldap.bind.attribute                                   samaccountname
org.cmdbuild.auth.ldap.basedn                                           ou=cmdbuild,dc=test,dc=local
org.cmdbuild.auth.ldap.server.address                                   192.168.9.158
org.cmdbuild.auth.ldap.search.auth.password                             P@ssword
org.cmdbuild.auth.preferredPasswordAlgorythm                            cm3easy
org.cmdbuild.auth.ldap.enabled                                          true
org.cmdbuild.auth.ldap.search.filter                                    (objectClass=*)
org.cmdbuild.auth.ldap.search.auth.principal                            cmdbuild@test.local
org.cmdbuild.plugin.info                                                pax0hb2lr290g0gg0gi5dxap
```

CMDBuildのWebUIにadminでログインし、
http://＜IPアドレス＞:8080/cmdbuild
ユーザ：admin
パスワード：admin

管理モジュールに移動します。
管理モジュールに移動後、メニューよりユーザを選択し、「ユーザ追加」を選択します。

![SnapCrab_CMDBuild — Mozilla Firefox_2025-5-15_11-28-50_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/66557/8870db46-73f7-49fe-8fe4-5fa7b883795f.png)

ユーザ名、グループを設定し保存を選択します。
※LDAP認証を行うため、ここではパスワードを設定しません。

![SnapCrab_CMDBuild — Mozilla Firefox_2025-5-15_11-29-20_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/66557/03fa0928-3c34-4826-b30c-caa037182cdc.png)

保存を選択後、以下のようにポップが表示されますが、はいを選択しユーザの作成を行います。

![SnapCrab_CMDBuild — Mozilla Firefox_2025-5-15_11-29-25_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/66557/7e3b5487-775b-44d3-baa4-54cb9753802f.png)


# ５．CMDBuild LDAP連携確認

CMDBuildのWebUIにadminでログインし、ADユーザアカウント名でログインできることを確認します。

http://＜IPアドレス＞:8080/cmdbuild
ユーザ：＜ADユーザアカウント名＞
パスワード：＜ADユーザアカウントパスワード＞

![cmdb.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/66557/bca9ec0b-af69-46d4-80ff-a51743959e2a.png)



また、Windows Serverのセキュリティログを確認すると認証に成功していることを確認できます。

![無題.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/66557/003550a8-1cb2-45f7-b553-c9d58bfbaac2.png)

# ６．備考

ユーザ作成でパスワードを設定した場合は、以下のように認証を行われます。
LDAP認証→DB認証
ADユーザアカウントパスワードで失敗した場合、DBパスワードで認証できるかを試します。

LDAP認証に失敗し、DBパスワードでログイン出来た場合は「cmdbuild.log」に以下のようにLDAP認証でのエラーが発生しますがDB認証のパスワードでログインできるため、CMDBuildにアクセスすることができます。

```shell-session
2025-06-09T17:13:51.139+09:00 [req:6b73a1] WARN  o.c.a.l.ldap.LdapAuthenticatorImpl - ldap authentication error for login = Login{value=<yamashita>, type=auto}
javax.naming.AuthenticationException: [LDAP: error code 49 - 80090308: LdapErr: DSID-0C090434, comment: AcceptSecurityContext error, data 52e, v4563]
＜中略＞
2025-06-09T17:13:51.160+09:00 [req:6b73a1] WARN  o.c.a.s.inner.SessionDataServiceImpl - no session available, using dummy session data
2025-06-09T17:13:51.171+09:00 [system] INFO  o.c.w.websocket.WebsocketEndpoint - ready
```