Table of Contents
夏休み中にOpenLDAPの構築復習を行いました。ここでメモしておきます。
1 知識のおさらい
1.1 用語
- LDAP: Lightweight Directory Access Protocol、ディレクトリ・サービス ツリー構造、検索中心としたサービス
- DIT: Directory information Tree、ディレクトリ情報ツリー
- DN: Distinguished Name、ツリーの頂点に向かって全てのエントリを表す主キーのようなもの
- エントリ: LDAPに保存されるデータのこと
- ObjectClass: エントリの種類、エントリにどんな情報を持たせるかの定義、一つエントリに 複数ObjectClasの指定は可能です。また、ObjectClass自身は構造型(Structural)と補助型 (Auxiliary)の2種類があります、各エントリは少なくても1つの構造型ObjectClassに属する 必要があります
1.2 LDAPの役割
- ユーザ情報参照機能
- ユーザ認証機能
1.3 LDAPへ接続時(バインド)の認証方式
- 簡易認証: 接続時のユーザDNに加えてパスワードが平文でLDAPサーバに送られる、そのため SSL/TLSで通信経路の暗号化しておく必要があります。
- SASL認証: Simple Authentication and Security Layer、外部の認証システム(モジュール) に認証処理を委譲する。ただし、LDAP内のエントリのDNと外部認証システムのユーザ識別子 のマッピング定義が必要となります。
1.4 LDAPによるLinuxのログイン認証
- ログイン認証をLDAPサーバに委譲するためにPAMモジュールにpam_ldapを利用します。また、 pam_ldapの仕様上LDAP認証バインド時に簡易認証しかできない。
- LDAPで認証させるために、ログインユーザIDでLDAP認証バインドを行う
認証メカニズム、Linuxサーバでpam_ldapmoモジュールでSSHクライアントから入力されたユーザ IDとパスワードをLDAPサーバに認証バインドを実施する。
userid:akira dn : uid=akira,ou=User,dc=jizai-domain,dc=jp passwd:xxxxxx passwd: xxxxxx +---------------+ +-------------+ +------------+ |SSHクライアント+--------------->| Linuxサーバ +------------------->| LDAPサーバ | +---------------+ ログイン +-------------+ LDAP認証バインド +------------+
1.5 LDAPによるSambaサーバのユーザ認証
認証メカニズム、Sambaサーバは管理者権限でWindows PCから入力されたユーザIDを検索条件で LDAPサーバから該当ユーザのパスワード情報を取得して、比較を行う。
userid:akira rootdn: uid=Manager,dc=jizai-domain,dc=jp passwd:xxxxxx passwd: xxxxxx +---------------+ +-------------+ +------------+ |Windows PC +--------------->| Sambaサーバ +<-------------------| LDAPサーバ | +---------------+ ユーザID +-------------+ 管理者権限で +------------+ パスワード パスワード LDAP認証バインドして、 確認を行う ユーザパスワード情報を取得する
簡易認証時のtcpdumpの結果
1.6 LDAPデータ構造サンプル
ルートエントリ直下の cn=Manager
エントリはrootdnと呼ばれる、LDAPの特権ユーザです。
このユーザでLDAPとバインドすると任意のデータ操作が可能になります。rootdnエントリは
/etc/openaldap/slapd.conf
にて定義される、実際にDITになくてもよいです。
┏━━━━━━━━━━━┓ ┃dc=jizai-domain,dc=jp ┃ ┗━━━━━┳━━━━━┛ ┃ ┏━━━━━━━━━╋━━━━━━━━━━━━━━━━━━━━━━┓ ┃ ┃ ┃ ┏━━━┻━━┓ ┏━━━┻━━━┓ ┏━━━━┻━━━┓ rootdn→┃ cn=Manager ┃ ┃o=Linux Users ┃ ┃ o=Samba Users ┃ ← アプリケーション毎に分ける管理する 特権ユーザ ┗━━━━━━┛ ┗━━━┳━━━┛ ┗━━━━┯━━━┛ ┃ │ ┏━━━━━━┻━━━━━━━┓ │ ┏━━┻━━┓ ┏━━━┻━━┓ Sambaサーバユーザ情報 ┃ou=User ┃ ┃ ou=Group ┃ ┗━━┳━━┛ ┗━━━┳━━┛ ┏━━━┻━━┓ ┏━━━┻━━━┓ ┏━━┻━━┓┏━━┻━━┓ ┏━━┻━━┓ ┏━━┻━━┓ ┃uid=user01┃┃uid=user02┃ ┃cn=group01┃ ┃cn=group02┃ ┗━━━━━┛┗━━━━━┛ ┗━━━━━┛ ┗━━━━━┛ ※ユーザとグループの紐付けはユーザエントリやグループエントリの属性値に表現される。
ルートエントリの定義
dn: dc=jizai-domain,dc=jp dc: jizai-domain ★ dcObjectの属性 o: jizai-domain Corporation ★ organizationの属性 objectClass: dcObject objectClass: organization
rootdnの定義
dn: cn=Manager,dc=jizai-domain,dc=jp cn: Manager objectClass: organizationalRole
Linux系ユーザとSamba系ユーザの親エントリの定義
dn: o=Linux Users,dc=jizai-domain,dc=jp o: Linux Users objectClass: organization dn: o=Smaba Users,dc=jizai-domain,dc=jp o: Smaba Users objectClass: organization
Linuxユーザとグループの親エントリの定義
dn: ou=User,o=Linux Users,dc=jizai-domain,dc=jp ou: User objectClass: organizationalUnit dn: ou=Group,o=Linux Users,dc=jizai-domain,dc=jp ou: Group objectClass: organizationalUnit
Linuxユーザのエントリ定義
# --- user01 --- dn: uid=user01,ou=User,o=Linux Users,dc=jizai-domain,dc=jp uid: user01 ★accountオブジェクトの属性 cn: Test User01 uidNumber: 5001 gidNumber: 3001 homeDirectory: /home/user01 loginShell: /bin/bash userPassword: P@ssw0rd ★パスワードが平文で登録される gecos: Test User No01 ★ユーザのフルネーム shadowLastChange: 0 ★パスワードの最終更新日 shadowMin: 0 ★パスワード変更可能になるまでの日数 shadowMax: 99999 ★パスワードの有効期限日数 shadowWarning: 7 ★パスワード期限切れ警告表示開始日数 objectClass: account ★構造型ObjectClass objectClass: posixAccount ★補助型ObjectClass objectClass: shadowAccount ★補助型ObjectClass # --- user02 --- dn: uid=user02,ou=User,o=Linux Users,dc=jizai-domain,dc=jp uid: user02 cn: Test User02 uidNumber: 5002 gidNumber: 3002 homeDirectory: /home/user02 loginShell: /bin/bash userPassword: {SSHA}KpJwwA2Sbt29GGNZxdasq5XRml6J5q2Z ★Salted SHA-1方式で暗号化された gecos: Test User No02 ★ユーザのフルネーム shadowLastChange: 0 ★パスワードの最終更新日、0で指定すると初回ログイン時にパスワードの変更を求めます shadowMin: 0 ★パスワード変更可能になるまでの日数 shadowMax: 99999 ★パスワードの有効期限日数 shadowWarning: 7 ★パスワード期限切れ警告表示開始日数 objectClass: account objectClass: posixAccount objectClass: shadowAccount
userPasswordの暗号化文字列は次のコマンドで得ることができる。
$ slappasswd -h {SSHA} -s P@ssw0rd {SSHA}KpJwwA2Sbt29GGNZxdasq5XRml6J5q2Z $ slappasswd -h {SMD5} -s P@ssw0rd {SMD5}AIZvIadIpJbgKPQ7DtjZ4U6xBVY=
-h
の後ろに暗号化方式を指定する。j
Linuxグループのエントリ定義
#--- group01 --- dn: cn=group01,ou=Group,o=Linux Users,dc=jizai-domain,dc=jp cn: group01 gidNumber: 3001 objectClass: posixGroup #--- group02 --- dn: cn=group02,ou=Group,o=Linux Users,dc=jizai-domain,dc=jp cn: group02 gidNumber: 3002 memberUid: 5001 ★group02をuser01のセカンドグループとして使う objectClass: posixGroup
1.7 よく使用するObjectClass
スキーマ | ObjectClass | 用途 |
---|---|---|
core | dcObject | ルートの定義 |
organization | アプリケーションの区分に使用 | |
organizationalRole | rootdn定義に使用 | |
organizationalUnit | ユーザ情報とグループ情報の区別に使用 | |
consine | account | ユーザID定義に使用する |
nis | posixAccount | POSIXユーザ定義に使用する |
shadowAccount | パスワード定義に使用する | |
posixGroup | グループ定義に使用する |
ユーザのプライマリグループはposixAccountのgidNumber属性にて指定する、セカンドグ ループはposixGroupのmemberUidにて指定する。posixGroupのmemberUidは複数指定可能。
そのなか汎用的な属性
属性名 | 説明 |
---|---|
dc | Domain Component/ ドメイン名の要素 |
o | Organization/ 組織名 |
ou | OrganizationUnit/ 部署名 |
cn | Common Name/ 氏名 |
1.8 ldapsearchの使い方
アクセスコントロール設定でユーザ毎に検索結果の絞り込みが可能です。 以下は簡易認証を用いた検索のコマンド書式です。
$ ldapsearch -x -D <バインドDN> -b <サーチベース> -s <スコープ> -w <パスワード> <検索フィルタ> <取得する属性>
-x
簡易認証でバインドする-D
認証バインドで使用するDNの指定-b
サーチベース、検索の起点とするエントリの指定-s
検索スコープの指定-w
簡易認証のパスワード指定、-W
(大文字)で指定した場合、対話式でパスワードの が求められる
指定可能な検索スコープ
スコープ | 説明 |
---|---|
base | サーチベース自身に対して検索する |
one | サーチベース直下のエントリを検索する |
sub | サーチベースを含むその下の全てのエントリを検索する |
children | subの範囲からサーチベースを除く |
検索フィルタの組み合わせ方法
記法 | 意味 |
---|---|
(&(A)(B)) | A and B |
(|(A)(B)) | A or B |
(!(A)) | not A |
user01
の定義を検索する例
$ ldapsearch -x -D "cn=Manager,dc=jizai-domain,dc=jp" -b "dc=jizai-domain,dc=jp" "uid=user01" -W -LLL Enter LDAP Password: dn: uid=user01,ou=User,dc=jizai-domain,dc=jp uid: user01 cn: Test User 01 objectClass: account objectClass: posixAccount objectClass: top userPassword:: dXNlcjAx ★Base64形式で表示される loginShell: /bin/bash uidNumber: 5001 gidNumber: 3001 homeDirectory: /home/user01
-LLL
オプションは検索結果以外の余計な除法を落とすオプションです。
匿名で検索する例
$ ldapsearch -x -b "dc=jizai-domain,dc=jp" "(cn=group01)" -LLL dn: cn=group01,ou=Group,dc=jizai-domain,dc=jp objectClass: posixGroup cn: group01 gidNumber: 3001
1.9 ldapaddの使い方
ldapadd
エントリ登録するためのコマンドです。以下はLDAPに新規登録するエントリの定義ファ
イル 01.base.ldif
を -f
オプションで指定して登録する例です。
$ ldapadd -x -D "cn=Manager,dc=jizai-domain,dc=jp" -W -f 01.base.ldif Enter LDAP Password: adding new entry "o=Linux Users,dc=jizai-domain,dc=jp" adding new entry "o=Smaba Users,dc=jizai-domain,dc=jp" adding new entry "ou=User,o=Linux Users,dc=jizai-domain,dc=jp" adding new entry "ou=Group,o=Linux Users,dc=jizai-domain,dc=jp"
ldapadd
コマンド実行時のログ
2014-08-13T14:43:35+09:00 pipi local4 debug slapd[172]: conn=1044 fd=10 ACCEPT from IP=[::1]:58644 (IP=[::]:389) 2014-08-13T14:43:35+09:00 pipi local4 debug slapd[172]: conn=1044 op=0 BIND dn="cn=Manager,dc=jizai-domain,dc=jp" method=128 2014-08-13T14:43:35+09:00 pipi local4 debug slapd[172]: conn=1044 op=0 BIND dn="cn=Manager,dc=jizai-domain,dc=jp" mech=SIMPLE ssf=0 2014-08-13T14:43:35+09:00 pipi local4 debug slapd[172]: conn=1044 op=0 RESULT tag=97 err=0 text= 2014-08-13T14:43:35+09:00 pipi local4 debug slapd[172]: conn=1044 op=1 ADD dn="o=Linux Users,dc=jizai-domain,dc=jp" 2014-08-13T14:43:35+09:00 pipi local4 debug slapd[172]: conn=1044 op=2 ADD dn="o=Smaba Users,dc=jizai-domain,dc=jp" 2014-08-13T14:43:35+09:00 pipi local4 debug slapd[172]: conn=1044 op=1 RESULT tag=105 err=0 text= 2014-08-13T14:43:35+09:00 pipi local4 debug slapd[172]: conn=1044 op=3 ADD dn="ou=User,o=Linux Users,dc=jizai-domain,dc=jp" 2014-08-13T14:43:35+09:00 pipi local4 debug slapd[172]: conn=1044 op=2 RESULT tag=105 err=0 text= 2014-08-13T14:43:35+09:00 pipi local4 debug slapd[172]: conn=1044 op=4 ADD dn="ou=Group,o=Linux Users,dc=jizai-domain,dc=jp" 2014-08-13T14:43:35+09:00 pipi local4 debug slapd[172]: conn=1044 op=3 RESULT tag=105 err=0 text= 2014-08-13T14:43:35+09:00 pipi local4 debug slapd[172]: conn=1044 op=5 UNBIND 2014-08-13T14:43:35+09:00 pipi local4 debug slapd[172]: conn=1044 op=4 RESULT tag=105 err=0 text= 2014-08-13T14:43:35+09:00 pipi local4 debug slapd[172]: conn=1044 fd=10 closed
1.10 ldapdeleteの使い方
ldapdelete
コマンドでLDAPに登録されたエントリの削除することができる。 -r
オプショ
ンでサブツリーを含めて削除することも可能です。
$ ldapdelete -x -W -D "cn=Manager,dc=jizai-domain,dc=jp" "ou=User,dc=jizai-domain,dc=jp" -r
以下は実行時のログです。
2014-08-13T00:05:27+09:00 pipi local4 debug slapd[172]: conn=1027 fd=10 ACCEPT from IP=[::1]:58548 (IP=[::]:389) 2014-08-13T00:05:27+09:00 pipi local4 debug slapd[172]: conn=1027 op=0 BIND dn="cn=Manager,dc=jizai-domain,dc=jp" method=128 2014-08-13T00:05:27+09:00 pipi local4 debug slapd[172]: conn=1027 op=0 BIND dn="cn=Manager,dc=jizai-domain,dc=jp" mech=SIMPLE ssf=0 2014-08-13T00:05:27+09:00 pipi local4 debug slapd[172]: conn=1027 op=0 RESULT tag=97 err=0 text= 2014-08-13T00:05:27+09:00 pipi local4 debug slapd[172]: conn=1027 op=1 SRCH base="ou=User,dc=jizai-domain,dc=jp" scope=1 deref=0 filter="(objectClass=*)" 2014-08-13T00:05:27+09:00 pipi local4 debug slapd[172]: conn=1027 op=1 SRCH attr=1.1 2014-08-13T00:05:28+09:00 pipi local4 debug slapd[172]: conn=1027 op=2 SRCH base="uid=user01,ou=User,dc=jizai-domain,dc=jp" scope=1 deref=0 filter="(objectClass=*)" 2014-08-13T00:05:28+09:00 pipi local4 debug slapd[172]: conn=1027 op=2 SRCH attr=1.1 2014-08-13T00:05:28+09:00 pipi local4 debug slapd[172]: conn=1027 op=2 SEARCH RESULT tag=101 err=0 nentries=0 text= 2014-08-13T00:05:28+09:00 pipi local4 debug slapd[172]: conn=1027 op=1 SEARCH RESULT tag=101 err=0 nentries=5 text= 2014-08-13T00:05:28+09:00 pipi local4 debug slapd[172]: conn=1027 op=3 DEL dn="uid=user01,ou=User,dc=jizai-domain,dc=jp" ★削除さエントリ 2014-08-13T00:05:28+09:00 pipi local4 debug slapd[172]: conn=1027 op=3 RESULT tag=107 err=0 text= 2014-08-13T00:05:28+09:00 pipi local4 debug slapd[172]: conn=1027 op=4 SRCH base="uid=user02,ou=User,dc=jizai-domain,dc=jp" scope=1 deref=0 filter="(objectClass=*)" 2014-08-13T00:05:28+09:00 pipi local4 debug slapd[172]: conn=1027 op=4 SRCH attr=1.1 2014-08-13T00:05:28+09:00 pipi local4 debug slapd[172]: conn=1027 op=4 SEARCH RESULT tag=101 err=0 nentries=0 text= 2014-08-13T00:05:28+09:00 pipi local4 debug slapd[172]: conn=1027 op=5 DEL dn="uid=user02,ou=User,dc=jizai-domain,dc=jp" 2014-08-13T00:05:28+09:00 pipi local4 debug slapd[172]: conn=1027 op=5 RESULT tag=107 err=0 text= 2014-08-13T00:05:28+09:00 pipi local4 debug slapd[172]: conn=1027 op=6 SRCH base="uid=user03,ou=User,dc=jizai-domain,dc=jp" scope=1 deref=0 filter="(objectClass=*)" 2014-08-13T00:05:28+09:00 pipi local4 debug slapd[172]: conn=1027 op=6 SRCH attr=1.1 2014-08-13T00:05:28+09:00 pipi local4 debug slapd[172]: conn=1027 op=7 DEL dn="uid=user03,ou=User,dc=jizai-domain,dc=jp" 2014-08-13T00:05:28+09:00 pipi local4 debug slapd[172]: conn=1027 op=6 SEARCH RESULT tag=101 err=0 nentries=0 text= 2014-08-13T00:05:28+09:00 pipi local4 debug slapd[172]: conn=1027 op=8 SRCH base="uid=hoge01,ou=User,dc=jizai-domain,dc=jp" scope=1 deref=0 filter="(objectClass=*)" 2014-08-13T00:05:28+09:00 pipi local4 debug slapd[172]: conn=1027 op=8 SRCH attr=1.1 2014-08-13T00:05:28+09:00 pipi local4 debug slapd[172]: conn=1027 op=7 RESULT tag=107 err=0 text= 2014-08-13T00:05:28+09:00 pipi local4 debug slapd[172]: conn=1027 op=9 DEL dn="uid=hoge01,ou=User,dc=jizai-domain,dc=jp" 2014-08-13T00:05:28+09:00 pipi local4 debug slapd[172]: conn=1027 op=8 SEARCH RESULT tag=101 err=0 nentries=0 text= 2014-08-13T00:05:28+09:00 pipi local4 debug slapd[172]: conn=1027 op=10 SRCH base="uid=hoge02,ou=User,dc=jizai-domain,dc=jp" scope=1 deref=0 filter="(objectClass=*)" 2014-08-13T00:05:28+09:00 pipi local4 debug slapd[172]: conn=1027 op=10 SRCH attr=1.1 2014-08-13T00:05:28+09:00 pipi local4 debug slapd[172]: conn=1027 op=10 SEARCH RESULT tag=101 err=0 nentries=0 text= 2014-08-13T00:05:28+09:00 pipi local4 debug slapd[172]: conn=1027 op=9 RESULT tag=107 err=0 text= 2014-08-13T00:05:28+09:00 pipi local4 debug slapd[172]: conn=1027 op=11 DEL dn="uid=hoge02,ou=User,dc=jizai-domain,dc=jp" 2014-08-13T00:05:28+09:00 pipi local4 debug slapd[172]: conn=1027 op=11 RESULT tag=107 err=0 text= 2014-08-13T00:05:28+09:00 pipi local4 debug slapd[172]: conn=1027 op=12 DEL dn="ou=User,dc=jizai-domain,dc=jp" 2014-08-13T00:05:28+09:00 pipi local4 debug slapd[172]: conn=1027 op=13 UNBIND 2014-08-13T00:05:28+09:00 pipi local4 debug slapd[172]: conn=1027 op=12 RESULT tag=107 err=0 text= 2014-08-13T00:05:28+09:00 pipi local4 debug slapd[172]: conn=1027 fd=10 closed
1.11 ldapmodifyの使い方
modify_top.ldif
に変更内容を記述する
$ cat modify_top.ldif dn: dc=jizai-domain,dc=jp changetype: modify replace: o ★変更対象属性 o: jizai-domain Corporation ★変更内容 - ★複数変更対象間のセパレーター add: description description: this is my first test suffix
ldapmodify
コマンドで変更を実施する
$ ldapmodify -x -W -D "cn=Manager,dc=jizai-domain,dc=jp" -f modify_top.ldif Enter LDAP Password: modifying entry "dc=jizai-domain,dc=jp"
以下は変更時の動作ログです。
2014-08-13T00:20:58+09:00 pipi local4 debug slapd[172]: conn=1036 fd=10 ACCEPT from IP=[::1]:58557 (IP=[::]:389) 2014-08-13T00:20:58+09:00 pipi local4 debug slapd[172]: conn=1036 op=0 BIND dn="cn=Manager,dc=jizai-domain,dc=jp" method=128 2014-08-13T00:20:58+09:00 pipi local4 debug slapd[172]: conn=1036 op=0 BIND dn="cn=Manager,dc=jizai-domain,dc=jp" mech=SIMPLE ssf=0 2014-08-13T00:20:58+09:00 pipi local4 debug slapd[172]: conn=1036 op=0 RESULT tag=97 err=0 text= 2014-08-13T00:20:58+09:00 pipi local4 debug slapd[172]: conn=1036 op=1 MOD dn="dc=jizai-domain,dc=jp" 2014-08-13T00:20:58+09:00 pipi local4 debug slapd[172]: conn=1036 op=1 MOD attr=o description ★変更や追加された属性 2014-08-13T00:20:58+09:00 pipi local4 debug slapd[172]: conn=1036 op=1 RESULT tag=103 err=0 text= 2014-08-13T00:20:58+09:00 pipi local4 debug slapd[172]: conn=1036 op=2 UNBIND 2014-08-13T00:20:58+09:00 pipi local4 debug slapd[172]: conn=1036 fd=10 closed
1.12 slapindexの使い方
slapindex
は slapd.conf
設定ファイルに定義されたインデックスメタ情報を元にインデッ
クスの作成/再作成をするコマンドです。このコマンドを実行時に slapd
デーモンプロセス
を停止しておく必要があります。
akira@pipi ~]$ sudo systemctl stop slapd [sudo] password for akira: [akira@pipi ~]$ sudo -u ldap slapindex -b dc=jizai-domain,dc=jp -v 53ef16ba bdb_monitor_db_open: monitoring disabled; configure monitor database to enable indexing id=00000001 indexing id=00000002 indexing id=00000003 indexing id=00000004 indexing id=00000005 indexing id=00000006 indexing id=00000007 indexing id=00000008 indexing id=00000009 indexing id=0000000a indexing id=0000000b indexing id=0000000c [akira@pipi ~]$ sudo systemctl start slapd [akira@pipi ~]$
2 環境構成
3 OpenLDAPのインストール
sudo pacman -S openldap
でインストールを行うと、openldapパッケージが以下の形でシス
テムに展開される。
$ pacman -Ql openldap openldap /etc/ openldap /etc/openldap/ openldap /etc/openldap/DB_CONFIG.example openldap /etc/openldap/schema/ ★ 予め用意されたスキーマ openldap /etc/openldap/schema/README openldap /etc/openldap/schema/collective.ldif openldap /etc/openldap/schema/collective.schema openldap /etc/openldap/schema/corba.ldif openldap /etc/openldap/schema/corba.schema openldap /etc/openldap/schema/core.ldif openldap /etc/openldap/schema/core.schema openldap /etc/openldap/schema/cosine.ldif openldap /etc/openldap/schema/cosine.schema openldap /etc/openldap/schema/duaconf.ldif openldap /etc/openldap/schema/duaconf.schema openldap /etc/openldap/schema/dyngroup.ldif openldap /etc/openldap/schema/dyngroup.schema openldap /etc/openldap/schema/inetorgperson.ldif openldap /etc/openldap/schema/inetorgperson.schema openldap /etc/openldap/schema/java.ldif openldap /etc/openldap/schema/java.schema openldap /etc/openldap/schema/ldapns.schema openldap /etc/openldap/schema/misc.ldif openldap /etc/openldap/schema/misc.schema openldap /etc/openldap/schema/nis.ldif openldap /etc/openldap/schema/nis.schema openldap /etc/openldap/schema/openldap.ldif openldap /etc/openldap/schema/openldap.schema openldap /etc/openldap/schema/pmi.ldif openldap /etc/openldap/schema/pmi.schema openldap /etc/openldap/schema/ppolicy.ldif openldap /etc/openldap/schema/ppolicy.schema openldap /etc/openldap/slapd.conf ★LDAP設定ファイル openldap /etc/openldap/slapd.d/ openldap /etc/openldap/slapd.ldif openldap /usr/ openldap /usr/bin/ openldap /usr/bin/ldapadd ★エントリの登録に使う openldap /usr/bin/ldapcompare openldap /usr/bin/ldapdelete ★エントリの削除に使う openldap /usr/bin/ldapexop openldap /usr/bin/ldapmodify ★エントリ属性の変更使う openldap /usr/bin/ldapmodrdn openldap /usr/bin/ldappasswd openldap /usr/bin/ldapsearch ★エントリの検索に使う openldap /usr/bin/ldapurl openldap /usr/bin/ldapwhoami openldap /usr/bin/slapacl openldap /usr/bin/slapadd openldap /usr/bin/slapauth openldap /usr/bin/slapcat openldap /usr/bin/slapd ★デーモンプロセスのバイナリ → stand-alone LDAP daemon (server) openldap /usr/bin/slapdn openldap /usr/bin/slapindex ★インデックス作成/再作成 openldap /usr/bin/slappasswd openldap /usr/bin/slapschema openldap /usr/bin/slaptest ★設定ファイルの検証に使う openldap /usr/lib/ openldap /usr/lib/openldap/ openldap /usr/lib/openldap/accesslog-2.4.so.2 openldap /usr/lib/openldap/accesslog-2.4.so.2.10.2 openldap /usr/lib/openldap/accesslog.so openldap /usr/lib/openldap/auditlog-2.4.so.2 openldap /usr/lib/openldap/auditlog-2.4.so.2.10.2 openldap /usr/lib/openldap/auditlog.so openldap /usr/lib/openldap/collect-2.4.so.2 openldap /usr/lib/openldap/collect-2.4.so.2.10.2 openldap /usr/lib/openldap/collect.so openldap /usr/lib/openldap/constraint-2.4.so.2 openldap /usr/lib/openldap/constraint-2.4.so.2.10.2 openldap /usr/lib/openldap/constraint.so openldap /usr/lib/openldap/dds-2.4.so.2 openldap /usr/lib/openldap/dds-2.4.so.2.10.2 openldap /usr/lib/openldap/dds.so openldap /usr/lib/openldap/deref-2.4.so.2 openldap /usr/lib/openldap/deref-2.4.so.2.10.2 openldap /usr/lib/openldap/deref.so openldap /usr/lib/openldap/dyngroup-2.4.so.2 openldap /usr/lib/openldap/dyngroup-2.4.so.2.10.2 openldap /usr/lib/openldap/dyngroup.so openldap /usr/lib/openldap/dynlist-2.4.so.2 openldap /usr/lib/openldap/dynlist-2.4.so.2.10.2 openldap /usr/lib/openldap/dynlist.so openldap /usr/lib/openldap/memberof-2.4.so.2 openldap /usr/lib/openldap/memberof-2.4.so.2.10.2 openldap /usr/lib/openldap/memberof.so openldap /usr/lib/openldap/nssov.so openldap /usr/lib/openldap/nssov.so.0 openldap /usr/lib/openldap/nssov.so.0.0.0 openldap /usr/lib/openldap/pcache-2.4.so.2 openldap /usr/lib/openldap/pcache-2.4.so.2.10.2 openldap /usr/lib/openldap/pcache.so openldap /usr/lib/openldap/ppolicy-2.4.so.2 openldap /usr/lib/openldap/ppolicy-2.4.so.2.10.2 openldap /usr/lib/openldap/ppolicy.so openldap /usr/lib/openldap/refint-2.4.so.2 openldap /usr/lib/openldap/refint-2.4.so.2.10.2 openldap /usr/lib/openldap/refint.so openldap /usr/lib/openldap/retcode-2.4.so.2 openldap /usr/lib/openldap/retcode-2.4.so.2.10.2 openldap /usr/lib/openldap/retcode.so openldap /usr/lib/openldap/rwm-2.4.so.2 openldap /usr/lib/openldap/rwm-2.4.so.2.10.2 openldap /usr/lib/openldap/rwm.so openldap /usr/lib/openldap/seqmod-2.4.so.2 openldap /usr/lib/openldap/seqmod-2.4.so.2.10.2 openldap /usr/lib/openldap/seqmod.so openldap /usr/lib/openldap/sssvlv-2.4.so.2 openldap /usr/lib/openldap/sssvlv-2.4.so.2.10.2 openldap /usr/lib/openldap/sssvlv.so openldap /usr/lib/openldap/syncprov-2.4.so.2 openldap /usr/lib/openldap/syncprov-2.4.so.2.10.2 openldap /usr/lib/openldap/syncprov.so openldap /usr/lib/openldap/translucent-2.4.so.2 openldap /usr/lib/openldap/translucent-2.4.so.2.10.2 openldap /usr/lib/openldap/translucent.so openldap /usr/lib/openldap/unique-2.4.so.2 openldap /usr/lib/openldap/unique-2.4.so.2.10.2 openldap /usr/lib/openldap/unique.so openldap /usr/lib/openldap/valsort-2.4.so.2 openldap /usr/lib/openldap/valsort-2.4.so.2.10.2 openldap /usr/lib/openldap/valsort.so openldap /usr/lib/slapd openldap /usr/lib/systemd/ openldap /usr/lib/systemd/system/ openldap /usr/lib/systemd/system/slapd.service ★サービス定義ファイル openldap /usr/lib/tmpfiles.d/ openldap /usr/lib/tmpfiles.d/slapd.conf openldap /usr/share/ openldap /usr/share/licenses/ openldap /usr/share/licenses/openldap/ openldap /usr/share/licenses/openldap/LICENSE ★ライセンスファイル openldap /usr/share/man/ openldap /usr/share/man/man1/ openldap /usr/share/man/man1/ldapadd.1.gz openldap /usr/share/man/man1/ldapcompare.1.gz openldap /usr/share/man/man1/ldapdelete.1.gz openldap /usr/share/man/man1/ldapexop.1.gz openldap /usr/share/man/man1/ldapmodify.1.gz openldap /usr/share/man/man1/ldapmodrdn.1.gz openldap /usr/share/man/man1/ldappasswd.1.gz openldap /usr/share/man/man1/ldapsearch.1.gz openldap /usr/share/man/man1/ldapurl.1.gz openldap /usr/share/man/man1/ldapwhoami.1.gz openldap /usr/share/man/man5/ openldap /usr/share/man/man5/ldif.5.gz openldap /usr/share/man/man5/slapd-bdb.5.gz openldap /usr/share/man/man5/slapd-config.5.gz openldap /usr/share/man/man5/slapd-dnssrv.5.gz openldap /usr/share/man/man5/slapd-hdb.5.gz openldap /usr/share/man/man5/slapd-ldap.5.gz openldap /usr/share/man/man5/slapd-ldbm.5.gz openldap /usr/share/man/man5/slapd-ldif.5.gz openldap /usr/share/man/man5/slapd-mdb.5.gz openldap /usr/share/man/man5/slapd-meta.5.gz openldap /usr/share/man/man5/slapd-monitor.5.gz openldap /usr/share/man/man5/slapd-ndb.5.gz openldap /usr/share/man/man5/slapd-null.5.gz openldap /usr/share/man/man5/slapd-passwd.5.gz openldap /usr/share/man/man5/slapd-perl.5.gz openldap /usr/share/man/man5/slapd-relay.5.gz openldap /usr/share/man/man5/slapd-shell.5.gz openldap /usr/share/man/man5/slapd-sock.5.gz openldap /usr/share/man/man5/slapd-sql.5.gz openldap /usr/share/man/man5/slapd.access.5.gz openldap /usr/share/man/man5/slapd.backends.5.gz openldap /usr/share/man/man5/slapd.conf.5.gz openldap /usr/share/man/man5/slapd.overlays.5.gz openldap /usr/share/man/man5/slapd.plugin.5.gz openldap /usr/share/man/man5/slapo-accesslog.5.gz openldap /usr/share/man/man5/slapo-auditlog.5.gz openldap /usr/share/man/man5/slapo-chain.5.gz openldap /usr/share/man/man5/slapo-collect.5.gz openldap /usr/share/man/man5/slapo-constraint.5.gz openldap /usr/share/man/man5/slapo-dds.5.gz openldap /usr/share/man/man5/slapo-dyngroup.5.gz openldap /usr/share/man/man5/slapo-dynlist.5.gz openldap /usr/share/man/man5/slapo-memberof.5.gz openldap /usr/share/man/man5/slapo-pbind.5.gz openldap /usr/share/man/man5/slapo-pcache.5.gz openldap /usr/share/man/man5/slapo-ppolicy.5.gz openldap /usr/share/man/man5/slapo-refint.5.gz openldap /usr/share/man/man5/slapo-retcode.5.gz openldap /usr/share/man/man5/slapo-rwm.5.gz openldap /usr/share/man/man5/slapo-sock.5.gz openldap /usr/share/man/man5/slapo-sssvlv.5.gz openldap /usr/share/man/man5/slapo-syncprov.5.gz openldap /usr/share/man/man5/slapo-translucent.5.gz openldap /usr/share/man/man5/slapo-unique.5.gz openldap /usr/share/man/man5/slapo-valsort.5.gz openldap /usr/share/man/man8/ openldap /usr/share/man/man8/slapacl.8.gz openldap /usr/share/man/man8/slapadd.8.gz openldap /usr/share/man/man8/slapauth.8.gz openldap /usr/share/man/man8/slapcat.8.gz openldap /usr/share/man/man8/slapd.8.gz openldap /usr/share/man/man8/slapdn.8.gz openldap /usr/share/man/man8/slapindex.8.gz openldap /usr/share/man/man8/slappasswd.8.gz openldap /usr/share/man/man8/slapschema.8.gz openldap /usr/share/man/man8/slaptest.8.gz openldap /var/ openldap /var/lib/ openldap /var/lib/openldap/ openldap /var/lib/openldap/openldap-data/ ★LDAPに保存するデータがBerkeley DB形式でここで管理される openldap /var/lib/openldap/openldap-data/DB_CONFIG.example ★データ保管バックエンドBerkeley DBの設定ファイルテンプレート
また、 slapd
デーモンプロセスを動かすユーザとグループ ldap
が自動的に
/etc/passwd
と /etc/group
に登録される。
★ldapユーザ $ cat /etc/passwd | grep ldap ldap:x:439:439::/var/lib/openldap:/bin/false ★ldapグループ $ cat /etc/group | grep ldap ldap:x:439:
4 OpenLDAPサーバ設定と起動
OpenLDAPのサーバ設定情報は基本的 /etc/openldap/slapd.conf
に記載される。
この設定ファイルは主に以下の情報を定義します。
- OpenLDAPに使用するスキーマファイルの指定
- ルートエントリとrootdnの定義
- インデックスの定義(検索を向上するための設定)
- アクセスコントロール
- SSL/TLS通信暗号化時の設定情報
- パスワード暗号化方式の指定
以下は /etc/openldap/slapd.conf
設定例です.
# # See slapd.conf(5) for details on configuration options. # This file should NOT be world readable. # ####################################################################### # 使用するスキーマファイルのインクルード ####################################################################### include /etc/openldap/schema/core.schema include /etc/openldap/schema/cosine.schema include /etc/openldap/schema/nis.schema include /etc/openldap/schema/inetorgperson.schema include /etc/openldap/schema/postfix.schema # Define global ACLs to disable default read access. # Do not enable referrals until AFTER you have a working directory # service AND an understanding of referrals. #referral ldap://root.openldap.org pidfile /run/openldap/slapd.pid argsfile /run/openldap/slapd.args # Load dynamic backend modules: # modulepath /usr/lib/openldap # moduleload back_bdb.la # moduleload back_hdb.la # moduleload back_ldap.la # Sample security restrictions # Require integrity protection (prevent hijacking) # Require 112-bit (3DES or better) encryption for updates # Require 63-bit encryption for simple bind # security ssf=1 update_ssf=112 simple_bind=64 ####################################################################### # アクセスコントロール ####################################################################### # Sample access control policy: # Root DSE: allow anyone to read it # Subschema (sub)entry DSE: allow anyone to read it # Other DSEs: # Allow self write access # Allow authenticated users read access # Allow anonymous users to authenticate # Directives needed to implement policy: # access to dn.base="" by * read # access to dn.base="cn=Subschema" by * read # access to * # by self write # by users read # by anonymous auth # # if no access controls are present, the default policy # allows anyone and everyone to read anything but restricts # updates to rootdn. (e.g., "access to * by * read") # # rootdn can always read and write EVERYTHING! #ユーザが自分のパスワード変更できるようにアクセス権を設定 access to attrs=userPassword by dn="cn=Manager,dc=jizai-domain,dc=jp" write by self write by anonymous auth ★簡易認証では一度匿名でバンドしてuserPassword属性による認証を行うため by * none #管理者は書き込み可能、その他のユーザは読み取り専用 access to * by dn="cn=Manager,dc=jizai-domain,dc=jp" write by self write by * read ####################################################################### # BDB database definitions (ルートエントリとrootdnの定義) ####################################################################### database bdb suffix "dc=jizai-domain,dc=jp" ★ルートエントリの定義 rootdn "cn=Manager,dc=jizai-domain,dc=jp" ★rootdnの定義 # Cleartext passwords, especially for the rootdn, should # be avoid. See slappasswd(8) and slapd.conf(5) for details. # Use of strong authentication encouraged. rootpw {SSHA}mMRwA4mPL7hIet11pVaXdK1AaV49J7Iy # The database directory MUST exist prior to running slapd AND # should only be accessible by the slapd and slap tools. # Mode 700 recommended. directory /var/lib/openldap/jizai-domain ★BDBファイル格納先の指定、ディレクトリを予め作成してお必要があります ####################################################################### # インデックスの定義 ####################################################################### # Indices to maintain index objectClass eq,pres ★eq: 属性値が一致する index uidNumber,gidNumber,loginShell eq,pres ★pres: 属性が存在する index uid,memberUid eq,pres,sub ★sub: 属性値の一部が一致する index ou,cn,mail,surname,givenname eq,pres,sub index nisMapName,nisMapEntry eq,pres,sub ####################################################################### # SSL/TLS通信暗号化 ####################################################################### ####################################################################### # パスワード暗号化方式 ####################################################################### password-hash {SSHA} ★パスワード属性値の暗号化方式
設定ファイル編集完了後、director項目で指定したディレクトリを ldap
ユーザ権限で作成しましょう。
$ sudo -u ldap mkdir /var/lib/openldap/jizai-domain
またこのディレクトリの直下にDBDのパラメータファイル DB_CONFIG
を予め定義しましょう。
$ sudo -u ldap touch /var/lib/openldap/jizai-domain/DB_CONFIG $ sudo -u ldap cat /var/lib/openldap/jizai-domain/DB_CONFIG # $OpenLDAP$ # Example DB_CONFIG file for use with slapd(8) BDB/HDB databases. # # See the Oracle Berkeley DB documentation # <http://www.oracle.com/technology/documentation/berkeley-db/db/ref/env/db_config.html> # for detail description of DB_CONFIG syntax and semantics. # # Hints can also be found in the OpenLDAP Software FAQ # <http://www.openldap.org/faq/index.cgi?file=2> # in particular: # <http://www.openldap.org/faq/index.cgi?file=1075> # Note: most DB_CONFIG settings will take effect only upon rebuilding # the DB environment. # one 0.25 GB cache set_cachesize 0 268435456 1 # Data Directory #set_data_dir db # Transaction Log settings set_lg_regionmax 262144 set_lg_bsize 2097152 #set_lg_dir logs set_flags DB_LOG_AUTOREMOVE # Note: special DB_CONFIG flags are no longer needed for "quick" # slapadd(8) or slapindex(8) access (see their -q option).
サービスを起動する前に、=slaptest= コマンドで設定ファイルの文法検証を行いましょう。
$ sudo -u ldap slaptest /etc/openldap/slapd.conf: line 94: index attribute "givename" undefined slaptest: bad configuration file! ★文法検証NGの場合、このメッセージが表示される。
初回起動前に id2entry.bdb
ファイルがないため、検証時に以下のようなメッセージが表示される。
これは設定ファイルの問題ではありません。気にせずに前に進みましょう。
$ sudo -u ldap slaptest 53eb0121 bdb_db_open: database "dc=jizai-domain,dc=jp": db_open(/var/lib/openldap/jizai-domain/id2entry.bdb) failed: No such file or directory (2). 53eb0121 backend_startup_one (type=bdb, suffix="dc=jizai-domain,dc=jp"): bi_db_open failed! (2) slap_startup failed (test would succeed using the -u switch) ★-uオプションでdry-runモードで実行すると警告がなくなる $ sudo -u ldap slaptest -u config file testing succeeded $
いよいよ、サービスを起動します。
★systemctlでサービスを起動します $ sudo systemctl start slapd.service ★ログを確認する $ sudo tail -f /var/log/everything.log 2014-08-13T15:10:24+09:00 pipi daemon info systemd[1]: Starting OpenLDAP server daemon... 2014-08-13T15:10:25+09:00 pipi local4 debug slapd[9780]: @(#) $OpenLDAP: slapd 2.4.39 (Feb 2 2014 15:15:20) $ nobody@root-armv6-copy:/build/openldap/src/openldap-2.4.39/servers/slapd 2014-08-13T15:10:25+09:00 pipi local4 debug slapd[9781]: bdb_monitor_db_open: monitoring disabled; configure monitor database to enable 2014-08-13T15:10:25+09:00 pipi local4 debug slapd[9781]: slapd starting 2014-08-13T15:10:25+09:00 pipi daemon info systemd[1]: Started OpenLDAP server daemon.
正常に起動された感じですね。 monitoring disabled
部分が気にされるかも知れないが、こ
れはOpenLDAPのモニタ機能が無効化の状態で起動されたのことです。今度機会があれば、モニ
タ機能に関して取り上げたいと思います。
試しにrootdnでバインドしてldapsearchを実行してみましょう。
$ ldapsearch -x -W -D "cn=Manager,dc=jizai-domain,dc=jp" -b "dc=jizai-domain,dc=jp" Enter LDAP Password: # extended LDIF # # LDAPv3 # base <dc=jizai-domain,dc=jp> with scope subtree # filter: (objectclass=*) # requesting: ALL # # search result search: 2 result: 32 No such object # numResponses: 1 $
エントリが登録されていないため空の検索結果が表示されましたね。 また、director項目で指定したディレクトリに自動的にDBDファイルが作成される。
$ sudo -u ldap ls -al /var/lib/openldap/jizai-domain total 14264 drwx------ 2 ldap ldap 4096 Aug 13 15:10 . drwx------ 4 ldap ldap 4096 Aug 13 14:51 .. -rwx------ 1 ldap ldap 874 Aug 13 14:59 DB_CONFIG -rw------- 1 ldap ldap 2310144 Aug 13 15:29 __db.001 -rw------- 1 ldap ldap 12861440 Aug 13 15:29 __db.002 -rw------- 1 ldap ldap 1490944 Aug 13 15:29 __db.003 -rw-r--r-- 1 ldap ldap 4096 Aug 13 15:10 alock -rw------- 1 ldap ldap 8192 Aug 13 15:10 dn2id.bdb -rw------- 1 ldap ldap 32768 Aug 13 15:10 id2entry.bdb -rw------- 1 ldap ldap 10485760 Aug 13 15:10 log.0000000001
続いて、 1.6 で説明したデータを登録してましょう。
$ ldapadd -x -D "cn=Manager,dc=jizai-domain,dc=jp" -W -f 01.base.ldif Enter LDAP Password: adding new entry "dc=jizai-domain,dc=jp" adding new entry "cn=Manager,dc=jizai-domain,dc=jp" adding new entry "o=Linux Users,dc=jizai-domain,dc=jp" adding new entry "o=Smaba Users,dc=jizai-domain,dc=jp" adding new entry "ou=User,o=Linux Users,dc=jizai-domain,dc=jp" adding new entry "ou=Group,o=Linux Users,dc=jizai-domain,dc=jp" ★ユーザエントリの登録 $ ldapadd -x -D "cn=Manager,dc=jizai-domain,dc=jp" -W -f 02.users.ldif Enter LDAP Password: adding new entry "uid=user01,ou=User,o=Linux Users,dc=jizai-domain,dc=jp" adding new entry "uid=user02,ou=User,o=Linux Users,dc=jizai-domain,dc=jp" ★グループエントリの登録 $ ldapadd -x -D "cn=Manager,dc=jizai-domain,dc=jp" -W -f 03.groups.ldif Enter LDAP Password: adding new entry "cn=group01,ou=Group,o=Linux Users,dc=jizai-domain,dc=jp" adding new entry "cn=group02,ou=Group,o=Linux Users,dc=jizai-domain,dc=jp" $
無地に登録出来ました!匿名ユーザで検索してましょう。
$ ldapsearch -x -b "dc=jizai-domain,dc=jp" -LLL dn: dc=jizai-domain,dc=jp dc: jizai-domain o: jizai-domain Corporation objectClass: dcObject objectClass: organization dn: cn=Manager,dc=jizai-domain,dc=jp cn: Manager objectClass: organizationalRole dn: o=Linux Users,dc=jizai-domain,dc=jp o: Linux Users objectClass: organization dn: o=Smaba Users,dc=jizai-domain,dc=jp o: Smaba Users objectClass: organization dn: ou=User,o=Linux Users,dc=jizai-domain,dc=jp ou: User objectClass: organizationalUnit dn: ou=Group,o=Linux Users,dc=jizai-domain,dc=jp ou: Group objectClass: organizationalUnit dn: uid=user01,ou=User,o=Linux Users,dc=jizai-domain,dc=jp uid: user01 cn: Test User01 uidNumber: 5001 gidNumber: 3001 homeDirectory: /home/user01 loginShell: /bin/bash gecos: Test User No01 shadowLastChange: 0 shadowMin: 0 shadowMax: 99999 shadowWarning: 7 objectClass: account objectClass: posixAccount objectClass: shadowAccount dn: uid=user02,ou=User,o=Linux Users,dc=jizai-domain,dc=jp uid: user02 cn: Test User02 uidNumber: 5002 gidNumber: 3002 homeDirectory: /home/user02 loginShell: /bin/bash gecos: Test User No02 shadowLastChange: 0 shadowMin: 0 shadowMax: 99999 shadowWarning: 7 objectClass: account objectClass: posixAccount objectClass: shadowAccount dn: cn=group01,ou=Group,o=Linux Users,dc=jizai-domain,dc=jp cn: group01 gidNumber: 3001 objectClass: posixGroup dn: cn=group02,ou=Group,o=Linux Users,dc=jizai-domain,dc=jp cn: group02 gidNumber: 3002 memberUid: 5001 objectClass: posixGroup
匿名でアクセスする場合 userPassword
属性が表示されないことを確認しました。
次は曖昧検索ウィ練習してみたいと思います。
★uidで前方一致検索する、検索結果にgecosのみを表示する $ ldapsearch -x -b "dc=jizai-domain,dc=jp" "uid=user*" "uid" -LLL dn: uid=user01,ou=User,o=Linux Users,dc=jizai-domain,dc=jp gecos: Test User No01 dn: uid=user02,ou=User,o=Linux Users,dc=jizai-domain,dc=jp gecos: Test User No02
5 OpenLDAPログ出力設定
デフォルトではサービスのログが journal
ログシステムでバイナリ形式でログ収集される。
次はコマンドで /usr/bin/slapd
プロセスのログ出力を確認することができます。
$ journalctl /usr/bin/slapd -- Logs begin at Tue 2014-01-28 15:40:27 JST, end at Tue 2014-08-12 22:05:05 JST. -- Jan 28 22:08:32 pipi slapd[175]: conn=1000 fd=9 ACCEPT from IP=192.168.100.7:35520 (IP=0.0.0.0:389) Jan 28 22:08:32 pipi slapd[175]: conn=1000 op=0 BIND dn="" method=128 Jan 28 22:08:32 pipi slapd[175]: conn=1000 op=0 RESULT tag=97 err=0 text= Jan 28 22:08:32 pipi slapd[175]: conn=1000 op=1 SRCH base="dc=jizai-domain,dc=jp" scope=2 deref=0 filter="(&(objectClass=posixAccount)(u ........
journald と syslog のを結合して運用している場合以下手順でsyslogの設定を行うでopenldap のログを別ファイルに出力させることができる。
/etc/syslog-ng/syslog-ng.conf
に以下の定義の追加して、 syslog-ng
サービスを再起動
する。
template t_1 { template("$ISODATE $FULLHOST $FACILITY $PRIORITY $MSGHDR $MSG\n"); templat$ }; destination d_ldap { file("/var/log/ldap.log" template(t_1)); }; filter f_ldap { facility(local4); }; ★ここが肝です、openldapのログはlocal4ファシリティを用いて出力する仕様となっている log { source(src); filter(f_ldap); destination(d_ldap); };
/etc/logrotate.d/syslog-ng
にローテーション対象に追加する。
★最後に追加する /var/log/messages.log ..... /var/log/ldap.log { missingok sharedscripts postrotate /bin/kill -HUP $(cat /run/syslog-ng.pid 2>/dev/null) 2>/dev/null || true endscript }
### TODO loglevel
6 LDAPクライアントの設定
LDAPクライアントはいろいろありますが、ここでは ldapsearch
などOpenLDAPに付属したツー
ルから参照されるクライアント設定ファイルについて紹介します。
OpenLDAPサーバを参照するためにLDAPクライアントに libldap
をインストールしましょう。
OpenLDAP
インストール時もすでにインストールされていると思いますが、ここでは再イン
ストールことになります。
$ sudo pacman -S libldap [sudo] password for akira: 警告: libldap-2.4.39-1 は最新です -- 再インストール 依存関係を解決しています... 相互衝突をチェックしています... パッケージ (1): libldap-2.4.39-1 Total Installed Size: 0.94 MiB Net Upgrade Size: 0.00 MiB :: インストールを行いますか? [Y/n] (1/1) キーリングのキーを確認 [########################################################] 100% (1/1) パッケージの整合性をチェック [########################################################] 100% (1/1) パッケージファイルのロード [########################################################] 100% (1/1) ファイルの衝突をチェック [########################################################] 100% (1/1) 空き容量を確認 [########################################################] 100% (1/1) 再インストール libldap [########################################################] 100% $ pacman -Ql libldap libldap /etc/ libldap /etc/openldap/ libldap /etc/openldap/ldap.conf ★LDAPクライアント設定ファイル ......省略......
/etc/openldap/ldap.conf
はLDAPクライアントの設定ファイルとなります。このファイルう
に最低限に以下のLDAPサーバ接続する情報を記述しましょう。
BASE dc=jizai-domain,dc=jp URI ldap://pipi.home/
これで ldapsearch
コマンド実行時にデフォルトの接続先として付与されることになります。
7 LDAPクライアントとサーバ間の通信内容
LDAPクライアントとサーバ間通経路が暗号化されていない時のパケット内容を確認しましょう。
以下は ldapsearch
コマンドでユーザエントリの userPassword
属性の検索結果となりま
す。 userPassword
の値がBase64エンコード形式で出力されていることが分かりました。
$ ldapsearch -x -W -D "cn=Manager,dc=jizai-domain,dc=jp" -b "ou=User,o=Linux Users,dc=jizai-domain,dc=jp" "userPassword" -LLL Enter LDAP Password: dn: ou=User,o=Linux Users,dc=jizai-domain,dc=jp dn: uid=user01,ou=User,o=Linux Users,dc=jizai-domain,dc=jp userPassword:: UEBzc3cwcmQ= dn: uid=user02,ou=User,o=Linux Users,dc=jizai-domain,dc=jp userPassword:: e1NTSEF9S3BKd3dBMlNidDI5R0dOWnhkYXNxNVhSbWw2SjVxMlo=
wireshark
の監視結果
tcpdump
の監視結果(一部情報を落としている)
$ sudo tcpdump -n -i wlp2s0 port 389 -X tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on wlp2s0, link-type EN10MB (Ethernet), capture size 65535 bytes 16:38:54.494320 IP 192.168.100.10.37832 > 192.168.100.4.389: Flags [S], seq 1466415103, win 29200, options [mss 1460,sackOK,TS val 23258407 ecr 0,nop,wscale 7], length 0 ...省略... 16:38:54.495465 IP 192.168.100.4.389 > 192.168.100.10.37832: Flags [S.], seq 206831997, ack 1466415104, win 28960, options [mss 1460,sackOK,TS val 10688865 ecr 23258407,nop,wscale 5], length 0 ...省略... 16:38:54.495515 IP 192.168.100.10.37832 > 192.168.100.4.389: Flags [.], ack 1, win 229, options [nop,nop,TS val 23258407 ecr 10688865], length 0 ...省略... 16:38:54.495602 IP 192.168.100.10.37832 > 192.168.100.4.389: Flags [P.], seq 1:55, ack 1, win 229, options [nop,nop,TS val 23258407 ecr 10688865], length 54 0x0000: 4500 006a 52da 4000 4006 9e54 c0a8 640a E..jR.@.@..T..d. 0x0010: c0a8 6404 93c8 0185 5767 b800 0c54 017e ..d.....Wg...T.~ 0x0020: 8018 00e5 082b 0000 0101 080a 0162 e527 .....+.......b.' 0x0030: 00a3 1961 3034 0201 0160 2f02 0103 0420 ...a04...`/..... 0x0040: 636e 3d4d 616e 6167 6572 2c64 633d 6a69 cn=Manager,dc=ji 0x0050: 7a61 692d 646f 6d61 696e 2c64 633d 6a70 zai-domain,dc=jp 0x0060: 8008 5040 7373 7730 7264 ..P@ssw0rd ★rootdnバインド時のパスワード 16:38:54.497192 IP 192.168.100.4.389 > 192.168.100.10.37832: Flags [.], ack 55, win 905, options [nop,nop,TS val 10688865 ecr 23258407], length 0 ...省略... 16:38:54.505926 IP 192.168.100.4.389 > 192.168.100.10.37832: Flags [P.], seq 1:15, ack 55, win 905, options [nop,nop,TS val 10688866 ecr 23258407], length 14 ...省略... 16:38:54.505948 IP 192.168.100.10.37832 > 192.168.100.4.389: Flags [.], ack 15, win 229, options [nop,nop,TS val 23258410 ecr 10688866], length 0 ...省略... 16:38:54.506029 IP 192.168.100.10.37832 > 192.168.100.4.389: Flags [P.], seq 55:151, ack 15, win 229, options [nop,nop,TS val 23258410 ecr 10688866], length 96 16:38:54.511339 IP 192.168.100.4.389 > 192.168.100.10.37832: Flags [P.], seq 15:69, ack 151, win 905, options [nop,nop,TS val 10688866 ecr 23258410], length 54 16:38:54.517492 IP 192.168.100.4.389 > 192.168.100.10.37832: Flags [P.], seq 69:162, ack 151, win 905, options [nop,nop,TS val 10688867 ecr 23258410], length 93 0x0000: 4500 0091 1822 4000 4006 d8e5 c0a8 6404 E...."@.@.....d. 0x0010: c0a8 640a 0185 93c8 0c54 01c2 5767 b896 ..d......T..Wg.. 0x0020: 8018 0389 7d44 0000 0101 080a 00a3 1963 ....}D.........c 0x0030: 0162 e52a 305b 0201 0264 5604 3675 6964 .b.*0[...dV.6uid 0x0040: 3d75 7365 7230 312c 6f75 3d55 7365 722c =user01,ou=User, 0x0050: 6f3d 4c69 6e75 7820 5573 6572 732c 6463 o=Linux.Users,dc 0x0060: 3d6a 697a 6169 2d64 6f6d 6169 6e2c 6463 =jizai-domain,dc 0x0070: 3d6a 7030 1c30 1a04 0c75 7365 7250 6173 =jp0.0...userPas 0x0080: 7377 6f72 6431 0a04 0850 4073 7377 3072 sword1...P@ssw0r ★検索結果にuser01のパスワード 0x0090: 64 d 16:38:54.517536 IP 192.168.100.10.37832 > 192.168.100.4.389: Flags [.], ack 162, win 229, options [nop,nop,TS val 23258414 ecr 10688866], length 0 16:38:54.518197 IP 192.168.100.4.389 > 192.168.100.10.37832: Flags [P.], seq 162:285, ack 151, win 905, options [nop,nop,TS val 10688867 ecr 23258410], length 123 0x0000: 4500 00af 1823 4000 4006 d8c6 c0a8 6404 E....#@.@.....d. 0x0010: c0a8 640a 0185 93c8 0c54 021f 5767 b896 ..d......T..Wg.. 0x0020: 8018 0389 682f 0000 0101 080a 00a3 1963 ....h/.........c 0x0030: 0162 e52a 3079 0201 0264 7404 3675 6964 .b.*0y...dt.6uid 0x0040: 3d75 7365 7230 322c 6f75 3d55 7365 722c =user02,ou=User, 0x0050: 6f3d 4c69 6e75 7820 5573 6572 732c 6463 o=Linux.Users,dc 0x0060: 3d6a 697a 6169 2d64 6f6d 6169 6e2c 6463 =jizai-domain,dc 0x0070: 3d6a 7030 3a30 3804 0c75 7365 7250 6173 =jp0:08..userPas 0x0080: 7377 6f72 6431 2804 267b 5353 4841 7d4b sword1(.&{SSHA}K ★検索結果にuser02のパスワード 0x0090: 704a 7777 4132 5362 7432 3947 474e 5a78 pJwwA2Sbt29GGNZx 0x00a0: 6461 7371 3558 526d 6c36 4a35 7132 5a dasq5XRml6J5q2Z 16:38:54.518549 IP 192.168.100.4.389 > 192.168.100.10.37832: Flags [P.], seq 285:299, ack 151, win 905, options [nop,nop,TS val 10688867 ecr 23258414], length 14
検証結果の通り、バインド時のパスワードや検索結果中のパスワード情報がバレバレですね。 本番運用ではこの状態だと好ましくないでしょうか。ちゃんとSSL/TLSで暗号化しましょう。
8 LDAPによるLinuxのログイン認証設定
8.1 LDAP連携用ライブラリの導入
LDAPサーバと連携してログイン認証するために libnss_ldap
と pam_ldap
ライブラリが必
要とします。2つライブラリの役割は
- libnss_ldap: Name Service Switch によるLDAPユーザ情報を引けるようにする
- pam_ldap: 簡易パスワード認証や
passwd
によるパスワード変更のLDAP対応
この2つライブラリは別々プロジェクトで開発されているため、設定ファイルも別々 となっている。
pam_ldap | http://www.padl.com/OSS/pam_ldap.html | nss_ldap.conf |
nss_ldap | http://www.padl.com/OSS/nss_ldap.html | pam_ldap.conf |
実際にこの2つ設定ファイルに記述する内容はほどんどん変わらない、設定情報が二重管理と
なってしまいます。 この問題を解決してくれるのは nss-pam-ldapd
です。以下は
nss-pam-ldapd
プロジェクトサイトからの説明引用です。
This is implemented using thin NSS and PAM modules which delegate to a dedicated service (nslcd) that queries the LDAP server with persistent connections, authentication, attribute translation, etc.
つまり、2モジュールを仲良くする代理人的なものですね。
$ sudo pacman -S nss-pam-ldapd 依存関係を解決しています... 相互衝突をチェックしています... :: nss-pam-ldapd と pam_ldap が衝突しています。pam_ldap を削除しますか? [y/N] y パッケージ (2): pam_ldap-186-5 [削除] nss-pam-ldapd-0.8.14-1 Total Installed Size: 0.23 MiB Net Upgrade Size: 0.14 MiB :: インストールを行いますか? [Y/n] (1/1) キーリングのキーを確認 [########################################################] 100% (1/1) パッケージの整合性をチェック [########################################################] 100% (1/1) パッケージファイルのロード [########################################################] 100% (1/1) ファイルの衝突をチェック [########################################################] 100% (2/2) 空き容量を確認 [########################################################] 100% (1/1) 削除 pam_ldap [########################################################] 100% 警告: /etc/pam_ldap.conf は /etc/pam_ldap.conf.pacsave として保存されました (1/1) インストール nss-pam-ldapd [########################################################] 100% ★インストールされたファイル一覧 $ sudo pacman -Ql nss-pam-ldapd nss-pam-ldapd /etc/ nss-pam-ldapd /etc/nslcd.conf ★LDAPサーバ接続情報はここに載せる nss-pam-ldapd /usr/ nss-pam-ldapd /usr/bin/ nss-pam-ldapd /usr/bin/nslcd ★[local LDAP name service daemon]、LDAP連携時の代理デーモンプロセス nss-pam-ldapd /usr/lib/ nss-pam-ldapd /usr/lib/libnss_ldap.so.2 ★NSSのLDAP対応 nss-pam-ldapd /usr/lib/security/ nss-pam-ldapd /usr/lib/security/pam_ldap.so ★LDAP認証PAMモジュール nss-pam-ldapd /usr/lib/systemd/ nss-pam-ldapd /usr/lib/systemd/system/ nss-pam-ldapd /usr/lib/systemd/system/nslcd.service ★nslcdサービスファイル nss-pam-ldapd /usr/lib/tmpfiles.d/ nss-pam-ldapd /usr/lib/tmpfiles.d/nslcd.conf nss-pam-ldapd /usr/share/ nss-pam-ldapd /usr/share/man/ nss-pam-ldapd /usr/share/man/man5/ nss-pam-ldapd /usr/share/man/man5/nslcd.conf.5.gz nss-pam-ldapd /usr/share/man/man8/ nss-pam-ldapd /usr/share/man/man8/nslcd.8.gz nss-pam-ldapd /usr/share/man/man8/pam_ldap.8.gz $
nslcd
は libnss_ldap
や pam_ldap
からLDAPと連携時の中継代理デーモンプロセス
となります。LDAPサーバへの接続情報は /etc/nslcd.conf
にて記述します。
$ cat /etc/nslcd.conf uri ldap://pipi.home/ base dc=jizai-domain,dc=jp ★ユーザエントリ検索の起点 rootpwmoddn cn=Manager,dc=jizai-domain,dc=jp ★rootユーザでLDAPユーザのパスワード変更時の認証バインドに使われる
/etc/nslcd.conf
とは別に /etc/nscd.conf
が存在します、このファイルは glibc
が提供してい
るものです、混乱しないように注意しましょう。
/etc/nsswitch.conf
に以下のように情報源にldapを追加する。
$ cat /etc/nsswitch.conf passwd: files ldap group: files ldap shadow: files ldap netgroup: files ldap ★以上以外の内容、ここでは省略します。
nslcd.service
サービスを起動して、 getent passwd
でLDAPのユーザ情報ちゃんと参照で
きることを確認しましょう。ちなみに、getentはNSSライブラリからエントリーを取得するコマ
ンドです。
$ sudo systemctl start nslcd.service $ getent passwd root:x:0:0:root:/root:/bin/bash .....省略..... nslcd:x:997:996::/var/run/nslcd:/bin/false ★LDAPのユーザエントリ情報が表示されている user01:x:5001:3001:Test User No01:/home/user01:/bin/bash user02:x:5002:3002:Test User No02:/home/user02:/bin/bash
★サービス起動時のログ Aug 14 00:14:31 mimi-air systemd[1]: Starting Naming services LDAP client daemon.... Aug 14 00:14:31 mimi-air nslcd[8554]: version 0.8.14 starting Aug 14 00:14:31 mimi-air nslcd[8554]: accepting connections Aug 14 00:14:31 mimi-air systemd[1]: Started Naming services LDAP client daemon.. ★getent passwd実行時のログ Aug 14 00:14:35 mimi-air nslcd[8554]: [8b4567] <passwd(all)> (re)loading /etc/nsswitch.conf
8.2 LDAP認証PAMモジュールの設定
次はLDAP認証するためのPAMモジュール設定を行います。対象となる設定ファイルは次の表にま とめます。
ファイル | 用途 |
---|---|
/etc/pam.d/system-auth | 通常のログインで利用する |
/etc/pam.d/su | su user01 でユーザ切り替え時に使われる |
/etc/pam.d/su-l | su - user01 でユーザ切り替え時に使われる |
/etc/pam.d/passwd | passwdコマンドでパスワード変更時に使う |
/etc/pam.d/other | PAMデフォルト設定ファイル |
/etc/pam.d/system-auth
設定例
#%PAM-1.0 auth sufficient pam_ldap.so ★LDAP連携用 auth required pam_env.so auth required pam_unix.so try_first_pass nullok auth optional pam_permit.so account sufficient pam_ldap.so ★LDAP連携用 account required pam_unix.so account optional pam_permit.so account required pam_time.so password sufficient pam_ldap.so ★LDAP連携用 password required pam_unix.so try_first_pass nullok sha512 shadow password optional pam_permit.so #ユーザ、グループ単位にリソース制限を行う session required pam_limits.so session required pam_env.so #ログイン時にホームディレクトリが存在していなければ自動で生成する指定 session required pam_mkhomedir.so skel=/etc/skel umask=0077 #ログイン、ログアウト情報をauthログに出力する session required pam_unix.so session optional pam_ldap.so ★LDAP連携用 session optional pam_permit.so
/etc/pam.d/su
と /etc/pam.d/su-l
設定例
#%PAM-1.0 auth sufficient pam_ldap.so ★LDAP連携 auth sufficient pam_rootok.so # Uncomment the following line to implicitly trust users in the "wheel" group. #auth sufficient pam_wheel.so trust use_uid # Uncomment the following line to require a user to be in the "wheel" group. #auth required pam_wheel.so use_uid auth required pam_unix.so use_first_pass ★use_first_pass→ユーザーから取得済みのパスワードを再利用する account sufficient pam_ldap.so ★LDAP連携 account required pam_unix.so session required pam_mkhomedir.so skel=/etc/skel umask=0022 ★ホームディレクトリを自動作成する session sufficient pam_ldap.so ★LDAP連携 session required pam_unix.so
/etc/pam.d/passwd
設定例
#%PAM-1.0 password sufficient pam_ldap.so ★LDAPパスワード変更連携 password required pam_cracklib.so retry=3 difok=1 minlen=8 dcredit=-1 password required pam_unix.so sha512 shadow nullok use_authtok
/etc/pam.d/other
設定例
#%PAM-1.0 auth sufficient pam_ldap.so ★LDAP連携 auth required pam_unix.so account sufficient pam_ldap.so ★LDAP連携 account required pam_unix.so password sufficient pam_ldap.so ★LDAP連携 password required pam_unix.so session required pam_unix.so
初回ログイン時にパスワード変更を求める場合、 other
の設定は必須です。
つまり、LDAPユーザエントリの shadowLastChange: 0
を運用する時に要注意です。
設定しない時の挙動
$ su - user02 パスワード: need a new password su: 基礎となる認証モジュールを知らないユーザー ★新パスワードを求める事ができない、ログインできない $
8.3 パスワード変更時の挙動
LDAPユーザのパスワード変更は次のような方法があります。
LDAPユーザ権限でpasswd | LDAPユーザ自身のパスワードを変更する |
root権限でpasswd | 任意のユーザのパスワードを変更する |
ldappasswd | バインドユーザによる変更できる範囲が変わる |
ldapmodify | バインドユーザによる変更できる範囲が変わる |
8.4 ログイン時の挙動
- 匿名でユーザエントリ情報を取得する
- ユーザエントリを用いてLDAP認証バインドを行う
- 何度もユーザエントリの情報を取得する
ログイン時LDAPサーバ側のログ
★ユーザID入力後、パスワード入力前 2014-08-16T17:34:16+09:00 pipi local4 debug slapd[21557]: conn=1001 fd=18 ACCEPT from IP=192.168.100.10:53485 (IP=0.0.0.0:389) 2014-08-16T17:34:16+09:00 pipi local4 debug slapd[21557]: conn=1001 op=0 BIND dn="" method=128 2014-08-16T17:34:16+09:00 pipi local4 debug slapd[21557]: conn=1001 op=0 RESULT tag=97 err=0 text= ★★1: LDAP検索条件 objectClassとuidが付与された 2014-08-16T17:34:16+09:00 pipi local4 debug slapd[21557]: conn=1001 op=1 SRCH base="dc=jizai-domain,dc=jp" scope=2 deref=0 filter="(&(objectClass=posixAccount)(uid=user01))" 2014-08-16T17:34:16+09:00 pipi local4 debug slapd[21557]: conn=1001 op=1 SRCH attr=loginShell cn gidNumber uidNumber objectClass homeDirectory gecos uid 2014-08-16T17:34:16+09:00 pipi local4 debug slapd[21557]: conn=1001 op=1 SEARCH RESULT tag=101 err=0 nentries=1 text= ★パスワード入力後 2014-08-16T17:34:28+09:00 pipi local4 debug slapd[21557]: conn=1001 op=2 SRCH base="dc=jizai-domain,dc=jp" scope=2 deref=0 filter="(&(objectClass=posixAccount)(uid=user01))" 2014-08-16T17:34:28+09:00 pipi local4 debug slapd[21557]: conn=1001 op=2 SRCH attr=uid uidNumber 2014-08-16T17:34:28+09:00 pipi local4 debug slapd[21557]: conn=1001 op=2 SEARCH RESULT tag=101 err=0 nentries=1 text= 2014-08-16T17:34:28+09:00 pipi local4 debug slapd[21557]: conn=1002 fd=19 ACCEPT from IP=192.168.100.10:53487 (IP=0.0.0.0:389) ★★2: ユーザエントリでバインドが行われた 2014-08-16T17:34:28+09:00 pipi local4 debug slapd[21557]: conn=1002 op=0 BIND dn="uid=user01,ou=User,o=Linux Users,dc=jizai-domain,dc=jp" method=128 2014-08-16T17:34:28+09:00 pipi local4 debug slapd[21557]: conn=1002 op=0 BIND dn="uid=user01,ou=User,o=Linux Users,dc=jizai-domain,dc=jp" mech=SIMPLE ssf=0 2014-08-16T17:34:28+09:00 pipi local4 debug slapd[21557]: conn=1002 op=0 RESULT tag=97 err=0 text= 2014-08-16T17:34:28+09:00 pipi local4 debug slapd[21557]: conn=1002 op=1 SRCH base="uid=user01,ou=User,o=Linux Users,dc=jizai-domain,dc=jp" scope=0 deref=0 filter="(objectClass=*)" 2014-08-16T17:34:28+09:00 pipi local4 debug slapd[21557]: conn=1002 op=1 SRCH attr=dn 2014-08-16T17:34:28+09:00 pipi local4 debug slapd[21557]: conn=1002 op=1 SEARCH RESULT tag=101 err=0 nentries=1 text= 2014-08-16T17:34:28+09:00 pipi local4 debug slapd[21557]: conn=1002 op=2 ABANDON msg=2 2014-08-16T17:34:28+09:00 pipi local4 debug slapd[21557]: conn=1002 op=3 UNBIND ★★3:パスワード期限などの問い合わせる 2014-08-16T17:34:28+09:00 pipi local4 debug slapd[21557]: conn=1001 op=3 SRCH base="dc=jizai-domain,dc=jp" scope=2 deref=0 filter="(&(objectClass=shadowAccount)(uid=user01))" 2014-08-16T17:34:28+09:00 pipi local4 debug slapd[21557]: conn=1001 op=3 SRCH attr=shadowExpire shadowInactive shadowFlag shadowWarning shadowLastChange uid shadowMin shadowMax 2014-08-16T17:34:28+09:00 pipi local4 debug slapd[21557]: conn=1001 op=3 SEARCH RESULT tag=101 err=0 nentries=1 text= 2014-08-16T17:34:28+09:00 pipi local4 debug slapd[21557]: conn=1002 fd=19 closed 2014-08-16T17:34:28+09:00 pipi local4 debug slapd[21557]: conn=1001 op=4 ABANDON msg=4 2014-08-16T17:34:28+09:00 pipi local4 debug slapd[21557]: conn=1000 op=2 SRCH base="dc=jizai-domain,dc=jp" scope=2 deref=0 filter="(&(objectClass=posixAccount)(uid=user01))" 2014-08-16T17:34:28+09:00 pipi local4 debug slapd[21557]: conn=1000 op=2 SRCH attr=uid uidNumber 2014-08-16T17:34:28+09:00 pipi local4 debug slapd[21557]: conn=1000 op=2 SEARCH RESULT tag=101 err=0 nentries=1 text= 2014-08-16T17:34:28+09:00 pipi local4 debug slapd[21557]: conn=1000 op=3 SRCH base="dc=jizai-domain,dc=jp" scope=2 deref=0 filter="(&(objectClass=shadowAccount)(uid=user01))" 2014-08-16T17:34:28+09:00 pipi local4 debug slapd[21557]: conn=1000 op=3 SRCH attr=shadowExpire shadowInactive shadowFlag shadowWarning shadowLastChange uid shadowMin shadowMax 2014-08-16T17:34:28+09:00 pipi local4 debug slapd[21557]: conn=1000 op=3 SEARCH RESULT tag=101 err=0 nentries=1 text= 2014-08-16T17:34:28+09:00 pipi local4 debug slapd[21557]: conn=1000 op=4 ABANDON msg=4 2014-08-16T17:34:28+09:00 pipi local4 debug slapd[21557]: conn=1000 op=5 SRCH base="dc=jizai-domain,dc=jp" scope=2 deref=0 filter="(&(objectClass=posixAccount)(uid=user01))" 2014-08-16T17:34:29+09:00 pipi local4 debug slapd[21557]: conn=1000 op=5 SRCH attr=uid uidNumber 2014-08-16T17:34:29+09:00 pipi local4 debug slapd[21557]: conn=1000 op=5 SEARCH RESULT tag=101 err=0 nentries=1 text= 2014-08-16T17:34:29+09:00 pipi local4 debug slapd[21557]: conn=1000 op=6 SRCH base="dc=jizai-domain,dc=jp" scope=2 deref=0 filter="(&(objectClass=posixGroup)(|(memberUid=user01)(member=uid=user01,ou=user,o=linux users,dc=jizai-domain,dc=jp)))" 2014-08-16T17:34:29+09:00 pipi local4 debug slapd[21557]: conn=1000 op=6 SRCH attr=memberUid cn gidNumber member 2014-08-16T17:34:29+09:00 pipi local4 debug slapd[21557]: <= bdb_equality_candidates: (member) not indexed 2014-08-16T17:34:29+09:00 pipi local4 debug slapd[21557]: conn=1000 op=6 SEARCH RESULT tag=101 err=0 nentries=0 text=
LDAPからユーザエントリの検索範囲を限定する方法
- DITベースで検索範囲を限定する
- pam_filterで検索結果を絞り込む
9 宿題
- shadowLastChange変更ポリシー
- 通信暗号化
10 参考情報
- プロのためのLinuxシステムネットワーク管理技術