* 目次 [#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
トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS