Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
124
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

@kazukikudo

CentOS7.0でOpenLDAP構築

CentOS 7.0(RHEL 7.0)にはLDAP機能としてOpenLDAPを内包しています。
CentOS 6.0以降は設定方法が変わり、slapd.confを使わない新しい方法 OLC(On-Line Configuration)となりました。
その結果、取っつきにくくなりました。

redhatカスタマポータルにはドキュメントが用意されていますが、これを見ても何から始めたらいいのかわかりません。 :disappointed_relieved:

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へのアクセス

jxplorer1.PNG

jxplorer2.PNG

JXplorerは空値の属性も列挙されているので、ldifで変更するよりも容易です。

  • ベースエントリ dc=example,dc=comへのアクセス

jxplorer3.PNG

jxplorer4.PNG

参考サイト

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
124
Help us understand the problem. What are the problem?