OpenLDAPの構築

OpenLDAPについては現行バージョン(2.4)slapd.confを使用した設定が非推奨?となっているらしい。
新しい方法はOLC(On-Line Configuration)と言うそうで、これだけで設定ができるらしい。

それなら一からやってみようとして、ハマりまくり((+_+))。

余りドキュメントがないので本家のサイトに行って、苦手な英文を読んでみるもslapd.confがどうとか・・・。
色々ぐぐってやっとすんなりインストールできるようになった。
かなりの長文となってしまうが、マルチマスタ構成(冗長化構成)の設定まで実施した結果をまでメモとして残す。

仕事終わってから調べてやってたので数日間寝不足・・・。もう調べたくない・・・。

構築環境

  • CentOS release 6.4 (Final) 2台
    minimam + “Japanese Support” + “Base” + リポジトリ(EPEL,rpmforge)
  • OpenLDAP: slapd 2.4.23
  • IPTABLESのTCP389は当然開けておくこと。(ローカルでしか使わないなら開けなくていい)

何はともあれ、OpenLDAPのインストール。
ここはyumですんなりとインストール。

[root@ldapsv ~]# yum -y install openldap-servers openldap-clients

OpenLDAPはBerkeley DBを使う。
バッファキャッシュ設定(DB_CONFIG)がなくても動くようなのだが、パフォーマンスが落ちるらしいということでサンプルファイルをコピーしてくる。

[root@ldapsv ~]# cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG

slapdのログを専用ファイルに出力するため、rsyslogの設定を変更する。

[root@ldapsv ~]# vi /etc/rsyslog.conf
以下を末尾でもいいので追加する
# Log slapd
local4.* /var/log/slapd.log

設定を反映するためにサービスを再起動。
[root@ldapsv ~]# service rsyslog restart
システムロガーを停止中: [ OK ]
システムロガーを起動中: [ OK ]

とりあえずここでslapdを起動。

[root@ldapsv ~]# service slapd start
slapd を起動中: [ OK ]

slapdが起動はするものの、この状態ではサンプル設定の状態で、DNの設定も仮のものになっている。

ここからが本題で、これ以降の設定をOLC(On-Line Configuration)を使用して行っていく。

OpenLDAP の2.4では SASL / Externalを使うとldapi://で接続できパスワードも必要ない。
しかし、外部からのアクセス時にTLSを使えだのなんだの言われる。
上記のことから、rootPWを設定してやらないとアクセスできない(できなくはないが面倒くさい・・・)ので、まずはrootPWの設定をする(外部公開するならこんなことしないほうがいいのは当然)。
一応断りを入れておくと、コマンドのメモにsudo書くのが面倒くさいので全てrootで実行していることにしてます。

まずは作業用ディレクトリを作成する。

[root@ldapsv ~]# mkdir ./ldap_work

作業用ディレクトリ内にrootPW設定用のldifファイルを作成する。

[root@ldapsv ~]# vi ./ldap_work/add_rootPw.ldif
dn: olcDatabase={0}config,cn=config
changetype: modify
add: olcRootPW
olcRootPW: rootP@ssword

ldapaddコマンドで、先ほどのファイルを読み込ませ、rootPWを設定する。

[root@ldapsv ~]# ldapadd -Y EXTERNAL -H ldapi:// -f ./ldap_work/add_rootPw.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "olcDatabase={0}config,cn=config"

確認の為、ldapsearchで先ほどのパスワードが設定されているか確認する。

[root@ldapsv ~]# ldapsearch -x -LLL -D "cn=config" -W -b "cn=config" '(objectClass=*)'
Enter LDAP Password: (rootP@ssword) 表示されない。
dn: cn=config
objectClass: olcGlobal
cn: config
olcConfigFile: /etc/openldap/slapd.conf.bak
olcConfigDir: /etc/openldap/slapd.d
olcAllows: bind_v2
olcArgsFile: /var/run/openldap/slapd.args
olcAttributeOptions: lang-
~以下略~
パスワードの入力を間違うと以下のような出力になる。
ldap_bind: Invalid credentials (49)

OS起動時にslapdサービスが起動するように設定する。

[root@ldapsv ~]# chkconfig slapd on

インストールした状態ではDNがdc=my-domain,dc=comで設定されているので、これを正規のもの(自分が所有しているもの)に直す。
尚、本メモではexample.comで記載しているので、各所の入力を直して使用すること。

修正用のldifファイルを作成する。

[root@ldapsv ~]# vi ./ldap_work/change-domain.ldif
dn: olcDatabase={1}monitor,cn=config
changetype: modify
replace: olcAccess
olcAccess: {0}to * by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" 
  read by dn.base="cn=Manager,dc=example,dc=com" read by * none

dn: olcDatabase={2}bdb,cn=config
changetype: modify
replace: olcSuffix
olcSuffix: dc=example,dc=com

