DockerでOpenLDAPを構築する方法

目次

はじめに

複数のツールなどのサービスや端末でユーザー情報を管理していると、「あの人のアカウントは作ったっけ?」「パスワードの管理が面倒…」といった悩みが出てきます。
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で行う方法(nslcdsssdによるPAM連携)
  • 実際のサービス(Nextcloud、Redmineなど)との連携設定
  • Windows PCのログインをLDAPで制御する方法(Samba ADを使う構成)

※これらは別記事で解説予定です。

使用する構成

ここでは、OpenLDAPをDockerで動かすための環境と、前提条件を整理しておきます。

構築に使用する環境

今回のOpenLDAPサーバー構築にあたり、次のような環境を前提に進めていきます。
読者の方も近い構成であれば、同じ手順で動作するはずです。

項目内容
OSUbuntu 22.04(テスト機)
Docker24.x 以降
docker-composev2(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

各項目の補足解説については以下の通りです。

項目説明
imageOpenLDAPの公式イメージ(osixia/openldap)を指定
container_nameコンテナ名を指定(任意)
ports外部からアクセスできるようポート389(LDAP)、636(LDAPS)を公開
environmentLDAPサーバーの初期設定(組織名、ドメイン、管理者パスワード)
volumesコンテナのデータをローカルに永続化
restartサーバー再起動後も自動で再開(常駐向け設定)

LDAP_DOMAIN には、自宅などで使用しているドメイン名を指定してください
ldap.example.org のように、LDAP専用のサブドメインを作成して設定するのがおすすめです

LDAPのバージョンは、以下のサイトから調べることが出来ます。

latest タグはありますが、必ずしも最新バージョンとは限らないことに注意が必要です。
安定版は明示的に 1.5.0 のようにタグにバージョンが記載されています。

OpenLDAPのDocker Hubページ

https://hub.docker.com/r/osixia/openldap/tags

ポートについて
ポート389(通常のLDAP通信)が接続確認に使われます
LDAPS(636番)は今回は使用しないため、ファイアウォールで解放する必要はありません
ただし、外部ネットワークからLDAPにアクセスする場合は、LDAPS(636番)の使用と証明書の設定を検討してください

初期設定について

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プロセスが動いていないか確認する(netstatssなど)
permission deniedvolumeなどで実行ユーザーの権限不足、もしくはSELinux/AppArmor制限の可能性あり

原因が特定できない場合は、ログ出力からエラーの詳細を確認できます
docker compose logsdocker logs openldap で行えます

まとめ

この記事では、Dockerを使ってOpenLDAPサーバーを立ち上げる手順を解説しました。
Linux本体のユーザーとは切り離し、他サービスからの認証連携を前提とした構成にしています。

ここまでで、出来たことをまとめます。

  • Docker+docker-composeを使ったOpenLDAPの構築
  • 初期設定(組織名、ドメイン、管理者アカウント)が自動で設定される
  • コンテナの起動確認
  • エラーが出た場合の対処やログ確認方法
  • URLをコピーしました!

コメント

コメントする

CAPTCHA


目次