Rocky Linux 8 LDAPサーバ構築

Rocky Linux 8.9でOpenLDAPの初期構築を行いました。

1.SSL証明書の作成
ldaps(暗号化通信)でもLDAPを使用したいため、自己証明書を予め準備します。

cd /etc/pki/tls/certs
openssl genrsa -aes128 2048 > server.key
※パスフレーズを設定しないと進まないので入力する(後作業で使用するので忘れない)
秘密鍵からパスフレーズを削除する
openssl rsa -in server.key -out server.key
※前項のパスフレーズを入力する必要がある
証明書の作成
openssl req -utf8 -new -key server.key -out server.csr
※以下の項目を入力する必要がある。
Country Name (2 letter code) [XX]:
※国 JP等
State or Province Name (full name) []:
※地域 Tokyo等
Locality Name (eg, city) [Default City]:
※都市 Tokyo等
Organization Name (eg, company) [Default Company Ltd]:
※組織名 会社名等
Organizational Unit Name (eg, section) []:
※部門名 部署名等
Common Name (eg, your name or your server's hostname) []:
※サーバーのFQDN localhost.test.local等
Email Address []:
※管理者のメールアドレス

以下の、Extraは空白でも大丈夫です。
A challenge password []:
An optional company name []:
有効期限10年の自己署名証明書にする
openssl x509 -in server.csr -out server.crt -req -signkey server.key -days 3650
パーミッションを変更
chmod 600 server.key

2.OpenLDAPのインストール
OpenLDAPをインストールしてslapdサービスを起動

dnf --enablerepo=powertools -y install openldap-servers openldap-clients
cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
chown ldap. /var/lib/ldap/DB_CONFIG
systemctl enable --now slapd
systemctl status slapd

※Silapdがactive(running)であることを確認。crcl+cでコンソールを開放する。exit

OpenLDAPの特権DNのパスワード(olcRootPW)設定
slappasswd
※パスワードはハッシュ化され「{SSHA}**************」で表示される。後工程で使用するので、コピーしておくこと
vi chrootpw.ldif
※管理者パスワードを指定する
dn: olcDatabase={0}config,cn=config
changetype: modify
add: olcRootPW
olcRootPW: {SSHA}**************
ldifを実行
ldapadd -Y EXTERNAL -H ldapi:/// -f chrootpw.ldif

おそらく必須となるスキーマと事前に登録する。

ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif
ドメイン名の設定
※ディレクトリマネージャーのパスワード生成

slappasswd
New password:
Re-enter new password:
{SSHA}
**************
ドメイン変更用のldifの作成
vi chdomain.ldif

※dc=#####,dc=##### にドメイン名を入力
※ディレクトリマネージャーのパスワード生成

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=#####,dc=#####" read by * none

dn: olcDatabase={2}mdb,cn=config
changetype: modify
replace: olcSuffix
olcSuffix: dc=#####,dc=#####

dn: olcDatabase={2}mdb,cn=config
changetype: modify
replace: olcRootDN
olcRootDN: cn=Manager,dc=#####,dc=#####

dn: olcDatabase={2}mdb,cn=config
changetype: modify
add: olcRootPW
olcRootPW: {SSHA}xxxxxxxxxxxxxxxxxxxxxxxx

dn: olcDatabase={2}mdb,cn=config
changetype: modify
add: olcAccess
olcAccess: {0}to attrs=userPassword,shadowLastChange by
  dn="cn=Manager,dc=#####,dc=#####" write by anonymous auth by self write by * none
olcAccess: {1}to dn.base="" by * read
olcAccess: {2}to * by dn="cn=Manager,dc=#####,dc=#####" write by * read

※上のテキストをコピー&ペーストする場合、改行コードとスペースに気を付けてください!!

ドメイン変更用ldifの実行
ldapmodify -Y EXTERNAL -H ldapi:/// -f chdomain.ldif

baseドメイン用ldif作成

vi basedomain.ldif
※dc=#####,dc=##### にドメイン名を入力
※o:とdc:を入力します
dn: dc=#####,dc=#####
objectClass: top
objectClass: dcObject
objectclass: organization
o: 「********」
dc: 「******」

dn: cn=Manager,dc=#####,dc=#####
objectClass: organizationalRole
cn: Manager
description: Directory Manager

dn: ou=People,dc=#####,dc=#####
objectClass: organizationalUnit
ou: People

dn: ou=Group,dc=#####,dc=#####
objectClass: organizationalUnit
ou: Group
baseドメイン用のldifを実行
ldapadd -x -D cn=Manager,dc=#####,dc=##### -W -f basedomain.ldif
※ディレクトリマネージャのパスワード入力が必要です

SlapdのTLS設定

cp /etc/pki/tls/certs/server.key /etc/pki/tls/certs/server.crt /etc/pki/tls/certs/ca-bundle.crt /etc/openldap/certs/
chown ldap. /etc/openldap/certs/server.key /etc/openldap/certs/server.crt /etc/openldap/certs/ca-bundle.crt
TLS用ldifの作成
vi mod_ssl.ldif
dn: cn=config
changetype: modify
add: olcTLSCACertificateFile
olcTLSCACertificateFile: /etc/openldap/certs/ca-bundle.crt
-
replace: olcTLSCertificateFile
olcTLSCertificateFile: /etc/openldap/certs/server.crt
-
replace: olcTLSCertificateKeyFile
olcTLSCertificateKeyFile: /etc/openldap/certs/server.key

文中の-も必要なので注意ください

TLS用ldifの実行
ldapmodify -Y EXTERNAL -H ldapi:/// -f mod_ssl.ldif
Slapdの再起動
systemctl restart slapd
3.接続確認
Firewallの許可
firewall-cmd --add-service={ldap,ldaps}
firewall-cmd --runtime-to-permanent
自己証明書エラーの対応
このままですと、以下のようにldapsで接続確認をすると、ldap_sasl_bind(SIMPLE): Can't contact LDAP server (-1)となります。
ldapsearch -x -D "cn=Manager,dc=#####,dc=#####" -w パスワード -b "dc=#####,dc=#####" -H ldaps:///
このため、以下の2つの手順を行う必要があります。パブリック証明書ならエラーはでません。
/etc/openldap/ldap.confにTLS_REQCERT neverTLS_REQCERT allowの一行を追記すればエラーは解消する場合があります。TLS_REQCERT neverTLS_REQCERT allowを追記してもエラーが解消しない場合は証明書関係でミスをしています。ただこの方法で解決してもうまくない(証明書が正常に使用されていない)ので、工夫します。
/etc/openldap/ldap.confにserver.crtがある場合(このページの作業例ではあります)には以下のコマンドを実行します。シンボリックリンクを作成します。
ln -s /etc/openldap/certs/server.crt /etc/openldap/certs/`openssl x509 -noout -hash -in /etc/openldap/certs/server.crt`.0
次に/etc/openldap/ldap.confにしたの一行を追加します。
TLS_CACERTDIR /etc/openldap/certs/
上の2点の作業が完了したら、slapdを再起動します。
systemctl restart slapd
ldapsearch -x -D "cn=Manager,dc=#####,dc=#####" -w PASSWORD -b "dc=#####,dc=#####" -H ldaps:///で検索値が帰ってくれば完了です。
ここまでが基本的な環境設定になります。

ご参考まで。





関連記事

TOP