作成 2009.12.28
更新 2016.10.19
OpenLDAP 構築メモ
目次
まえおき
RPM からインストール
/etc/openldap/slapd.conf
/etc/openldap/ldap.conf
/var/lib/ldap/DB_CONFIG
サービス起動
基本設定
認証用の追加設定
ユーザー作成
クライアント端末の認証設定
ログオン先の作成
お疲れ様でした。
ユーザー自身のパスワード変更
管理者権限のユーザーパスワード変更
ユーザーの削除
暗号化 (LDAPS) 対応
/etc/openldap/slapd.conf の追加項目
デバッグモードで起動
まえおき

CentOS 5 で OpenLDAP を構築したときのメモです。
難解なエラーメッセージに悩まされた人の一助となれば。

以下のオペレーションはroot権限で実行するものです。

# command

以下のオペレーションはユーザー権限で実行するものです。

$ command

以下の記述はファイルの内容を指しています。

# comment ここの行はなくてもかまいません
setting=value
RPM からインストール

まあ、この辺は普通に。

# yum install openldap-servers openldap-clients
/etc/openldap/slapd.conf

openldapサーバの本体slapdが参照するファイルです。
修正する前に、パスワードのLDAP用のハッシュ値を取得しておきます。

# slappasswd -s adminpassword
{SSHA}HWqeNmSZCEdF/vlkDE2rZI8JiC65sV4B

slapd.confの内容は以下の感じで。

include	/etc/openldap/schema/core.schema
include	/etc/openldap/schema/cosine.schema
include	/etc/openldap/schema/inetorgperson.schema
include	/etc/openldap/schema/nis.schema

# bind_v2 は期待通り動作しないことがあるので、必要が無ければあえて許可する必要はない
# allow bind_v2
pidfile	/var/run/openldap/slapd.pid
argsfile	/var/run/openldap/slapd.args

# アクセスコントロールのデフォルトは
# access to * by * read
# 以下の記述をすると、/etc/ldap.conf に binddn と bindpw の設定が必須
# ただし、ユーザーが自分のパスワードを変更できるようにするためには必要
# rootdn へアクセス許可する必要はない
#
# openldap 2.3 以降では attr によるアクセス設定ができなくなりました。
access to attrs=userPassword
	by dn="cn=proxy,dc=upken,dc=jp" read
	by self write
	by anonymous auth
	by * none
access to *
	by self write
	by users read
	by anonymous auth
	by * none

database bdb
suffix "dc=upken,dc=jp"
rootdn "cn=Manager,dc=upken,dc=jp"
# slappasswdのコマンド結果はここに記述する
rootpw	{SSHA}HWqeNmSZCEdF/vlkDE2rZI8JiC65sV4B
directory /var/lib/ldap
index objectClass eq,pres
index ou,cn,mail,surname,givenname eq,pres,sub
index uidNumber,gidNumber eq,pres
index uid,memberUid eq,pres,sub
index nisMapName,nisMapEntry eq,pres,sub
/etc/openldap/ldap.conf

ldapコマンド(ldapadd, ldapmodifyなど)が参照するファイルです。
/etc/ldap.confと混同しないように気をつけてください。/etc/ldap.conf はnss_ldapやpamが参照します。
内容はこんな感じで。

BASE dc=upken,dc=jp
URI ldap://localhost
/var/lib/ldap/DB_CONFIG

データベースのパラメータファイルをコピーします。

# cp /etc/openldap/DB_CONFIG.example /var/lib/ldap/DB_CONFIG

以下のようなパラメータがあります。

# set_cachesize <GigaBytes> <Bytes> <ncache>
#	物理メモリ上にキャッシュするサイズを指定します。
#	<GigaBytes>GB + <Bytes> のメモリを確保します。
#	<ncache> が 0または1の場合は、連続したメモリ領域を確保します。
#	<ncache> が 1より大きい場合は、<ncache>の数だけ分割して確保します。
#	デフォルトは 0 262144 0 のため、指定がない場合に応答が遅くなる可能性があります。
#	推奨値は4MB以上。最大は4GBまでです。実際には物理メモリの25~50%を確保するようです。
#	64bit版に関しては不明です。
set_cachesize 0 268435456 1

