2.OpenLDAPサーバの構築② -管理者パスワードの設定

投稿者: | 2017年12月2日

1.OpenLDAPサーバの構築① -インストールの続き。

ldapサーバの環境要件を以下に纏める。

ldapサーバ環境要件

設定項目 設定内容 備考
ホスト名 ldapserver
IPアドレス 192.168.3.6/24 内部環境のためクラスCアドレス
ゲートウェイ 192.168.3.1
ネームサーバ 192.168.3.1 自宅のHGWなのでゲートウェイと同じ
ベースDN dc=abc,dc=def,dc=com
管理者DN cn=Manager,dc=abc,dc=def,dc=com
組織名(ou) Group,People
ldapユーザ名 user01
ldapグループ名 ldapmanager

■DBコンフィグのコピー

設定の前にDBコンフィグのコピーが必要。

[root@ldapserver ~]# cp -p /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
[root@ldapserver ~]# ls -l /var/lib/ldap/DB_CONFIG
-rw-r--r--. 1 root root 845  8月  4 23:23 /var/lib/ldap/DB_CONFIG

■slapdの構成を確認

openldap-serversをインストールすると、/etc/openldap配下に以下のファイルやディレクトリが生成される。

[root@ldapserver openldap]# ls -lrt /etc/openldap
合計 12
drwxr-x---. 3 ldap ldap   45  8月  4 23:24 slapd.d
-rw-r--r--. 1 root root  363  8月  4 23:24 ldap.conf
-rw-r--r--. 1 root root  121  8月  4 23:24 check_password.conf
drwxr-xr-x. 2 root root   90 12月  2 16:03 certs
drwxr-xr-x. 2 root root 4096 12月  2 17:15 schema

slapd.d配下をのぞいてみると、

[root@ldapserver openldap]# cd /etc/openldap/slapd.d
[root@ldapserver slapd.d]# ls -lrt
合計 4
-rw-------. 1 ldap ldap 589 12月  2 16:03 cn=config.ldif
drwxr-x---. 3 ldap ldap 182 12月  2 16:03 cn=config

.ldifという拡張子のファイルがある。中身は

[root@ldapserver slapd.d]# cat cn=config.ldif
# AUTO-GENERATED FILE - DO NOT EDIT!! Use ldapmodify.
# CRC32 a338e629
dn: cn=config
objectClass: olcGlobal
cn: config
olcArgsFile: /var/run/openldap/slapd.args
olcPidFile: /var/run/openldap/slapd.pid
olcTLSCACertificatePath: /etc/openldap/certs
                  :
                  :

という感じ。
「dn:」「cn:」は属性(attribute)と呼ばれるもの。
「objectClass」はオブジェクトクラスで、ldif内で属性を指定する際に、その属性の所属元となるもの。
原則objectClassがないと、属性が使えない。
objectClassの詳細については後々に。ldapはこのように「dn:」や「cn:」のような「:」で宣言したデータ群で構成していくことを頭の片隅に入れておこう。
【注意】
/etc/openldap/slapd.d配下のファイルはviなどで書き換えたりすると正常に動作しない可能性があるので、書き換えたりしないこと。


■管理者パスワードの設定

CentOS6までは/etc/openldap/slapd.confという設定ファイルが存在し、その中でスキーマ(objectClassや属性を使えるようにするためのデータ)を指定していたが、CentOS7からは、
ldapadd
ldapmodify
ldapdel
というコマンドでldapの設定を行うことになる。そのためslapd.confファイルは存在しない。
またそれらのコマンドを実行する際にldifファイルを指定することにより、そのファイルの内容をldapに反映させることができる。
ldifファイルは管理者パスワードやベースエントリを変更する場合は個人でviで作成し、スキーマを投入する際はデフォルトで用意されている/etc/openldap/schema配下のldifファイルや、特殊なスキーマについては関連サイトから必要なものをダウンロードして投入していく。

[root@ldapserver ~]# mkdir /root/ldif
[root@ldapserver ~]# ls -lrt /root
合計 4
-rw-------. 1 root root 1422 12月  2 09:17 anaconda-ks.cfg
drwxr-xr-x. 2 root root    6 12月  3 12:04 ldif

ここに管理者パスワードを設定するldifファイルを作成するのだが、パスワードである以上外部から閲覧できる状態は避けておきたいところ。そこでslappasswordコマンドを使用する。
slappasswordコマンドは、指定した文字列をソルト付きSHA(SSHA)で出力してくれる。

[root@ldapserver ldif]# slappasswd
New password:
Re-enter new password:
{SSHA}G+ZkXh6X/sf0K7roTRVj1zZzyFqSuAa6

New passwordでパスワードを聞かれるので、任意の文字を入力する。ここではmanagerと入力した。
表示された「{SSHA}~」の部分は管理者パスワード設定用ldifファイルを作成する際に使用するので、控えておく。

【注意】
slapasswordは単に指定した文字列をSSHAで出力してくれるだけで、どこかにそのパスワードが設定されるわけではない。

SSHAを控えたら、管理者パスワード設定用ldifファイルを以下の内容に設定する。

[root@ldapserver ~]# vi /root/ldif/rootPW.ldif    ->  ファイル名は任意。

<以下、記述内容>
dn: olcDatabase={0}config,cn=config
changetype: modify
add: olcRootPW
olcRootPW: {SSHA}G+ZkXh6X/sf0K7roTRVj1zZzyFqSuAa6

「dn:」 ⇒ 識別名。管理者パスワードを設定する際は上記内容を指定する。olcRootPWはolcDatabaseの{0}configに設定される。/etc/openldap/slapd.d/cn=config配下にそれっぽい名前のファイル名がいくつかある。cn=configのcnは共通名(common name)で、「config」を指定。
「changetype:」 ⇒ 変更種別。add / modify / delete がある。
「add: 」 ⇒ 属性を追加する際に使う。他にもreplace等がある。パスワード初回設定の場合はaddを指定する。
「olcRootPW」 ⇒ 管理者パスワードを設定する属性。先程slappasswdコマンドで生成したSSHAの内容を記述する。

上記のldifファイルを作成したら、ldapaddコマンドでパスワードを反映させる。

[root@ldapserver ~]# ldapadd -Y EXTERNAL -H ldapi:// -f /root/ldif/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"

ldapaddコマンドのオプションについて
「-Y EXTERNAL」 ⇒ SASLのEXTERNAL認証を使用。
「-H」 ⇒ ldapi:で指定するホスト名(IPアドレス)を指定。ldapサーバ上で操作しているため、ldapi://という記述でOK。-Yオプションとセットで使用する。
「-f」 ⇒ ldifファイルを指定して投入する際に使用する。

modifying entry “olcDatabase={0}config,cn=config” のあとにエラーが出なければOK。

これでパスワードの設定は完了!

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA