openldapを6からredhat7へ移行する。
1) まず、設定およびアカウント情報をエクスポートする。
slapcat -b cn=config > ldap-config-20211007.ldif
slapcat > ldap-20211007.ldif
これらのファイル、さらにTLSまわりのファイル(ldap-config-20211007.ldifに記載あり)を移行先のマシンに持ってくる。
2) openldapはインストール済みとする。
yum reinstall openldap openldap-clients openldap-devel openldap-servers libtool-ltdl
3) slapdの設定を格納するディレクトリを用意。
mkdir /etc/openldap/slapd.d
chown ldap /etc/openldap/slapd.d
chgrp ldap /etc/openldap/slapd.d
chmod 700 /etc/open/ldap/slapd.d
4) 設定およびアカウント情報をインポート
slapadd -n 0 -F /etc/openldap/slapd.d -l ldap-config-20211007-tls.ldif
slapadd -F /etc/openldap/slapd.d -l ldap-20211007.ldif
chown -R ldap slapd.d
chgrp -R ldap slapd.d
5) selinuxを外し再起動。
vi /etc/selinux/config
SELINUX=disabled
reboot
6) TLS関連のファイルも設定通りの位置に置く。
7) slapdの起動
systemctl start slapd.service
うまく起動しないときは、コメントに従い
journalctl -xe
で原因を探るのがよい。今回はまずselinuxが動いていてうまく起動できず、さらにTLSの設定ファイルを置かずに起動しようとしてコケた→5), 6)を施して解決。
8) slapdの設定ファイル(gentooの/etc/cond.f/slapd)、redhat7では/etc/sysconfig/slapd
をgentooでのldap設定に習って変更。
/etc/openldap/ldap.confも同様に変更。
9) うまくslapdが起動できたら、slapcat、ldapsearch -xが問題なく動くか試す。
ldapsearch -x がコケる場合、ldapsearch -x -d -1とかしてデバッグレベルを上げて調べるとよい。今回はtlsの自己証明で文句を言われた。ldap.confのTLS_REQCERTをneverに変えたら通るが、下記の解決策を取る。
ldap.confのURI ldaps://....../の......は証明書作成時のCommon nameと一字一句同じでなければいけない。しかし、移行するので、IPアドレス等は同じでない。このため自己証明書を新たにつくることにした。これもgentooでの設定の場合を踏襲した。
古いほうのslapd.confにTLSまわりの設定を合うように更新して、slapd.dに食わせるが、うまく更新してくれない。slapd.dを新たに作り、slapd.confを食わせるも、当然アカウント設定が不足する。アカウント設定のみ再度インポートしてもよいのだが、今回は、基本設定のldap-config-20211007.ldifのTLSの部分だけ合うように変更し、ldap-config-20211007_tls-mod.ldifとし、
新たに用意したslapd.dにこの基本設定、アカウント設定ともにインポートし直した。
slapdを立ち上げ直し、ldap.confのURI ldaps://..../の....をCommon nameと同じにし、TLS_REQCERTをhardにしてldapsearch -xを行ったところ、問題がないようである。
2021/10/29追記
管理者のパスワードがわからない場合,なんとかリセットできないかと探し回ったが,結局,上述のやり方でslapcatで再び吸い出したconfig.ldifをいじって新たにslapd.dを作り上げるほかなかった.linuxのrootのパスワードを忘れたようなものか.
<config.ldifをどういじったか>
config.ldifのなかのolcRootPWはbase64でエンコードされている.これをbase64でデーコドすると,{SSHA}・・・・・・と不可逆暗号化された文字列が出てくる.これを解読するのは諦め,新たにslappasswdで設定したい平文パスワードをうち,SSHA形式の不可逆暗号化された文字列を得る.これをbase64でエンコードし,config.ldifのolcRootPWのところに上書きする.
このいじったconfig.ldifや一般アカウントのldifを上記のやり方でslapaddで新たにslap.dを作り直す.この際,slapdは停止させておく.slapdを起動させると,管理者のパスワードは新しく設定したものになっているのが,例えばユーザーのアカウントパスワードを管理者で変更することで,確認できた.
ldappasswd -x -D "cn=root,dc=gentoo,dc=org" -S -w 新たに設定した平文パスワード "uid=bionic,ou=People,dc=gentoo,dc=org"
New password:
Re-enter new password:
追記2024/03/08
LDAPサーバーの計算機のOSをrhel7.9->rhel8.9へインプレースアップグレードした。
インプレースアップグレードは、rhelのマニュアルどおりで問題ない。アップグレード後のリブートは15分ほど時間がかかった。
openldap-serverは、デフォルトのリポジトリから外れている。含まれているリポジトリはインプレースアップグレードで対応できない。アップグレード後、以下のリポジトリを追加する。
subscription-manager repos --enable codeready-builder-for-rhel-8-x86_64-rpms
以下のパッケージをインストール。
yum install openldap-devel openldap-servers
以下で問題なくサーバーが動いているよう。
systemctl restart slapd
systemctl status slapd
slapcat
ldapsearch -x