# set_lg_regionmax <Bytes>
#	データベースファイル名を物理メモリにキャッシュする最大サイズを指定します。
#	ファイル数(テーブル、インデックス)の増加にあわせて値を増やすほうが良いでしょう。
#	デフォルトは約60KB
#	推奨値は set_cachesize の 1/1024 です。
set_lg_regionmax 262144

# set_lg_bsize <Bytes>
#	トランザクションログへの書き込みバッファサイズを指定します。
set_lg_bsize 2097152

# set_flags
#	フラグを指定します。
#	DB_LOG_AUTOREMOVE 不要になったトランザクションログを自動的に削除します
#	DB_TXN_NOSYNC ディスクに直ちに書き込まないことでパフォーマンスを上げます
set_flags DB_LOG_AUTOREMOVE
サービス起動

サービス起動はこれだけです。厳密に設定ファイルをチェックしてくれるようで、書式ミスやスペルの間違いがあると起動しません。

# service ldap start

再起動後も自動起動したい場合は、以下のコマンドを打っておきます。

# chkconfig ldap on

デバッグモードで起動したいときはデバッグモードで起動を参照してください。

起動確認するには以下を実行します。パスワードはslapd.confで設定したときのものを使用します。

# ldapsearch -x -D 'cn=Manager,dc=upken,dc=jp' -W -b '' -s base '(objectclass=*)' namingContexts
基本設定

ドメインと管理者の作成は必須です。
People と Group は RFC2307bis に指定されており、一般的に利用されている ou ですのでここで登録します。
ファイル名は任意です。
domain.ldif

dn: dc=upken,dc=jp
objectClass: dcObject
objectClass: organization
o: upken ldap
dc: upken

dn: cn=Manager,dc=upken,dc=jp
objectClass: organizationalRole
cn: Manager

dn: ou=People,dc=upken,dc=jp
objectClass: organizationalUnit
ou: People

dn: ou=Group,dc=upken,dc=jp
objectClass: organizationalUnit
ou: Group
# ldapadd -x -D "cn=Manager,dc=upken,dc=jp" -W -f domain.ldif
認証用の追加設定

グループと /etc/ldap.conf の binddn 用に使用するエントリを追加します。
ここでも slappasswd で設定用のパスワードを取得します。

# slappasswd -s bindpassword
{SSHA}fuPtbgCJdVjv7TF6qMuFgXEIX3F/5YcT

ファイル名は任意です。
auth.ldif

dn: cn=upkengroup,ou=Group,dc=upken,dc=jp
objectClass: posixGroup
cn: upkengroup
gidNumber: 10000

dn: cn=proxy,dc=upken,dc=jp
objectclass: organizationalRole
objectClass: simpleSecurityObject
cn: proxy
userPassword: {SSHA}fuPtbgCJdVjv7TF6qMuFgXEIX3F/5YcT
# ldapadd -x -D "cn=Manager,dc=upken,dc=jp" -W -f auth.ldif
ユーザー作成

いちいちこんなことをやるのは面倒だから一発作成スクリプトか何か作ったほうが良いと思います。

# slappasswd -s user0001
{SSHA}l059m9Uwdu0dB7IYma0iYd16txrX99Mh

ユーザーの作成とグループのメンバー追加をまとめて行います。
ldapmodify を使用するので各DNの2行目だけ異なることに注意してください。
user0001.ldif

dn: uid=user0001,ou=People,dc=upken,dc=jp
changetype: add
objectClass: person
objectClass: posixAccount
objectClass: inetOrgPerson
objectClass: shadowAccount
cn: user0001
sn: upkenuser
uid: user0001
mail: user0001@upken.jp
uidNumber: 10001
gidNumber: 10000
homeDirectory: /home/user0001
userPassword: {SSHA}l059m9Uwdu0dB7IYma0iYd16txrX99Mh
loginShell: /bin/bash
shadowLastChange: 10000
shadowMin: 0
shadowMax: 99999
shadowWarning: 14
shadowInactive: 99999
shadowExpire: -1

dn: cn=upkengroup,ou=Group,dc=upken,dc=jp
changetype: modify
add: memberUid
memberUid: user0001
# ldapmodify -x -D "cn=Manager,dc=upken,dc=jp" -W -f user0001.ldif
クライアント端末の認証設定

authconfig で Use LDAP と Use LDAP Authentication を選択し Next
Tera Term で接続すると入力欄が左にずれるので気をつけてください。

CentOS 5の場合は

