Red Hat Enterprise Linux 7 (RHEL7) で利用できるOpenLDAPは、ユーザやパスワード情報を一元管理し、認証機能を提供することができる。ただし、Red Hat Enterprise Linux 8 (RHEL8) になってから、OpenLDAPは非サポートとなり、代わりに「Red Hat Directory Server (RHDS)」が利用できるようになった。
なお、RHEL 8でもしOpenLDAPを利用したい要件がある場合の選択肢としては、OSSTech製のOpenLDAPを利用するという方法もある。
そのような状況ではあるが、本記事では純粋な「RHEL 7のOpenLDAP」を使ってLDAPサーバを構築する手順を記載する。内容が多いため、以下の3回に分けて記載する。
- OpenLDAP入門① (OpenLDAP初期構築手順) ←★本記事
- OpenLDAP入門② (OpenLDAPでLDAPSを有効化する)
- OpenLDAP入門③ (LinuxのSSSDにてOpenLDAPと認証連携する)
環境
前述した通り、今回はRHEL 7のOpenLDAPを構築する。
- OS : Red Hat Enterprise Linux 7.7
- OpenLDAP : 2.4.44
OpenLDAPのドメイン等の情報は以下とする。
設定項目 | 設定値 |
---|---|
ドメイン | dc=example,dc=com |
RootDN | cn=Manager,dc=example,dc=com |
OU | ou=group,dc=example,dc=com |
グループ | cn=ldapgrp,ou=group,dc=example,dc=com |
ユーザ1 | uid=user01,ou=group,dc=example,dc=com |
ユーザ2 | uid=user01,ou=group,dc=example,dc=com |
OpenLDAPサーバ構築手順
1. OpenLDAPパッケージのインストール
OpenLDAPを使うためには、yum
を使用してopenldap-servers
とopenldap-clients
をインストールするだけでよい。
# yum install openldap-servers openldap-clients -y
~(中略)~
インストール:
openldap-clients.x86_64 0:2.4.44-21.el7_6
openldap-servers.x86_64 0:2.4.44-21.el7_6
完了しました!
特に依存関係もないため、rpm
を使って直接インストールすることも可能。RHEL 7のインストールメディアからインストールする場合は、以下の通り実行する。
# rpm -ivh openldap-servers-2.4.44-21.el7_6.x86_64.rpm
# rpm -ivh openldap-clients-2.4.44-21.el7_6.x86_64.rpm
2. OpenLDAPの起動
インストールをしたら、とりあえずOpenLDAPを起動させる。
# systemctl start slapd
# systemctl enable slapd
3. 管理用パスワードの設定
いよいよOpenLDAPの設定を実施していく。まず、設定ファイルをディレクトリ丸ごとバックアップしておこう。
# cp -pr /etc/openldap/slapd.d{,_20211016}
# ls -ld /etc/openldap/slapd.d*
drwxr-x---. 3 ldap ldap 45 7月 18 14:49 /etc/openldap/slapd.d
drwxr-x---. 3 ldap ldap 45 7月 18 14:49 /etc/openldap/slapd.d_20210718
OpenLDAPはldapadd
、ldapmodify
、ldapdelete
コマンドを使用して設定する。これらのコマンドに「LDIF」と呼ばれるLDAP用の設定情報が記載されたファイルを読み込ませることで、直接設定ファイルを編集しなくとも設定することができる。
今回はldapadd
コマンドにて設定を行う。構文は以下と覚えておく。
ldapadd -Y EXTERNAL -H ldapi:/// -f [ファイル名].ldif
-Y EXTERNAL : root作業時のパスワード入力をスキップ
-H ldapi:/// : ローカルのLDAPに対する作業
まずOpenLDAPに必要となる管理用パスワードを設定する。パスワードは平文ではなくハッシュ値にてLDIFファイルに記載する。パスワードのハッシュ値を生成するためのコマンドとして、slappasswd
が用意されているため、こちらを利用してパスワードのハッシュ値を生成する。
生成されたパスワードはソルト付きのSHA-1のハッシュ値となり、{SSHA}
という文字が先頭に付いた32文字となる。
# slappasswd
New password:
Re-enter new password:
{SSHA}XXX~(省略)~XXX
以下の通りLDIFファイルを作成して、ldapadd
コマンドにて設定する。
# cat << EOF > rootpw.ldif
dn: olcDatabase={0}config,cn=config
changetype: modify
add: olcRootDN
olcRootDN: cn=config
-
add: olcRootPW
olcRootPW: {SSHA}XXX~(省略)~XXX
EOF
# ldapadd -Y EXTERNAL -H ldapi:/// -f 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
を使う。指定するオプションは以下の通り。
オプション | 説明 |
---|---|
-LLL |
LDIF バージョンを表示させないため、Lオプションを3つ付与する。 |
-b |
LDAPの検索位置を指定する。 |
実際に確認した結果は以下の通りとなる。
# ldapsearch -LLL -Y EXTERNAL -H ldapi:/// -b 'olcDatabase={0}config,cn=config'
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
dn: olcDatabase={0}config,cn=config
objectClass: olcDatabaseConfig
olcDatabase: {0}config
olcAccess: {0}to * by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external
,cn=auth" manage by * none
olcRootDN: cn=config
olcRootPW: {SSHA}XXX~(省略)~XXX
4. 管理者パスワードの設定
管理者パスワードとして、monitorとhdbのパスワードを設定する。monitorはモニターデータベース、hdbはLDAPのデータベース本体と理解しておこう。
今回、それぞれの管理ユーザは「cn=Manager,dc=example,dc=com
」で設定する。この管理ユーザをRootDNと呼ぶ。
以下の通りLDIFファイルを作成して、ldapadd
コマンドにて設定する。
# cat << EOF > hdbpw.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
-
replace: olcRootDN
olcRootDN: cn=Manager,dc=example,dc=com
-
add: olcRootPW
olcRootPW: {SSHA}XXX~(省略)~XXX
EOF
# ldapadd -Y EXTERNAL -H ldapi:/// -f hdbpw.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "olcDatabase={1}monitor,cn=config"
modifying entry "olcDatabase={2}hdb,cn=config"
5. スキーマの追加
LDAPで利用するスキーマを設定する。スキーマは、cosine.ldif
、inetorgperson.ldif
、nis.ldif
を登録すればLDAPサーバとして利用できる。
登録コマンドは以下の通り。
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif
実際の実行結果は以下の通り。
# ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
adding new entry "cn=cosine,cn=schema,cn=config"
# ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
adding new entry "cn=inetorgperson,cn=schema,cn=config"
# ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
adding new entry "cn=nis,cn=schema,cn=config"
6. BaseDN、OU、グループを登録
ここまで設定すれば、LDAPサーバにBaseDNや、OU、グループが登録できる。
設定項目 | 設定値 |
---|---|
ドメイン | dc=example,dc=com |
OU | ou=group,dc=example,dc=com |
グループ | cn=ldapgrp,ou=group,dc=example,dc=com |
以下の通りLDIFファイルを作成する。
# cat << EOF > base.ldif
dn: dc=example,dc=com
objectClass: top
objectClass: dcObject
objectClass: organization
dc: example
o: Example Inc.
dn: ou=group,dc=example,dc=com
objectClass: organizationalUnit
ou: Group
dn: cn=ldapgrp,ou=group,dc=example,dc=com
objectClass: posixGroup
gidNumber: 10000
cn: ldapgrp
EOF
ここからはldapadd
コマンドを利用することは変わらないが、少しオプションが異なり、先ほど設定した管理者 (cn=Manager,dc=example,dc=com
) を指定して登録を行う点に注意する。
# ldapadd -x -D "cn=Manager,dc=example,dc=com" -w '[RootDNのパスワード]' -f base.ldif
adding new entry "dc=example,dc=com"
adding new entry "ou=group,dc=example,dc=com"
adding new entry "cn=ldapgrp,ou=group,dc=example,dc=com"
7. ユーザを登録
ユーザを登録する。
設定項目 | 設定値 |
---|---|
ユーザ1 | uid=user01,ou=group,dc=example,dc=com |
ユーザ2 | uid=user01,ou=group,dc=example,dc=com |
以下の通りLDIFファイルを作成して、ldapadd
コマンドにて設定する。
# cat << EOF > user.ldif
dn: uid=user01,ou=group,dc=example,dc=com
uid: user01
cn: Hoge Hoge
sn: user01
objectClass: posixAccount
objectClass: inetOrgPerson
userPassword: {SSHA}XXX~(省略)~XXX
loginShell: /bin/bash
uidNumber: 10001
gidNumber: 10000
homeDirectory: /home/user01
dn: uid=user02,ou=group,dc=example,dc=com
uid: user02
cn: Hoge Hoge
sn: user02
objectClass: posixAccount
objectClass: inetOrgPerson
userPassword: {SSHA}XXX~(省略)~XXX
loginShell: /bin/bash
uidNumber: 10002
gidNumber: 10000
homeDirectory: /home/user02
EOF
# ldapadd -x -D "cn=Manager,dc=example,dc=com" -w '[RootDNのパスワード]' -f user.ldif
adding new entry "uid=user01,ou=group,dc=example,dc=com"
adding new entry "uid=user02,ou=group,dc=example,dc=com"
これで一通り設定が完了したので、最後にldapsearch
コマンドで登録結果を確認してみよう。
# ldapsearch -LLL -Y EXTERNAL -H ldapi:/// -b 'ou=group,dc=example,dc=com'
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
dn: ou=group,dc=example,dc=com ←★OU「group」の情報
objectClass: organizationalUnit
ou: Group
dn: cn=ldapgrp,ou=group,dc=example,dc=com ←★グループ「ldapgrp」の情報
objectClass: posixGroup
gidNumber: 10000
cn: ldapgrp
dn: uid=user01,ou=group,dc=example,dc=com ←★ユーザ「user01」の情報
uid: user01
cn: Hoge Hoge
sn: user01
objectClass: posixAccount
objectClass: inetOrgPerson
userPassword:: e1NTSEF9TFdVQXZyNzUvQlBpUDJ2MWZ5amxFdDlEVlB0d0lVYmU=
loginShell: /bin/bash
uidNumber: 10001
gidNumber: 10000
homeDirectory: /home/user01
dn: uid=user02,ou=group,dc=example,dc=com ←★ユーザ「user02」の情報
uid: user02
cn: Hoge Hoge
sn: user02
objectClass: posixAccount
objectClass: inetOrgPerson
userPassword:: e1NTSEF9TFdVQXZyNzUvQlBpUDJ2MWZ5amxFdDlEVlB0d0lVYmU=
loginShell: /bin/bash
uidNumber: 10002
gidNumber: 10000
homeDirectory: /home/user02
8. LDP.exe
を使った確認
ここまでの設定を行ったことで、OpenLDAPサーバに対してLDAPによる接続が可能となる。
実際に、外部からアクセスできることをWindows ServerのLDP.exe
を利用して確認する。なお、LDP.exe
は、役割管理ツールの「AD DSおよびAD LDSツール」に含まれる。
「ファイル名を指定して実行」にてldp
を入力し「OK」を押すと、LDP.exe
が起動する。
「ファイル」→「接続」を選択し、OpenLDAPサーバのIPアドレスとポート番号「389」を指定する。また、今回はLDAPSを使用しないため、SSLのチェックを外しておく。
次に、「表示」→「ツリー」を選択し、「ou=group,dc=example,dc=com
」を入力する。
以下の通りOUに登録されているグループとユーザが表示されれば、問題なくOpenLDAPの設定は完了となる。
なお、バインドせずともOpenLDAPサーバに登録されているグループとユーザが表示される理由は、LDAPのデータベースに対してアクセス権を設定していない場合は、デフォルトで匿名ユーザの参照権限が有効となるためである。権限の設定方法は、別記事で紹介することとし、今回は割愛する。
以上で、OpenLDAPサーバの構築は完了となる。次回以降は今回構築したOpenLDAPサーバに対して、LDAPSの有効化やLinuxのSSSDを使って認証連携を行うことにする。
0 件のコメント:
コメントを投稿