* 目次 [#l1cfab9e] #contents * LADPサーバとは [#t813739b] ** 簡単な説明 [#i9c1d80a] 簡単にいうと、社内用のシステムのアカウントを一元管理できるサーバ ** 丁寧な説明 [#jbf8312a] LDAP (Lightweight Directory Access Protocol)は、情報サービスやディレクトリサービスを提供するためのプロトコルです。LDAPは、ユーザーやグループ、その他の情報を格納し、検索し、管理するための効率的な手段を提供します。一般的に、LDAPはユーザーアカウント情報、グループメンバーシップ、そして多数のアプリケーションに対するアクセス権限などを管理するために使用されます。 。 ** LDAPサーバのdockerコンテナのメリット [#bb107e76] *** 環境の統一 [#ae575bc5] Dockerを使用すると、開発、テスト、本番環境など、どの環境でも同じ設定でLDAPサーバを立ち上げることができます。これにより、環境間の設定の違いによる問題を避けることができます。 *** スケーラビリティ [#ofbb3912] Dockerコンテナは軽量で、必要に応じて迅速にスケーリングすることが可能です。したがって、需要が増えたときに迅速にLDAPサーバをスケールアウトすることが可能です。 *** 移植性 [#q8fb9360] DockerコンテナはどのホストOS上でも動作します。これにより、LDAPサーバを異なるOSやクラウドプロバイダ間で移動することが容易になります。 *** バージョン管理とロールバック [#fd859ab9] Dockerイメージはバージョン管理が可能で、問題が発生した場合に前のバージョンに戻すことができます。 *** 簡易的な導入と管理 [#gf8120fa] Dockerを使用すると、LDAPサーバのインストールや設定が容易になり、また管理も簡単になります。Docker Composeファイルを使用すると、サービスの設定をコードとして管理することができ、この設定を再利用することが可能です。 * docker-compose.ymlの例 [#eb690b2e] 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 * ローカル環境専用の自己署名証明書でSSHする場合 [#g48d7030] ** 1年間有効の自己署名証明書を作成 [#r99fb860] mkdir -p certs && openssl req -x509 -newkey rsa:4096 -keyout certs/key.pem -out certs/cert.pem -days 365 -nodes -subj '/CN=localhost' 生成したファイルをブラウザに登録すると、認証することになるので、テスト時には便利だが、取り扱い厳重注意のものです。 *** docker-compose.yml [#g385907d] 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 *** 自己署名証明書をChromeにインストールする手順 [#i50df420] - Chromeの設定に移動します(右上の三つの点をクリックして、「設定」を選択)。 - 下にスクロールして「詳細設定」をクリックします。 - 「プライバシーとセキュリティ」セクションに移動し、「セキュリティ」をクリックします。 - 「詳細設定」をクリックして、「証明書の管理」を選択します。 - 「信頼済みルート認証局」タブを開き、「インポート」をクリックします。 - 証明書インポートウィザードが表示されたら、「次へ」をクリックします。 - 「ファイルを参照」をクリックし、先ほど作成した自己署名証明書(.pem形式)を選択し、「開く」をクリックします。 - 「次へ」をクリックし、明書ストアとして「信頼されたルート証明機関」を選択し、「次へ」をクリックします。 - 「完了」をクリックして証明書のインポートを完了します。 - インポートが成功したら、ウィザードを閉じてChromeを再起動します。 * 参考記事 [#x02e641b] ** 【Docker】phpLDAPadminで「Forbidden You don’t have permission to access / on this server.」 [#efe4cafe] https://non-programmer-lab.com/phpldapadmin-forbidden-you-dont-have-permission-to-access-on-this-server/ ** Spring Security(Spring Boot) + OpenLDAPでLDAP認証してみる [#cdef7df7] https://qiita.com/kazuki43zoo/items/6bef663e2a885d8a0f16 ** OpenSSHの公開鍵をLDAPで管理 [#p5c1287f] https://gihyo.jp/admin/serial/01/ldap/0006 * ユーザの追加 [#md3c597b] ** 例:billyというユーザを追加する例 [#db50ef75] vi new-user.ldif *** new-user.ldifファイルの内容 [#n4fa918c] パスワードは、平文で入れたとしても登録後はそのままでは見れなくなる 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 ** dockerのコンテナに登録用のファイルをコピーして登録 [#d119d6e5] 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 ** ユーザの削除 [#af158510] *** 削除ファイルの例 [#n8454da6] - ファイル名 delete-user.ldif - ファイルの内容 uid=billy,dc=my-company,dc=com - コンテナにファイルをコピー コンテナ名を確認:以下の例は、ldapサーバのコンテナ名が、openldapの場合 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 - 確認 上記の追加コマンドの場合と同じ ** 参考にしたサイト [#w25e67ce] - hawksnowlog https://hawksnowlog.blogspot.com/2022/04/run-openldap-server-with-docker.html