# authconfig-tui

古いRed Hatの場合は

# authconfig

または

# setup

実際には、/etc/ldap.conf, /etc/nsswitch.conf, /etc/pam.d/system-auth-ac が書き換えられます。

つぎに、/etc/ldap.conf にbinddnとbindpwを追加します。
bindpw は平文で記述する必要があります。

/etc/ldap.conf

base dc=upken,dc=jp
binddn cn=proxy,dc=upken,dc=jp
bindpw bindpassword
timelimit 120
bind_timelimit 120
idle_timelimit 3600
nss_initgroups_ignoreusers root,ldap,named,avahi,haldaemon
uri ldap://127.0.0.1/
ssl no
tls_cacertdir /etc/openldap/cacerts
pam_password md5

正しく設定されている場合は、以下のコマンドで情報が取得できるはずです。

# getent passwd user0001
user0001:x:10001:10000:user0001:/home/user0001:/bin/bash
ログオン先の作成

通常はnfsやautofsを使いますが、今回はベーシックに。

# cp -a /etc/skel /home/user0001
# chown -R user0001:upkengroup /home/user0001
お疲れ様でした。

以上の設定がすべて正しくできていれば、新しく作ったユーザーでログインできるはずです。
以降はおまけです。

ユーザー自身のパスワード変更

passwd コマンドでも変更できるようになっています。 ldappasswd は新しいパスワードが指定されないと、勝手にパスワードを生成して登録してくれます。

$ ldappasswd -x -s newPassword -w currentpassword -D 'uid=user0001,ou=People,dc=upken,dc=jp'
管理者権限のユーザーパスワード変更
$ ldappasswd -x -s newPassword -w adminpassword -D 'cn=Manager,dc=upken,dc=jp' 'uid=user0001,ou=People,dc=upken,dc=jp' 
ユーザーの削除

ユーザーのエントリーとグループのメンバーから削除します。

user0001-del.ldif

dn: uid=user0001,ou=People,dc=upken,dc=jp
changetype: delete

dn: cn=upkengroup,ou=Group,dc=upken,dc=jp
changetype: modify
delete: memberUid
memberUid: user0001
$ ldapmodify -x -D 'cn=Manager,dc=upken,dc=jp' -W -f user0001-del.ldif
暗号化 (LDAPS) 対応
OpenSSL コマンドメモ でサーバー証明書 (server_pem.crt)、秘密鍵 (secret_pem.key)、CA証明書 (cacert_pem.crt) を取得します。
アクセス権はそれぞれ以下の通りです。
-rw-r--r-- 1 root root   1285 Mar 12 11:31 cacert_pem.crt
-rw-r--r-- 1 root root   1919 Mar 12 08:39 server_pem.crt
-rw-r----- 1 root ldap   1671 Mar 12 08:34 secret_pem.key
/etc/openldap/slapd.conf の追加項目
以下を追加し、再起動すると TCP Port 636 が開いて受け付けるようになります。
TLSCACertificateFile /etc/pki/tls/certs/cacert_pem.crt
TLSCertificateFile /etc/pki/tls/certs/server_pem.crt
TLSCertificateKeyFile /etc/pki/tls/certs/secret_pem.key
デバッグモードで起動

デバッグモードで自動起動しないように気をつけてください。
OSが正しく起動できなくなります。

/etc/sysconfig/ldap を作成して、以下のように記述します。

SLAPD_OPTIONS="-d -1"

起動すると操作画面上に表示されるようになります。
なお、デバッグ番号を指定するときは以下の数字の論理和であらわします。

レベル キーワード 説明
-1 Any すべてのデバッグレベルを有効にする
0 デバッグしない
1 Trace 関数呼出しのトレース
2 Packets パケット処理のデバッグ
4 Args 詳細なデバッグトレース
8 Conns 接続管理
16 BER パケット送受信の印字
32 Filter 検索フィルタ処理
64 Config 設定の処理
128 ACL アクセス制御リスト処理
256 Stats 接続/操作結果の統計ログ
512 Stats2 エントリ送信の統計ログ
1024 Shell shell バックエンドとの通信の印字
2048 Parse エントリ解析のデバッグ印字
4096 Cache データベースキャッシュ処理
8192 Index データベースインデックスの処理
16384 Sync syncrepl コンシューマ処理

©2004-2017 UPKEN IPv4