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 neverかTLS_REQCERT allowの一行を追記すればエラーは解消する場合があります。TLS_REQCERT neverかTLS_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:///で検索値が帰ってくれば完了です。
ここまでが基本的な環境設定になります。
ご参考まで。