はじめに
複数のツールなどのサービスや端末でユーザー情報を管理していると、「あの人のアカウントは作ったっけ?」「パスワードの管理が面倒…」といった悩みが出てきます。
LDAP(Lightweight Directory Access Protocol)を導入することで、ユーザー情報を一元管理し、さまざまなサービスと連携することが可能になります。
この記事では、LDAPサーバーをDockerで構築し、ユーザー管理の基盤を整える手順を紹介します。
なぜDockerで構築するのか?
結論から言えば、Dockerを使えば構築が簡単で、安全に試せるからです。
Linuxには標準でユーザー情報を管理する仕組み(/etc/passwd
など)があり、LDAPと連携させるには設定の変更や注意が必要になります。
特に、OSのログイン認証にLDAPを組み込むと、設定ミスによってログインできなくなるリスクもあります。
そのため今回は、ホストOSとは切り離された形でLDAPを運用できるDockerを採用しました。
Dockerを使えば、LDAPの構築・再構築・バックアップも簡単で、他のサービスとの連携テストにも適しています。
この記事の構成は以下の通りです。
この記事のゴール
このページでは、Dockerを使ってOpenLDAPサーバーを構築し、基本的な接続確認までを行うことを目指します。
具体的には、以下の内容ができるようになります。
- Dockerを使ってOpenLDAPサーバーを立ち上げる
- LDAPの基本構成(ドメイン名や組織単位)の初期設定を行う
- LDAPブラウザ(GUIツール)を使って接続し、データの中身を確認する
- Linuxのユーザー管理とは切り離した構成で、安全に導入できるようにする
このページでは扱わない内容
以下の内容は、今回の目的(DockerでOpenLDAPの基本構築)とは異なるため対象外としています。
また、LinuxのログインにLDAPを使う構成は、起動順の問題や管理上のリスクがあるため、今後も扱う予定はありません。
- LinuxのOSログインをLDAPで行う方法(
nslcd
やsssd
によるPAM連携) - 実際のサービス(Nextcloud、Redmineなど)との連携設定
- Windows PCのログインをLDAPで制御する方法(Samba ADを使う構成)
※これらは別記事で解説予定です。
使用する構成
ここでは、OpenLDAPをDockerで動かすための環境と、前提条件を整理しておきます。
構築に使用する環境
今回のOpenLDAPサーバー構築にあたり、次のような環境を前提に進めていきます。
読者の方も近い構成であれば、同じ手順で動作するはずです。
項目 | 内容 |
---|---|
OS | Ubuntu 22.04(テスト機) |
Docker | 24.x 以降 |
docker-compose | v2(CLI組み込み型) |
OpenLDAPイメージ | osixia/openldap:latest |
テストツール | Apache Directory Studio(Windows側から接続) |
前提条件
以下の条件が満たされていれば、このページの内容をそのまま実行できます。
Dockerのインストールやポート開放については、本記事では説明を省略します。
- Dockerとdocker-composeがインストールされていること(※インストール方法は別記事参照)
- ポート389(LDAP)の外部アクセスができること
- LDAPの知識がなくてもOK(最低限の構造は後述)
Dockerのインストールは以下の記事をご覧ください。合わせて、docker-composeも使えるようになります。
docker-compose.ymlの作成
まずは、OpenLDAPサーバーをDockerで動かすための設定ファイルを用意します。
作業用ディレクトリ(例:ldap-server
)は、基本的にホームディレクトリや任意の作業用パスに作成すれば問題ありません。特に制約はありませんが、管理しやすい場所にしておくと後々便利です。
今回は、専用の作業ディレクトリ(例:ldap-server
)を作成し、その中に docker-compose.yml
を配置します。
作業ディレクトリの作成
mkdir ldap-server
cd ldap-server
docker-compose.yml の内容
作成したldap-server
の中に、docker-compose.yml
ファイルを作成して以下の内容を記述しましょう。
version: '3.8'
services:
openldap:
image: osixia/openldap:1.5.0
container_name: openldap
ports:
- "389:389"
- "636:636"
environment:
- LDAP_ORGANISATION=Example Inc.
- LDAP_DOMAIN=ldap.example.org
- LDAP_ADMIN_PASSWORD=admin
volumes:
- ./ldap_data:/var/lib/ldap
- ./ldap_config:/etc/ldap/slapd.d
restart: unless-stopped
各項目の補足解説については以下の通りです。
項目 | 説明 | |
---|---|---|
image | OpenLDAPの公式イメージ(osixia/openldap)を指定 | |
container_name | コンテナ名を指定(任意) | |
ports | 外部からアクセスできるようポート389(LDAP)、636(LDAPS)を公開 | |
environment | LDAPサーバーの初期設定(組織名、ドメイン、管理者パスワード) | |
volumes | コンテナのデータをローカルに永続化 | |
restart | サーバー再起動後も自動で再開(常駐向け設定) |
LDAPのバージョンは、以下のサイトから調べることが出来ます。
latest
タグはありますが、必ずしも最新バージョンとは限らないことに注意が必要です。
安定版は明示的に 1.5.0
のようにタグにバージョンが記載されています。
https://hub.docker.com/r/osixia/openldap/tags
初期設定について
OpenLDAPの初期設定(組織名・ドメイン・管理者アカウントなど)は、docker-compose.yml
に記載した以下の環境変数に基づいて、コンテナの初回起動時に自動的に実行されます。
特に追加の操作を行う必要はなく、初期化設定は完了します。起動と同時に以下のような設定が反映されるところがポイントです。
- 管理者DN(例):
cn=admin,dc=kuwork,dc=local
- ドメインDN(例):
dc=kuwork,dc=local
- 管理者パスワード:
LDAP_ADMIN_PASSWORD
で指定した値
このように、docker-composeファイルに値を設定しておくだけで、LDAPの基本設定が完了するのでosixia/openldap
イメージは便利ですね。
コンテナの起動と初期確認
OpenLDAPの docker-compose.yml
を作成したら、いよいよコンテナを起動してみましょう。
まずは基本的な起動コマンドからです。
コンテナの起動
以下のコマンドでLDAP環境を起動します。初回起動時はボリューム内にLDAPの構成データが生成されます。
docker compose up -d
正常に起動したか確認する
以下のコマンドで、コンテナが正しく動いているか確認します。
docker ps
IMAGEのところにosixia/openldap:1.5.0
、STATUSのところにUP
、のように出ていれば成功です。
エラーが出る場合の補足
起動時に以下のような問題が出ることがあります。
ポート389が使われている | 他のLDAPプロセスが動いていないか確認する(netstat やss など) | |
permission denied | volumeなどで実行ユーザーの権限不足、もしくはSELinux/AppArmor制限の可能性あり |
まとめ
この記事では、Dockerを使ってOpenLDAPサーバーを立ち上げる手順を解説しました。
Linux本体のユーザーとは切り離し、他サービスからの認証連携を前提とした構成にしています。
ここまでで、出来たことをまとめます。
- Docker+
docker-compose
を使ったOpenLDAPの構築 - 初期設定(組織名、ドメイン、管理者アカウント)が自動で設定される
- コンテナの起動確認
- エラーが出た場合の対処やログ確認方法
コメント