簡単にいうと、社内用のシステムのアカウントを一元管理できるサーバ
LDAP (Lightweight Directory Access Protocol)は、情報サービスやディレクトリサービスを提供するためのプロトコルです。LDAPは、ユーザーやグループ、その他の情報を格納し、検索し、管理するための効率的な手段を提供します。一般的に、LDAPはユーザーアカウント情報、グループメンバーシップ、そして多数のアプリケーションに対するアクセス権限などを管理するために使用されます。
。
Dockerを使用すると、開発、テスト、本番環境など、どの環境でも同じ設定でLDAPサーバを立ち上げることができます。これにより、環境間の設定の違いによる問題を避けることができます。
Dockerコンテナは軽量で、必要に応じて迅速にスケーリングすることが可能です。したがって、需要が増えたときに迅速にLDAPサーバをスケールアウトすることが可能です。
DockerコンテナはどのホストOS上でも動作します。これにより、LDAPサーバを異なるOSやクラウドプロバイダ間で移動することが容易になります。
Dockerイメージはバージョン管理が可能で、問題が発生した場合に前のバージョンに戻すことができます。
Dockerを使用すると、LDAPサーバのインストールや設定が容易になり、また管理も簡単になります。Docker Composeファイルを使用すると、サービスの設定をコードとして管理することができ、この設定を再利用することが可能です。
mailcowと同じネットワーク上になるような想定で、docker-compose.ymlを作成してみた
version: '3.8' services: ldap_server: image: osixia/openldap:1.5.0 container_name: openldap environment: LDAP_ORGANISATION: "Example Organization" LDAP_DOMAIN: "example.com" LDAP_ADMIN_PASSWORD: "admin_password" LDAP_BASE_DN: "dc=example,dc=com" LDAP_TLS: "false" volumes: - ldap_data:/var/lib/ldap - ldap_config:/etc/ldap/slapd.d ports: - "389:389" - "636:636" networks: local-network: aliases: - ldap_server ldap_admin: image: osixia/phpldapadmin:0.9.0 container_name: phpldapadmin environment: PHPLDAPADMIN_LDAP_HOSTS: "ldap_server" # 403エラーを防ぐ用の設定だが、外部のサーバからは行わないようにする PHPLDAPADMIN_HTTPS: "false" ports: - "8095:80" networks: local-network: aliases: - ldap_admin volumes: ldap_data: ldap_config: networks: local-network:
もし、
PHPLDAPADMIN_HTTPS: "false"
の指定が無いと、docker-compose up -dしてから、localhost:8095 にアクセスしたら403エラーになる
上記の場合だと、ログインとパスワードは以下のようになる。admin/admin_password
mkdir -p certs && openssl req -x509 -newkey rsa:4096 -keyout certs/key.pem -out certs/cert.pem -days 365 -nodes -subj '/CN=localhost'
生成したファイルをブラウザに登録すると、認証することになるので、テスト時には便利だが、取り扱い厳重注意のものです。
version: '3.8' services: ldap_server: image: osixia/openldap:1.5.0 container_name: openldap environment: LDAP_ORGANISATION: "Example Organization" LDAP_DOMAIN: "example.com" LDAP_ADMIN_PASSWORD: "admin_password" LDAP_BASE_DN: "dc=example,dc=com" LDAP_TLS: "false" volumes: - ldap_data:/var/lib/ldap - ldap_config:/etc/ldap/slapd.d ports: - "389:389" - "636:636" networks: local-network: aliases: - ldap_server ldap_admin: image: osixia/phpldapadmin:0.9.0 container_name: phpldapadmin environment: PHPLDAPADMIN_LDAP_HOSTS: ldap_server PHPLDAPADMIN_HTTPS: "true" volumes: - ./certs:/container/service/phpldapadmin/assets/certs ports: - "8095:443" networks: local-network: aliases: - ldap_admin
https://qiita.com/kazuki43zoo/items/6bef663e2a885d8a0f16
https://gihyo.jp/admin/serial/01/ldap/0006
vi new-user.ldif
パスワードは、平文で入れたとしても登録後はそのままでは見れなくなる
dn: uid=billy,dc=my-company,dc=com uid: billy cn: billy sn: 3 objectClass: top objectClass: posixAccount objectClass: inetOrgPerson loginShell: /bin/bash homeDirectory: /home/billy uidNumber: 14583102 gidNumber: 14564100 # userPassword: {SSHA}j3lBh1Seqe4rqF1+NuWmjhvtAni1JC5A userPassword: xxx mail: billy@my-company.com gecos: Billy User
ldapのコンテナの名前がopenldapだとすると、以下のようになる。
docker cp new-user.ldif openldap:/container/service/slapd/assets/test/new-user.ldif
docker exec -it openldap bash
ldapadd -x -H ldap://localhost -D "cn=admin,dc=my-company,dc=com" -w xxx -f /container/service/slapd/assets/test/new-user.ldif
ldapsearch -x -H ldap://localhost -b dc=my-company,dc=com -D "cn=admin,dc=my-company,dc=com" -w xxx
以下のコマンドでも確認
slapcat
delete-user.ldif
uid=billy,dc=my-company,dc=com
docker cp delete-user.ldif openldap:/container/service/slapd/assets/test/delete-user.ldif
docker exec -it openldap bash
ldapdelete -x -H ldap://localhost -D "cn=admin,dc=my-company,dc=com" -w xxx -f /container/service/slapd/assets/test/delete-user.ldif