2025年9月4日木曜日

tls な openldap サーバを docker compose で構築する方法

tls な openldap サーバを docker compose で構築する方法

概要

過去に openldap を tls 化する方法を紹介しました
今回はそれを docker compose で一発で構築しかつユーザも自動で登録する方法を紹介します

環境

  • Ubuntu 24.04
  • docker 28.3.3
  • openldap 2.6.10

compose.yaml

LDAP_TLS_CA_FILE には LDAP_TLS_CERT_FILE と同じものを指定すれば大丈夫でした
fullchain.pem は分割しないでもいいようです

services:
  openldap:
    image: bitnami/openldap:latest
    container_name: openldap
    ports:
      - "1636:1636"
    environment:
      - ALLOW_EMPTY_PASSWORD=yes
      - LDAP_ENABLE_TLS=yes
      - LDAP_TLS_CERT_FILE=/opt/bitnami/openldap/certs/fullchain.pem
      - LDAP_TLS_KEY_FILE=/opt/bitnami/openldap/certs/privkey.pem
      - LDAP_TLS_CA_FILE=/opt/bitnami/openldap/certs/fullchain.pem
    volumes:
      - /etc/letsencrypt/live/your-domain.com/:/opt/bitnami/openldap/certs
      - ./ldif/base.ldif:/ldifs/base.ldif
      - ./ldif/hawk.ldif:/ldifs/hawk.ldif
    restart: unless-stopped

ldif/base.ldif

今回 bitnami の openldap イメージの機能で /ldifs にファイルを置くと自動でユーザや組織を追加する仕組みを使っています

この仕組みを使うと環境変数に設定してあるデフォルトの組織情報が無視されるので自分で作成してあげます

dn: dc=example,dc=org
objectClass: top
objectClass: dcObject
objectClass: organization
o: Example Organization
dc: example

ちなみにログには以下のようなログが出力されます

WARN  ==> Ignoring LDAP_USERS, LDAP_PASSWORDS, LDAP_USER_OU, LDAP_GROUP_OU and LDAP_GROUP environment variables...

ldif/hawk.ldif

ユーザ追加用の ldif ファイルです
ユーザごとに作成してもいいですしまとめて書いてしまっても OK です

dn: uid=hawk,dc=example,dc=org
uid: hawk
cn: hawk
sn: snowlog
objectClass: top
objectClass: posixAccount
objectClass: inetOrgPerson
loginShell: /bin/bash
homeDirectory: /home/hawk
uidNumber: 1000
gidNumber: 1000
userPassword: {SSHA}MYHODLo+3s3ZuMCN7qDw4hWY8JZ7O6YA
mail: hawk@example.org
gecos: hawksnowlog

起動

  • docker compose up -d

動作確認

以下どれでも OK です
admin ユーザは作成されるので admin でも追加したユーザでも検索できることを確認しましょう

  • docker exec openldap ldapsearch -x -H ldap://localhost:1389 -b "dc=example,dc=org" -D "uid=hawk,dc=example,dc=org" -w xxx "(objectClass=*)"
  • docker exec openldap ldapsearch -x -H ldap://localhost:1389 -b "dc=example,dc=org" "(uid=hawk)"
  • docker exec openldap ldapsearch -x -H ldap://localhost:1389 -b "dc=example,dc=org" -D "cn=admin,dc=example,dc=org" -w xxx "(objectClass=*)"

tls で確認したい場合は以下のようにします

  • docker exec openldap ldapsearch -x -H ldaps://your-domain.com:1636 -b "dc=example,dc=org" -D "uid=hawk,dc=example,dc=org" -w xxx "(objectClass=*)"

最後に

docker compose を使って openldap を tls で構築する方法を紹介しました
今回データ領域は使っていないのでコンテナをダウンさせるたびにユーザ情報は消えますが毎回 ldif を実行するため同じ状態で起動はしてきます

コンテナ起動後に手動でユーザなどを追加した場合は ldif も作成しないと次回起動時に消えてしまうので注意しましょう

参考サイト

0 件のコメント:

コメントを投稿