dn: olcDatabase={2}bdb,cn=config
changetype: modify
replace: olcRootDN
olcRootDN: cn=Manager,dc=example,dc=com

dn: olcDatabase={2}bdb,cn=config
changetype: modify
add: olcRootPW
olcRootPW: managerP@ssword

ldapmodifyコマンドで、先ほどのファイルを読み込ませ、DNの修正を行う。

[root@ldapsv ~]# ldapmodify -x -D cn=config -W -f ./ldap_work/change-domain.ldif
Enter LDAP Password:(rootP@ssword) 表示されない。
modifying entry "olcDatabase={1}monitor,cn=config"

modifying entry "olcDatabase={2}bdb,cn=config"

modifying entry "olcDatabase={2}bdb,cn=config"

modifying entry "olcDatabase={2}bdb,cn=config"

引き続き、ベースドメインの登録を実施する。
このメモでは、ユーザー管理だけ行うつもりなので、organizationalUnitはPeopleとGroupのみ登録している。
コンピューターも管理したいなら、machinesなども追加するとよい

[root@ldapsv ~]# vi ./ldap_work/base.ldif
# Domain
dn: dc=example,dc=com
objectClass: dcObject
objectClass: organization
dc: example
o: Example Inc.

# Manager(管理者)
dn: cn=Manager,dc=example,dc=com
objectClass: organizationalRole
cn: Manager
description: Directory Manager

# People (ユーザーコンテナ)
dn: ou=People,dc=example,dc=com
objectClass: organizationalUnit
ou: People

# Group (グループコンテナ)
dn: ou=Group,dc=example,dc=com
objectClass: organizationalUnit
ou: Group

ldapaddコマンドで、先ほどのファイルを読み込ませ、ベースドメインの登録を行う。

[root@ldapsv ~]# ldapadd -x -D "cn=Manager,dc=example,dc=com" -W -f ./ldap_work/base.ldif
Enter LDAP Password:(managerP@ssword) 表示されない。rootPWでないことに注意
adding new entry "dc=example,dc=com"

adding new entry "cn=Manager,dc=example,dc=com"

adding new entry "ou=People,dc=example,dc=com"

adding new entry "ou=Group,dc=example,dc=com"

ここまでの登録を確認する。
以下のように出てくるはず。

[root@ldapsv ~]# ldapsearch -x -LLL -H ldap:/// -b dc=example,dc=com
dn: dc=example,dc=com
objectClass: dcObject
objectClass: organization
dc: example
o: Example Inc.

dn: cn=Manager,dc=example,dc=com
objectClass: organizationalRole
cn: Manager
description: Directory Manager

dn: ou=People,dc=example,dc=com
objectClass: organizationalUnit
ou: People

dn: ou=Group,dc=example,dc=com
objectClass: organizationalUnit
ou: Group

引き続いて、マルチマスターレプリケーションを行うために、レプリケーションモジュールの導入を行う。

[root@ldapsv ~]# vi ./ldap_work/syncprov-module.ldif
dn: cn=module,cn=config
objectClass: olcModuleList
cn: module
olcModulePath: /usr/lib64/openldap
olcModuleLoad: syncprov.la

モジュールを導入する為に、ldapaddコマンドで先ほどのldifファイルを読み込ませる。

[root@ldapsv ~]# ldapadd -Y EXTERNAL -H ldapi:// -f ./ldap_work/syncprov-module.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
adding new entry "cn=module,cn=config"

モジュールが読み込まれているか確認。

[root@ldapsv ~]# ldapsearch -LLL -Y EXTERNAL -H ldapi:/// -b "cn=config" "cn=module{0}"
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
dn: cn=module{0},cn=config
objectClass: olcModuleList
cn: module{0}
olcModulePath: /usr/lib64/openldap
olcModuleLoad: {0}syncprov.la

続いて、レプリケーションを行うデータベースに対してプロバイダの設定を行うldifファイルを作成する

[root@ldapsv ~]# vi ./ldap_work/syncprov.ldif
dn: olcOverlay=syncprov,olcDatabase={2}bdb,cn=config
objectClass: olcOverlayConfig
objectClass: olcSyncProvConfig
olcOverlay: syncprov
olcSpSessionLog: 100

ldapaddコマンドで登録。

[root@ldapsv ~]# ldapadd -Y EXTERNAL -H ldapi:// -f ./ldap_work/syncprov.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
adding new entry "olcOverlay=syncprov,olcDatabase={2}bdb,cn=config"

ここまで2台のサーバーに同一の設定となる。
次のミラー設定はお互いのサーバーを指定する必要があるため、若干設定の違うldifファイルをそれぞれに作成する。
具体的には、olcServerIDをそれぞれ違うものにして、olcSyncReplのproviderを相手先サーバーを指定する(但し、ridは同じ)。
サーバー1

