CentOS 7.0(RHEL 7.0)にはLDAP機能としてOpenLDAPを内包しています。
CentOS 6.0以降は設定方法が変わり、slapd.confを使わない新しい方法 OLC(On-Line Configuration)となりました。
その結果、取っつきにくくなりました。
redhatカスタマポータルにはドキュメントが用意されていますが、これを見ても何から始めたらいいのかわかりません。
fuketchさんがCentOS6.4でOpenLDAP構築手順をプログに記載していました。
CentOS 7.0ではファイアウォール/シスログ/サービス等の仕組みが変更されていることから、その手順を参考に新しくCentOS 7.0版のOpenLDAP構築手順を整理してみました。
環境
- CentOS 7.0.1406
- OpenLDAP 2.4.39-3
前提条件
外部からldap接続する為にfirewalldの設定を変更しておきます。
ldapプロトコル(port:389)を許可します。
[root@jikken2 ~]# firewall-cmd --add-service=ldap --zone=public
success
※ 現在のファイアウォールにldap を追加します。
[root@jikken2 ~]# firewall-cmd --add-service=ldap --zone=public --permanent
success
※ 永続化設定のファイアウォールにldap を追加します。
[root@jikken2 ~]# firewall-cmd --list-all
public (default, active)
interfaces: eth0
sources:
services: dhcpv6-client ldap ssh
ports:
masquerade: no
forward-ports:
icmp-blocks:
rich rules:
OpenLDAPインストール
OpenLDAPのパッケージのインストールします。
[root@jikken2 ~]# yum -y install openldap openldap-clients openldap-servers
:中略
完了しました!
Berkeley DBのDB設定ファイルをサンプルからコピーします。
[root@jikken2 ~]# cp -p /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
サーバ起動時にslapdサービスを自動起動するようにします。
[root@jikken2 ~]# systemctl enable slapd
slapdサービスを起動します。
[root@jikken2 ~]# systemctl start slapd
slapd.dディレクトリの内容
OLCではslapd.confファイルの代わりに /etc/openldap/slapd.d 配下にあるldifファイルが設定内容となります。
ldifファイルを直接編集することは推奨されていません。オンラインでslapdが書き換えます。
各lidfファイルにはCRCで誤り検出の値が記載されている為、設定内容だけ書き換えてもslapd起動時にエラーとなります。
CRC値を削除してしまえば直接編集することは可能ですが。。。
[root@jikken2 ~]# cd /etc/openldap/slapd.d/
[root@jikken2 slapd.d]# ll
合計 8
drwxr-x---. 3 ldap ldap 4096 1月 4 10:19 cn=config
-rw-------. 1 ldap ldap 604 1月 4 11:15 cn=config.ldif
※ cn=config.ldif はグローバル設定のファイルです。
[root@jikken2 slapd.d]# cat cn\=config.ldif
# AUTO-GENERATED FILE - DO NOT EDIT!! Use ldapmodify.
# CRC32 49cdd986 ⇚ CRC
dn: cn=config
objectClass: olcGlobal
cn: config
olcArgsFile: /var/run/openldap/slapd.args
olcPidFile: /var/run/openldap/slapd.pid
:(中略)
[root@jikken2 slapd.d]# ll cn=config
合計 20
drwxr-x---. 2 ldap ldap 28 1月 4 09:52 cn=schema
-rw-------. 1 ldap ldap 378 1月 4 09:52 cn=schema.ldif
-rw-------. 1 ldap ldap 408 1月 4 09:52 olcDatabase={-1}frontend.ldif
-rw-------. 1 ldap ldap 580 1月 4 10:05 olcDatabase={0}config.ldif
-rw-------. 1 ldap ldap 561 1月 4 10:19 olcDatabase={1}monitor.ldif
-rw-------. 1 ldap ldap 626 1月 4 10:19 olcDatabase={2}hdb.ldif
※ CentOS7.0からは バックエンドのデータベースがBDBからHDBへ変更されています。
HDBはBDBの改良版です。ldifファイルがolcDatabase={2}bdb.ldifから
olcDatabase={2}hdb.ldifへ変更されています。
slapd.dデータの編集
ldapデータを書き換える為の作業用ldifファイルを置く、作業用ディレクトリを作成します。
[root@jikken2 slapd.d]# cd ~
[root@jikken2 ~]# mkdir ./ldap_work
各パスワードへ設定するハッシュ値を生成します。元の平文パスワードは"secret"です。
ソルト付きSHAなので毎回生成される値は異なります。
[root@jikken2 ~]# slappasswd
New password:
Re-enter new password:
{SSHA}+SB7Dp2OD5Yt1/j+JVqPd5sHwGeEE1Yv
ネットワーク経由でRootユーザでアクセスする為にconfigデータベースのRootユーザのパスワードを変更します。
ここではパスワードsecretを平文で登録します。本来はslappasswdコマンドでハッシュ値を生成して登録すべきです。
[root@jikken2 ~]# vi ./ldap_work/add_rootPw.ldif
dn: olcDatabase={0}config,cn=config
changetype: modify
add: olcRootPW
olcRootPW: {SSHA}+SB7Dp2OD5Yt1/j+JVqPd5sHwGeEE1Yv
ldapaddコマンドで、add_rootPw.ldifの内容と登録します。
[root@jikken2 ~]# 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"
※ -Y EXTERNALとをつけることでローカル環境からパスワード無しでコマンドを実行できます。
LDAPベースエントリの変更
インストール直後のBDBのベースDNはmy-domain,dc=comとなっています。
それを dc=example,dc=com へ変更します。
[root@jikken2 ~]# 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}hdb,cn=config
changetype: modify
replace: olcSuffix
olcSuffix: dc=example,dc=com
dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcRootDN
olcRootDN: cn=Manager,dc=example,dc=com
dn: olcDatabase={2}hdb,cn=config
changetype: modify
add: olcRootPW
olcRootPW: {SSHA}+SB7Dp2OD5Yt1/j+JVqPd5sHwGeEE1Yv
[root@jikken2 ~]# ldapmodify -x -D cn=config -w secret -f ./ldap_work/change-domain.ldif
modifying entry "olcDatabase={1}monitor,cn=config"
modifying entry "olcDatabase={2}hdb,cn=config"
modifying entry "olcDatabase={2}hdb,cn=config"
modifying entry "olcDatabase={2}hdb,cn=config"
ベースエントリを登録します。
[root@jikken2 ~]# vi ./ldap_work/base.ldif
dn: dc=example,dc=com
objectClass: dcObject
objectClass: organization
dc: example
o: Example Inc.
dn: ou=People,dc=example,dc=com
objectClass: organizationalUnit
ou: People
dn: ou=Group,dc=example,dc=com
objectClass: organizationalUnit
ou: Group
[root@jikken2 ~]# ldapadd -x -D "cn=Manager,dc=example,dc=com" -w secret -f ./ldap_work/base.ldif
ログファイルの参照
ログファイルを参照します。
従来は tailコマンドでしたが、CentOS 7.0からは journalコマンドで参照します。
[root@jikken2 ~]# journalctl -u slapd -f
-- Logs begin at 日 2015-01-04 11:38:41 JST. --
1月 04 18:02:07 jikken2 slapd[5616]: conn=1013 op=0 RESULT tag=97 err=0 text=
1月 04 18:02:07 jikken2 slapd[5616]: conn=1013 op=1 MOD dn="cn=config"
:(中略)
デフォルトのログレベルはstats(256)です。
ログレベル変更はグローバルコンフィグエントリのolcLogLevelを書き換えます。
ログレベルを0に変更して一切ログが出力されないようにします。
他の値に変更する場合は下記を参照してください。
http://www.openldap.org/doc/admin24/slapdconf2.html
短いldifなので標準入力から直接投入します。
[root@jikken2 ~]# ldapmodify -x -D cn=config -w secret <<EOF
dn: cn=config
changetype: modify
add: olcLogLevel
olcLogLevel: 0
EOF
2回目以降の書き換えはreplaceなので次のように実行します。
[root@jikken2 ~]# ldapmodify -x -D cn=config -w secret <<EOF
dn: cn=config
changetype: modify
replace: olcLogLevel
olcLogLevel: 0
EOF
外部ホストから接続
ファイアウォールで389ポートをアクセス許可したので外部ホストのLDAPクライアントからアクセスすることが可能です。
今回はWindowsクライントのLDAP GUIツール JXplorerからアクセスしてみます。
- cn=configへのアクセス
JXplorerは空値の属性も列挙されているので、ldifで変更するよりも容易です。
- ベースエントリ dc=example,dc=comへのアクセス
参考サイト
- [Blog on fuketch.net OpenLDAPの構築]
(https://fuketch.wordpress.com/2013/09/11/openldap%E3%81%AE%E6%A7%8B%E7%AF%89/)