Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

OpenLDAP 向け PassSync Agent

UCIDM は社内で管理している OpenLDAP サーバーからパスワード変更を検知して UCIDM API に連携します。

前提条件

OSSTech 社 OpenLDAP の次のパッケージがインストールされ、正しく設定されていることを前提として説明します。

  • osstech-openldap
  • osstech-openldap-servers

システム概要

OpenLDAP の Overlays という仕組みを使ってパスワード変更をフックします。ucidmpsync というカスタム Overlay モジュールを slapd に設定します。次に OpenLDAP 向け PassSync Agent の概要を示します。

flowchart TB

subgraph slapd[OpenLDAP slapd]
  subgraph ucidmpsync
    passwd[ユーザー名<br />パスワード]
  end
end

subgraph sender[Sender]
  stdin
  pusher[ZeroMQ<br />Push]
end

subgraph zmq [ZeroMQ]
  queue[Queue]
end

subgraph passsync [PassSync Agent]
  puller[ZeroMQ<br />Pull]
  ucidm-client[UCIDM<br />クライアント]
  recovery-handler[リカバリ<br />ハンドラー]
  recovery-dir[リカバリ<br />ディレクトリ]
end

subgraph server [UCIDM API サーバー]
  upd-passwd[PUT password]
end

ucidmpsync -- pipe --> stdin
stdin -- encode --> pusher
sender -- キューイング失敗 --> recovery-dir
pusher -- ipc://socket --> queue
queue -- ipc://socket --> puller
puller -- decode --> ucidm-client
ucidm-client -- http --> upd-passwd
ucidm-client -- 送信失敗 --> recovery-dir
recovery-handler -- 再送信 --> ucidm-client
recovery-dir -- 監視 --> recovery-handler

Sender や PassSync Agent で送信に失敗したときもリカバリディレクトリにメッセージが一時保存されて定期的に再処理されます。一時保存されるメッセージは難読化されて保存されます。システム管理者が容易にパスワードの文字列を確認することはできません。

パスワード変更のリカバリの注意事項

UCIDM ではセキュリティ強化の観点から一般ユーザーのパスワードを原則として保存しません。しかし、システムの一時的な障害のために一般ユーザーにパスワード変更をやり直してもらうのも実運用においてコストがかかります。リカバリ機能は難読化した上で再処理する機能になりますが、リカバリデータを削除しない限り、UCIDM_RECOVERY_DURATION の期間リカバリを繰り返します。一時的な検証ユーザーや誤った設定などにより、パスワード変更のデータが生成されてリカバリが不要な場合は削除しても構いません。

リカバリデータは後述する UCIDM_RECOVERY_PATH で指定されたディレクトリ配下に格納されます。不要なパスワード変更のデータがある場合はシステム管理者が直接、このディレクトリ配下にあるファイルを削除してください。

設定

systemd のサービスから PassSync Agent が使う環境変数を設定します。主には接続する UCIDM API サーバーの設定をすればデフォルト設定でも構いません。

# vi /opt/osstech/etc/openldap/service/ucidm/agent.env

agent.env の環境変数

接続する UCIDM API サーバーの設定をします。

環境変数既定値説明
API_SCHEMEhttpshttpUCIDM API サーバーのプロトコル
API_HOST任意localhostUCIDM API サーバー名
API_PORT任意18080UCIDM API サーバーのポート番号
API_SECURE_SKIP任意falseUCIDM API サーバーの任意の証明書を許可
API_ACCOUNT_AUTH_USER任意接続する UCIDM API のアカウント認証ユーザー
API_ACCOUNT_AUTH_PASSWORD任意接続する UCIDM API のアカウント認証パスワード

UCIDM API サーバーへのリクエストに失敗 (ステータスコードが 500 以上を返す) したときのリトライの設定をします。

環境変数既定値説明
CLIENT_RETRY_WAIT_MIN任意1s1 回目のリトライの待ち時間
CLIENT_RETRY_WAIT_MAX任意30sリトライの最大の待ち時間
CLIENT_RETRY_MAX任意4リトライの最大回数

agent プロセスがメッセージキューを使うときの設定をします。

環境変数既定値説明
TZ任意タイムゾーン情報
UCIDM_SOCKET_PATH/var/opt/osstech/lib/
ucidm-passsync/agent.sock
my-ipc-socketUnix ドメインソケットのパス
UCIDM_SEND_HWM任意0メッセージキューのバッファサイズ
UCIDM_BYTE_ORDER任意LittleEndianメッセージエンコーディングのバイトオーダー

sender/agent プロセスが送信処理に失敗したときにデータを一時保存するリカバリ設定をします。