[root@ldapsv01 ~]# vi ./ldap_work/mirror1.ldif
dn: cn=config
changetype: modify
replace: olcServerID
olcServerID: 1

dn: cn=module{0},cn=config
changetype: modify
add: olcModuleLoad
olcModuleLoad: syncprov

dn: olcDatabase={2}bdb,cn=config
changetype: modify
add: olcDbIndex
olcDbIndex: entryCSN eq
-
add: olcDbIndex
olcDbIndex: entryUUID eq
-
add: olcSyncRepl
olcSyncRepl: rid=001 provider=ldap://ldapsv02.example.com
 bindmethod=simple binddn="cn=Manager,dc=example,dc=com" credentials=managerP@ssword
 searchbase="dc=example,dc=com" schemachecking=on
 type=refreshAndPersist retry="60 +"
-
add: olcMirrorMode
olcMirrorMode: TRUE

dn: olcOverlay=syncprov,olcDatabase={2}bdb,cn=config
changetype: add
objectClass: olcOverlayConfig
objectClass: olcSyncProvConfig
olcOverlay: syncprov

サーバー2

[root@ldapsv02 ~]# vi ./ldap_work/mirror2.ldif
dn: cn=config
changetype: modify
replace: olcServerID
olcServerID: 2

dn: cn=module{0},cn=config
changetype: modify
add: olcModuleLoad
olcModuleLoad: syncprov

dn: olcDatabase={2}bdb,cn=config
changetype: modify
add: olcDbIndex
olcDbIndex: entryCSN eq
-
add: olcDbIndex
olcDbIndex: entryUUID eq
-
add: olcSyncRepl
olcSyncRepl: rid=001 provider=ldap://ldapsv01.example.com
 bindmethod=simple binddn="cn=Manager,dc=example,dc=com" credentials=managerP@ssword
 searchbase="dc=example,dc=com" schemachecking=on
 type=refreshAndPersist retry="60 +"
-
add: olcMirrorMode
olcMirrorMode: TRUE

dn: olcOverlay=syncprov,olcDatabase={2}bdb,cn=config
changetype: add
objectClass: olcOverlayConfig
objectClass: olcSyncProvConfig
olcOverlay: syncprov

[root@ldapsv01 ~]# ldapmodify -Y EXTERNAL -H ldapi:// -f ./ldap_work/mirror1.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "cn=config"

modifying entry "cn=module{0},cn=config"

modifying entry "olcDatabase={2}bdb,cn=config"

adding new entry "olcOverlay=syncprov,olcDatabase={2}bdb,cn=config"

[root@ldapsv02 ~]# ldapmodify -Y EXTERNAL -H ldapi:// -f ./ldap_work/mirror2.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "cn=config"

modifying entry "cn=module{0},cn=config"

modifying entry "olcDatabase={2}bdb,cn=config"

adding new entry "olcOverlay=syncprov,olcDatabase={2}bdb,cn=config"

以上でマルチマスタの設定が完了。
どちらのサーバーで登録や変更を実施しても、相手先にも同一の内容が反映されるはず。

尚、グループやユーザーの登録は以下のようにすればできる。
コマンドからやるのが面倒な人は、いろいろなGUIツールも出ているのでそちらを使うのもあり。

グループ

[root@ldapsv ~]# vi ./ldap_work/GroupName.ldif
dn: cn=GroupName,ou=Group,dc=example,dc=com
objectClass: posixGroup
objectClass: top
cn: GroupName
gidNumber: 10001

[root@ldapsv ~]# ldapadd -x -D "cn=Manager,dc=example,dc=com" -W -f ./ldap_work/GroupName.ldif
Enter LDAP Password:(managerP@ssword) 表示されない。rootPWでないことに注意
adding new entry "cn=GroupName,ou=Group,dc=example,dc=com"

ユーザー

[root@ldapsv ~]# vi ./ldap_work/UserName.ldif
dn: uid=UserName,ou=People,dc=example,dc=com
uid: UserName
cn: UserName
objectClass: account
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
userPassword: {SSHA}ibJtlv2QbP1SsfV1qLMnU5oS56KZmPYw
shadowLastChange: 15862
shadowMin: 0
shadowMax: 99999
shadowWarning: 7
loginShell: /bin/bash
uidNumber: 10001
gidNumber: 10001
homeDirectory: /home/UserName

[root@ldapsv ~]# ldapadd -x -D "cn=Manager,dc=example,dc=com" -W -f ./ldap_work/UserName.ldif
Enter LDAP Password:(managerP@ssword) 表示されない。rootPWでないことに注意
adding new entry "uid=UserName,ou=People,dc=example,dc=com"

広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Google フォト

Google アカウントを使ってコメントしています。 ログアウト /  変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

%s と連携中