Go to list of users who liked
More than 3 years have passed since last update.
docker-composeでGUI管理できるLDAPサーバをサクッと立てる
概要
株式会社Link-Uでエンジニアを務めている堀内です。
Linuxサーバの認証統合を実現する手段として、LDAPを用いることが一般的です。
docker-composeを用いて、GUIで管理できるLDAPサーバの構築手順を解説します。
検証環境
- Ubuntu Server 20.04 LTS
- Docker 19.03.11 (snap版)
- 使用イメージ
サーバ構成
- LDAPデーモン: OpenLDAP
- 管理用アカウント・読取専用アカウントを作成、匿名アクセスは不可
- LDAPS (636/TCP) でのみ外部からアクセス可能にする
- Linuxのユーザ認証向けの設定を行う
- SSH公開鍵を格納できるようにする (sshPublicKey)
- LDAP管理ツール: Ldap Account Manager
- LDAPのユーザ登録・編集用
- HTTPSでアクセスを可能にする(リバースプロキシコンテナ経由)
- ホストとの共有ディレクトリ
- ./data/certs ... SSL証明書
- ./data/ldap_config ... OpenLDAP設定
- ./data/ldap_db ... OpenLDAPデータベース
- 公開ポート
- 80/tcp (HTTP) ... 管理ツール用、HTTPSに転送
- 443/tcp (HTTPS) ... 管理ツール用
- 636/tcp (LDAPS) ... LDAPサービス用
docker-compose設定
Dockerの導入
下記コマンドにてsnap版のdockerを導入します。
$sudosnapinstalldocker
docker-compose設定の記述
root権限に移行して、必要なディレクトリを準備します。
$sudo-s#cd ~#mkdirldap#cdldap#mkdirdata#mkdirdata/certs#mkdirdata/ldap_config#mkdirdata/ldap_db#vi docker-compose.yml
docker-compose.yml を記述します。
コメント文のある箇所は環境により適宜修正してください。
version:'3.8'services:slapd:# OpenLDAPサーバimage:osixia/openldap:1.4.0container_name:slapdrestart:on-failure:3hostname:ldap.example.com# サーバのホスト名ports:-636:636environment:LDAP_ORGANISATION:"ExampleInc."# 組織名LDAP_DOMAIN:"example.com"# 組織のドメインLDAP_ADMIN_PASSWORD:"admin_password"# 管理者パスワードLDAP_READONLY_USER:"true"# 読取専用ユーザ有効LDAP_READONLY_USER_USERNAME:"readonly"# 読取専用ユーザ名LDAP_READONLY_USER_PASSWORD:"readonly_password"# 読取専用ユーザパスワードLDAP_TLS_VERIFY_CLIENT:"never"# SSLクライアント認証の無効化# デフォルトでは自己署名証明書を自動生成、本番環境では下記コメントを外して証明書を指定# LDAP_TLS_CRT_FILENAME: "ldap.crt" # SSL証明書# LDAP_TLS_KEY_FILENAME: "ldap.key" # SSL秘密鍵# LDAP_TLS_CA_CRT_FILENAME: "ca.crt" # クライアント認証用CA証明書、使用しなくても指定は必須volumes:-./data/ldap_db:/var/lib/ldap-./data/ldap_config:/etc/ldap/slapd.d-./data/certs:/container/service/slapd/assets/certslogging:driver:"json-file"options:max-size:"10m"max-file:"3"lam:# Ldap Account Manager (LDAP管理ツール)image:ldapaccountmanager/lamcontainer_name:lamrestart:on-failure:3environment:LDAP_DOMAIN:"example.com"# 組織のドメイン、OpenLDAPの設定に合わせるLDAP_BASE_DN:"dc=example,dc=com"# LDAPのルートDN、ドメインをDN形式で表記するLDAP_USERS_DN:"ou=people,dc=example,dc=com"# ユーザOU、ドメイン部分だけ変更するLDAP_GROUPS_DN:"ou=groups,dc=example,dc=com"# グループOU、ドメイン部分だけ変更するLDAP_SERVER:"ldap://slapd:389"LAM_LANG:"ja_JP"LAM_PASSWORD:"lam_password"# LdapAccountManagerの 初期設定用パスワードVIRTUAL_HOST:"lam"CERT_NAME:"ldap"# SSL証明書名、.crt, .key のファイル名部分を指定。depends_on:-slapdlogging:driver:"json-file"options:max-size:"10m"max-file:"3"proxy:# LDAP Account Manager 用のリバースプロキシimage:jwilder/nginx-proxycontainer_name:proxyrestart:on-failure:3environment:DEFAULT_HOST:"lam"ports:-80:80-443:443volumes:-./data/certs:/etc/nginx/certs-/var/run/docker.sock:/tmp/docker.sock:rodepends_on:-slapd-lamlogging:driver:"json-file"options:max-size:"10m"max-file:"3"
サービスの起動
サービスを起動し、全コンテナが正常に動作していることを確認します。
初回起動時はリバースプロキシが証明書を読み込めていない場合があるため、手動でproxyコンテナの再起動をかけてください。
#docker-compose up-d#docker-compose psName Command State Ports ------------------------------------------------------------------------------------------------lam /usr/bin/dumb-init -- /usr ... Up (healthy) 80/tcpproxy /app/docker-entrypoint.sh ... Up 0.0.0.0:443->443/tcp, 0.0.0.0:80->80/tcpslapd /container/tool/run Up 389/tcp, 0.0.0.0:636->636/tcp#docker-compose restart proxy
LDAP Account Manager設定
初期設定
サービスを起動したサーバにブラウザでアクセスします。
正式な証明書を入れていない場合、下記のように警告が出ますが、無視して続行します。
docker-compose.yml
で指定したパスワードでログインします。
"モジュール"タブを開き、ユーザのモジュールから "shadow"を削除、"SSH公開鍵"を追加して図のような状態にします。
LDAPユーザ追加
初期設定の完了後、LDAPの管理者ユーザのパスワードを入力してログインします。
テスト用ユーザのプライマリグループを追加します。"グループ"タブの"新しいグループ"を選択します。
グループ名を入力して保存します。ここでは"testuser"を作成します。
"unix"タブに移り、ユーザ名とcommon nameを入力します。プライマリグループとして先ほど登録したグループが表示されていることを確認します。
"パスワード設定"を選択し、ログインパスワードを設定します。
"SSH公開鍵"タブの"SSH公開鍵拡張を追加" を選択します。
動作確認
Apache Directory Studio 等のLDAPブラウザでLDAPサーバに接続し、作成したユーザとグループの情報が読み取れることを確認します。
接続の際の認証情報は下記のように設定します。
プロトコル:LDAPS
ポート:636
ユーザDN:cn=admin,dc=example,dc=com
※cn=admin以降は組織のドメインに合わせて変更
パスワード: (docker-compose.ymlで設定した管理者パスワード)
まとめ
docker-composeを用いたLDAPサーバの構築方法を解説しました。
LinuxサーバにSSSDを導入して本LDAPサーバと連携させれば、
パスワード認証 or SSH鍵認証を行ってログインすることが可能になります。
Register as a new user and use Qiita more conveniently
- You get articles that match your needs
- You can efficiently read back useful information
- You can use dark theme