環境変数既定値説明
UCIDM_RECOVERY_PATH/var/opt/osstech/lib/
ucidm-passsync/.recovery
.recoveryリカバリのためのメッセージが
一時保存される場所へのパス
UCIDM_RECOVERY_INTERVAL任意10mリカバリの実行間隔
UCIDM_RECOVERY_DURATION任意72hリカバリを行う期間

サービスの起動設定

systemd から PassSync サービスを起動します (OS 起動時にもサービス起動させます) 。実行後にサービスがアクティブになっていることを確認します。

# systemctl enable --now osstech-ucidm-passsync.service
# systemctl status osstech-ucidm-passsync.service

PassSync サービスのログを監視するには次のように実行します。

# journalctl -u osstech-ucidm-passsync.service -n 10 -f

osstech-openldap の slapd.conf を次のように設定します。

mdb セクションの一番最後に overlay ucidmpsync の設定を追加するようにしてください。

# vi /opt/osstech/etc/openldap/slapd.conf
...
# Load dynamic backend modules:
...
moduleload ucidmpsync.la
...
## PassSync
## ----------------------------------------------------------------------
overlay ucidmpsync
ucidmpsync-sender         "/opt/osstech/lib64/osstech-ucidm-agent-ldap-passsync/sender"
ucidmpsync-ad-uri         "ldaps://ad.example.com"
ucidmpsync-ad-binddn      "cn=Administrator,dc=ad,dc=example,dc=com"
ucidmpsync-ad-credentials "password"
ucidmpsync-ad-searchbase  "dc=ad,dc=example,dc=com"
...

ucidmpsync-ad パラメーター説明

OpenLDAP のユーザーの BIND 失敗時に Active Directory に BIND を行い、認証が成功すれば OpenLDAP のユーザーに対してパスワードを同期する機能があります。ucidmpsync-ad-uri が設定されている場合、パスワード同期機能が有効になり、以下のパラメーターで設定を行う必要があります。ucidmpsync-ad-uri が設定されていない場合、パスワードが同期されることはありません。

パラメーター名説明
ucidmpsync-ad-uriActive Directory サーバーへの接続 URI。ldaps:// または ldap:// を指定
ucidmpsync-ad-binddnActive Directory への接続時に使用する BIND DN
ucidmpsync-ad-credentialsActive Directory への接続時に使用するパスワード
ucidmpsync-ad-ldapuserkeyActive Directory のユーザー名として扱う OpenLDAP のユーザー属性名
ucidmpsync-ad-searchbaseActive Directory でのユーザー検索時のベース DN

osstech-openldap の slapd.service に sender が PassSync の環境変数を参照できるように設定を追加します。systemctl edit を使って次の内容を設定してください。

# systemctl edit slapd.service
[Service]
EnvironmentFile=/opt/osstech/etc/openldap/service/ucidm/agent.env

設定を完了すると次のファイルが作成されます。

/etc/systemd/system/slapd.service.d/override.conf

systemctl cat で次の内容を確認できれば正しい設定になります。

# systemctl cat slapd.service
...
# /etc/systemd/system/slapd.service.d/override.conf
[Service]
EnvironmentFile=/opt/osstech/etc/openldap/service/ucidm/agent.env

設定を完了したら次のように slapd.service を再起動します。

# systemctl restart slapd.service

あるユーザーでパスワード変更を行い、slapd のログから sender が agent にメッセージを送ったログを確認します。

# journalctl -u slapd.service -n 10 -f

sender や agent で ucidm へリクエストして 500 以上のステータスコードが返されたときはリカバリ用ディレクトリにデータが一時保存されます。そして UCIDM_RECOVERY_INTERVAL の環境変数で指定した間隔で再度リクエストします。成功しない限り、無限にリクエストされるので失敗することがわかっているデータの場合は手動で削除してください。

# ls -l /var/opt/osstech/lib/ucidm-passsync/.recovery/
合計 4
-rw-------. 1 ldap ldap 188  4月 14 10:34 2023-04-14-103417.011.data

PassSync Agent の動作を確認できたら OS 再起動時のサービス起動設定を確認します。基本的には OS 起動時に自動起動するとよいです。

# systemctl is-enabled osstech-ucidm-passsync.service
enabled

PassSync Agent サービスは slapd.service に依存するため、運用上の都合で slapd.service を自動起動していない場合はその設定にあわせて運用していただいても構いません。slapd.service を自動起動しているかどうかは次のコマンドで調べられます。

# systemctl is-enabled slapd.service
Last updated on 2026-03-18 10:49 +0900 (main@24b6dc6)