アカウント管理の集約、サーバログイン・サイトログイン制御を目的に、Openldapを用いてLDAP環境を構築していきます。
以下、連載記事にしていきます。
1.Openldapの仕組み ※本記事
2.LDAPサーバ構築手順
3.LDAPクライアント設定手順
4.LDAPディレクトリ構成例とACLの設定
5.バックアップリストアテスト
6.パスワード有効期限切れ通知スクリプト(おまけ)
本記事は1番目の仕組みを説明するだけの記事なので、なんとなく見ていただけるとありがたいです。
要件
今回、以下の要件を想定した環境を構築します。
・Openldapを用いてLDAPサーバを構築し、システム利用者のアクセス管理とパスワードポリシーを一元化し人的負荷を低減させる。
・アカウント管理ツールとしてLDAP Account Managerを使用する。接続の際には443(HTTPS)ポートを使用する。
・DB、ファイルのバックアップ環境を構築・運用する。
・一旦シングル構成とする。後程、耐障害性を考慮し冗長化も可能とする。
・踏み台、中継サーバーはSSH公開鍵認証によるLDAPログインとし、踏み台サーバーから他サーバーのログインは共通ユーザとする。
・情報の管理はou=infraのメンバーで行うものとする。
LDAPログインの仕組み
LDAPログインの仕組みのイメージ図です。以下はユーザ名+秘密鍵でLDAPクライアントにログインする場合です。
LDAPサーバにはslapdというデーモンが、LDAPクライアントにはnslcdというデーモンが動いていて、それが相互に働きLDAPログインを可能にしています。
用語定義
Openldapはマスター/スレーブをプロバイダ/コンシューマと呼んだり、他のサーバに比べ少し変わっていて、用語もわかりにくいです。簡単にメモしておきます。
いろいろ書いてありますが、LDAPはディレクトリ構造(ツリー型)でデータを管理しているという点が重要です。
用語 | 説明 |
---|---|
LDAP | Lightweight Directory Access Protocolの略。ディレクトリ構造でデータを管理している。通常、389番ポートを使用。 |
バックエンドデータベース | アプリに組み込まれたデータベース。OpenLDAPではhdbというバックエンドデータベースがディレクトリツリーの階層構造についての情報を持つ。 |
ベースDN (サフィックス) | ディレクトリサービスの基点となるディレクトリを、ベースDN(サフィックス)という。 |
エントリ | ベース DN を基点としたディレクトリツリー内の、それぞれのデータのこと。 |
属性 | エントリに含まれる情報の種類のこと(氏名、所属、メールアドレス等々)。 |
オブジェクトクラス | 属性の種類ごとの集まり。エントリに何の属性を含めるか定義するために、オブジェクトクラスをエントリに指定する。 |
LDIFファイル | エントリの情報を記述するファイル。LDAPサーバでデータをやり取りするために使用する。 |
プロバイダ | サーバを冗長構成にしたときの、マスターサーバのこと。 |
コンシューマ | サーバを冗長構成にしたときの、スレーブサーバのこと。 |
管理者権限について
構築手順にも登場しますが、管理者権限を持つユーザとして、「設定管理者」と「ディレクトリマネージャー」というユーザが存在します。これらはディレクトリツリーの中に存在します。
・設定管理者(cn=admin,cn=config)はスキーマの追加、モジュールの追加等、LDAP自体の設定管理をする。
・ディレクトリマネージャー(cn=admin,dc=test,dc=org)は全エントリ、ディレクトリ構成の参照・変更権限を持つ。
※ベースDNがdc=test,dc=orgの場合。
LDAPディレクトリの構成、ACLについて
ディレクトリツリーのイメージを持つために構成例を記載します(ツリーっぽくなくてごめんなさい)。
例えば「"サーバにログインさせたいけどsudo権は与えたくない"というユーザはuserというou名の中に登録しよう。」といった形で管理します。ouとは組織単位のことです(グループみたいなもので、そのouの中にユーザを登録していくイメージ)。
また上のツリーを例にした場合、各ouに対し以下のように役割を決めてディレクトリツリーを作成し、アクセス制限を設定していくのが一般的です。
OU名 | 説明 |
---|---|
system | サーバにログインできるシステムユーザのエントリ |
infra | 全環境でsudo権が付与された管理者用ユーザ(LDAP管理、サーバ管理者用) |
user | サーバ内でsudoできない、または環境を制限してsudoが付与されるユーザ |
group | グループのエントリを追加 |
tool | Gitや監視ツールなど他のツールもLDAP連携したい場合に備えたツール用ユーザ |
tool-admin | OU=toolのエントリを追加・削除・編集できるツールユーザの管理者 |
policies | ポリシーを定めたエントリ |
また各ディレクトリのACL(アクセス制御)についてもこちらの記事で紹介します。
・CentOS7でOpenldap構築 - 4.LDAPディレクトリ構成とACLの設定
ldapコマンドについて
Openldapは以下のようなldapコマンドで操作を行います。
ldapadd,ldapdelete,ldapmodify
ldapadd : LDAPにエントリを登録する
ldapdelete : LDAPエントリを削除する
ldapmodify : LDAPエントリを修正する
オプションは次の通りです。
オプション | 説明 |
---|---|
-H | LDAPサーバを参照するURIを指定する。プロトコル、ホスト、ポートのみ指定できる。 指定しない場合、ldap |
-h | LDAPサーバを指定する。指定しない場合、ローカルホストになる ( 非奨励オプション。-Hの使用を奨励 ) |
-p | LDAPサーバのポート番号を指定する。指定しない場合、389となる ( 非奨励オプション。-Hの使用を奨励 ) |
-x | 簡易認証設定 |
-D | LDAPサーバの認証に使うDN ( バインドDN ) を指定する。指定しない場合は匿名接続となる。 |
-w | LDAPサーバの認証に使うDNのパスワードを指定する。 |
-W | LDAPサーバの認証に使うDNのパスワードをプロンプトから入力することを指定する。 |
-f | LDIFテキストフォーマットファイルを標準入力ではなく、指定したファイルから読み込む。 ※ldapdeleteは利用不可 |
ldapsearch
ldapsearch : LDAPエントリを検索する
オプションは次の通りです。
オプション | 説明 |
---|---|
-H | LDAPサーバを参照するURIを指定する。プロトコル、ホスト、ポートのみ指定できる。指定しない場合、ldap |
-h | LDAPサーバを指定する。指定しない場合、ローカルホストになる ( 非奨励オプション。-Hの使用を奨励 ) |
-p | LDAPサーバのポート番号を指定する。指定しない場合、389となる ( 非奨励オプション。-Hの使用を奨励 ) |
-x | 簡易認証設定 |
-D | LDAPサーバの認証に使うDN ( バインドDN ) を指定する。指定しない場合は匿名接続となる。 |
-w | LDAPサーバの認証に使うDNのパスワードを指定する。 |
-W | LDAPサーバの認証に使うDNのパスワードをプロンプトから入力することを指定する。 |
-s [Scope] | 検索範囲を指定します。[Scope]の値は「base」「one」「sub」の3種類です。「base」はBaseDNエントリのみです。「one」はBaseDNエントリ自身と直下のエントリ、「sub」はBaseDN以下全てのエントリを指します。-sに何も指定しなければ「sub」が適用されます。 |
[Filter] | 検索フィ ルタを指定します。例えば全てのエントリを抽出するには「(objectclass=)」を指定します。また、cn属性が「tanaka」で終わるエントリを抽出するには「(cn=*tanaka)」とワイルドカードを指定できます。その他、複数のフィルタを組み合わせたAND検索やOR検索も実行できます。例えばcn属性が「tanaka」で終わり、かつcn属性が「taro」で始 まるエントリを抽出するには「(&(cn=*tanaka)(cn=taro))」とAND検索を表す&を使って複数指定できます。OR検索には「」、否定記号には「!」記号を使います。 |
[Attr] | 表示対象 とする属性を指定します。例えばあるエントリのtelephonenumber属性値を表示対象にする場合はAttrにtelnephoneNumberを指定します。何も指定しなければ全ての属性値が表示されます。 |
-L | 検索結果をLDIFv1フォーマットで表示する |
-LL | 検索結果をコメントのないフォーマットで表示する |
-LLL | 検索結果をコメント無し、LDIFバージョン表示なしで表示する。 |
バックアップ、リストアについて
以下手順を参照します。
・CentOS7でOpenldap構築 - 5.バックアップリストアテスト
最後に
Openldapの仕組みについて簡単に記載しました。他にもLDAPアカウントの命名規則や、どのようにログイン管理、sudo管理するかなど、簡単な設計も決めてから環境構築にとりかかるとよいと思います。
次はLDAPサーバ構築手順となります。
・CentOS7でOpenldap構築 - 2.LDAPサーバ構築手順
関連記事
・CentOS7でOpenldap構築 - 1.Openldapの仕組み
・CentOS7でOpenldap構築 - 2.LDAPサーバ構築手順
・CentOS7でOpenldap構築 - 3.LDAPクライアント設定手順
・CentOS7でOpenldap構築 - 4.LDAPディレクトリ構成例とACLの設定
・CentOS7でOpenldap構築 - 5.バックアップリストアテスト
・CentOS7でOpenldap構築 - 6.パスワード有効期限切れ通知スクリプト