サーバにいろいろなアプリケーションが濫立してアカウント発行しまくるという地獄を回避すべく、OpenLDAPを使ってLDAPを構築してみました。
LDAP認証について
LDAPとは
Lightweight Directory Access Protocolは、ディレクトリ・サービスに接続するために使用される通信プロトコルの一つ
(wikipediaより)
じゃあディレクトリサービスってなんだ?って言うと・・・
ディレクトリ・サービスは、コンピュータネットワーク上のリソース(資源)とその所在や属性、設定などの情報を収集・記録し、検索できるようにしたサービスである
ネットワーク上のリソース(資源)についての情報を一元管理するために、比較的規模の大きいネットワークで利用される。 リソースについての情報には、ユーザのアイデンティティ情報も含まれる。
(wikipediaより)
LDAP認証すると何が嬉しいの?
LDAP認証することが目的ではなく、様々なアプリケーションの認証をLDAPを使用して一言管理することに最大の利点があります。
一言で言えば、いままでアプリケーションごとに発行していたID、PWが1回の発行ですべてに使い回せるようになります。
OpenLDAP
今回はLDAPサーバに、Windows機以外での使用を考えて、OpenLDAPを採用します。
オープンソースで無料で使用することができます。
検証環境
- Windows Server 2012 r2 64 bit
- VirtualBox
- docker-machine : Linux(2.6/3.x/4/x 64bit)
OpenLDAP 構築
例の如くDockerを利用してサクッと立ち上げて行きます。
GitHubのosixia/openldapがdocker imageのリポジトリです。
ここに使用方法が記載されているので早速構築していきましょう。
Quick Start
ちょっと触ってみたいな~なんて方はとりあえずquick startに記載されている通り以下のコマンドでコンテナが立ち上がります。
docker run --name my-openldap-container --detach osixia/openldap:1.2.2
もちろん常用には耐えないので本当にちょっとだけ試してみたい人用だと思ってください。
OpenLDAPの構築
Docker上で動いているコンテナの認証をLADPに置き換えたかったので以下の2点を考慮しました。
- 常に起動している必要がある
- 永続化されている必要がある
そんな要件を満たすコマンドは下記。
docker run --name ldap-service --hostname ldap-service \ --env LDAP_ORGANISATION="My Company" --env LDAP_DOMAIN="my-company.com" \ --volume ldap-database:/var/lib/ldap \ --volume ldap-config:/etc/ldap/slapd.d \ --restart=always \ --publish=8389:389 \ --env LDAP_ADMIN_PASSWORD="admin" --detach osixia/openldap:1.2.2
パラメータについて
GitGubにある2つのyamlファイルにデフォルトの設定値が定義されています。
- Default.yaml
ここに定義されているコンテナの設定値はいつでも変更できます。
-
Default.startup.yaml
コンテナ作成時にのみ設定できる設定値が定義されています。このファイルは、スタートアップ時に削除され、これらの値はすべてコンテナ環境で使用できなくなります。
設定値一例
Required and used for new ldap server only:
- LDAP_ORGANISATION: Organisation name. Defaults to
Example Inc.
- LDAP_DOMAIN: Ldap domain. Defaults to
example.org
- LDAP_BASE_DN: Ldap base DN. If empty automatically set from LDAP_DOMAIN value. Defaults to
(empty)
- LDAP_ADMIN_PASSWORD Ldap Admin password. Defaults to
admin
- LDAP_CONFIG_PASSWORD Ldap Config password. Defaults to
config
- LDAP_READONLY_USER Add a read only user. Defaults to
false
- LDAP_READONLY_USER_USERNAME Read only user username. Defaults to
readonly
- LDAP_READONLY_USER_PASSWORD Read only user password. Defaults to
readonly
- LDAP_RFC2307BIS_SCHEMA Use rfc2307bis schema instead of nis schema. Defaults to
false
まだまだたくさんあるので、詳細はEnvironment Variablesを参照してください。
phpLDAPadmin構築
phpLDAPadmin
はLDAPサーバーをGUIで管理するためのLDAP管理ツールです。 OpenLDAPを管理するために導入しましょう。docker imageはこちらにあります。
docker run --name phpldapadmin-service \ --hostname phpldapadmin-service \ --link ldap-service:ldap-host \ --env PHPLDAPADMIN_LDAP_HOSTS=ldap-host \ --restart=always \ --publish=6443:443 \ --publish=1234:80 \ --env PHPLDAPADMIN_HTTPS=false \ --detach osixia/phpldapadmin:0.7.2
- 注意
- 認証を利用しない場合HTTPSを無効化しないとエラーが出てログイン画面が表示できません。下記パラメータを追加しています。
--env PHPLDAPADMIN_HTTPS=false
参考「Forbidden You don’t have permission to access / on this server.」の原因と対処法について
詳しくはこちらで記載しております。
動作確認
http://localhost:1234/ に接続。
- ID:
cn=admin,dc=my-company,dc=com
- PD:
admin
ログインできました!
お疲れ様でした!