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。
これでパスワードの設定は完了!