先日のエントリに関連しますが、 centos8 / rhel8 で openldap-servers がリポジトリから削除され、 yum install できなくなりました。
これにより、OpenAM + OpenLDAP 構築において yum install openldap-servers が利用できなくなった為、 OpenAM用 OpenLDAP from source code の build 手順を記載しておきます。
download openldap and extract
wget ftp://ftp.openldap.org/pub/OpenLDAP/openldap-release/openldap-2.4.48.tgz tar -xvf openldap-2.4.48.tgz cd openldap-2.4.48.tgz
install required software
less README : REQUIRED SOFTWARE : Base system (libraries and tools): Standard C compiler (required) Cyrus SASL 2.1.21+ (recommended) OpenSSL 0.9.7+ (recommended) Reentrant POSIX REGEX software (required) : SLAPD: BDB and HDB backends require Oracle Berkeley DB 4.4 - 4.8, or 5.0 - 5.1. It is highly recommended to apply the patches from Oracle for a given release.
↑の為、Cyrus SASL , OpenSSL , Berkeley DB を install。
$ wget https://github.com/cyrusimap/cyrus-sasl/releases/download/cyrus-sasl-2.1.27/cyrus-sasl-2.1.27.tar.gz $ tar -xvf cyrus-sasl-2.1.27.tar.gz $ cd cyrus-sasl-2.1.27 $ ./configure --prefix=/usr/local/cyrus_sasl $ make $ make check $ sudo make install $ wget https://www.openssl.org/source/openssl-1.1.1d.tar.gz $ tar -xvf openssl-1.1.1d.tar.gz $ cd openssl-1.1.1d $ ./config --prefix=/usr/local/openssl_1_1_1 $ make $ make test $ sudo make install $ wget https://download.oracle.com/berkeley-db/db-5.1.29.tar.gz $ tar -xvf db-5.1.29.tar.gz $ cd db-5.1.29 $ cd db-5.1.29/build_unix $ ../dist/configure --prefix=/usr/local/BerkeleyDB.5.1 $ make $ sudo make install
install openldap
まず、先程、installした Cyrus SASL , OpenSSL , Berkeley DB の場所を OpenLDAPが把握できるよう、環境変数を設定。
$ export CPPFLAGS="-I/usr/local/BerkeleyDB.5.1/include -I/usr/local/cyrus_sasl/include -I/usr/local/openssl_1_1_1/include" $ export LDFLAGS="-L/usr/local/BerkeleyDB.5.1/lib -L/usr/local/cyrus_sasl/lib -L/usr/local/openssl_1_1_1/lib" $ export LD_LIBRARY_PATH="/usr/local/BerkeleyDB.5.1/lib:/usr/local/cyrus_sasl/lib:/usr/local/openssl_1_1_1/lib"
$ ./configure --prefix=/usr/local/openldap \ --enable-cleartext=yes \ --enable-crypt=yes \ --enable-rwm=yes \ --enable-overlays=yes \ --enable-modules=yes \ --enable-monitor=yes \ --enable-memberof=mod \ --enable-syncprov=mod \ --enable-unique=mod \ --enable-ppolicy=mod \ --enable-collect=mod \ --with-tls=openssl \ --with-cyrus-sasl $ make depend $ make $ make test $ sudo make install
configu OpenLDAP
基本設定
$ sudo groupadd ldap $ sudo useradd -g ldap ldap $ cd /usr/local/openldap # slapd.conf は、後程、初期設定(slapd.d作成)の為に編集します $ sudo chown root.ldap etc/openldap/slapd.conf $ sudo chmod 644 etc/openldap/slapd.conf # var 以下には、openldap のデータが保存されます $ sudo chown ldap.ldap -R var $ sudo cp -p var/openldap-data/DB_CONFIG.example var/openldap-data/DB_CONFIG $ sudo vi var/openldap-data/DB_CONFIG # Berkeley DB の cache size 変更 org) set_cachesize 0 268435456 1 new) set_cachesize 0 805306368 1 # Berkeley DB への更新が発生後、削除可能であれば削除 set_flags DB_LOG_AUTOREMOVE
syslog
$ sudo vi /etc/rsyslog.conf ↓追加 #openldap slapd log local4.* /var/log/slapd/slapd.log $ sudo systemctl restart rsyslog
slapd.conf / slapd.d
OpenLDAPの設定は、以前からある slapd.conf でなく slapd.d が推奨されており、 今回は、slapd.conf を slapd.d 用の初期データとして利用します。
# 暗号化されたパスワードを表示させます。 $ /usr/local/openldap/sbin/slappasswd New password: Re-enter new password: {SSHA}cwqMnl8H6x8nxa3jphm3+LbOoUUvHkit ↑この文字列は後から利用する為、メモしておくように $ cd /usr/local/openldap/ $ sudo vi etc/openldap/slapd.conf # 後程、slaptest コマンドにより slapd.conf → slapd.d を自動作成しますが # olcDatabase={1}monitor.ldif , olcDatabase={2}bdb.ldif にある {1}{2}等の # 連番は 「database ~」の記載順になっています。 ↓追加 > include /usr/local/openldap/etc/openldap/schema/cosine.schema > include /usr/local/openldap/etc/openldap/schema/inetorgperson.schema > include /usr/local/openldap/etc/openldap/schema/nis.schema > include /usr/local/openldap/etc/openldap/schema/ppolicy.schema ↓追加 > modulepath /usr/local/openldap/libexec/openldap > # moduleload memberof.la > moduleload syncprov.la > moduleload unique.la > moduleload ppolicy.la > moduleload auditlog.la ↓追加 ( 動的更新である OLC(On-Line Configuration) を利用する為 ) > database config > rootdn cn=admin,cn=config > access to * > by dn.exact=gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth manage > by * break ↓追加 ( monitor 閲覧は manager のみ) > database monitor > access to * > by dn.exact="cn=Manager,dc=sso,dc=xmart-helm,dc=com" read > by * none ↓変更や削除 < database mdb > database bdb < maxsize 1073741824 < suffix "dc=my-domain,dc=com" > suffix "dc=sso,dc=xmart-helm,dc=com" < rootdn "cn=Manager,dc=my-domain,dc=com" > rootdn "cn=Manager,dc=sso,dc=xmart-helm,dc=com" < rootpw secret > rootpw {SSHA}cwqMnl8H6x8nxa3jphm3+LbOoUUvHkit # slapd.conf の書式check $ sudo /usr/local/openldap/sbin/slaptest -u \ -f /usr/local/openldap/etc/openldap/slapd.conf config file testing succeeded # slapd.conf による起動test $ sudo tail -f /var/log/slapd/slapd.log $ sudo /usr/local/openldap/libexec/slapd \ -u ldap -f /usr/local/openldap/etc/openldap/slapd.conf $ ps -ef | less $ sudo kill $SLAPD_PROC_NO # 上記までに問題ないことが確認できた為、slapd.conf をベースに slapd.d を作成 $ sudo mkdir /usr/local/openldap/etc/openldap/slapd.d $ sudo chown ldap.ldap /usr/local/openldap/etc/openldap/slapd.d $ sudo -u ldap /usr/local/openldap/sbin/slaptest \ -f /usr/local/openldap/etc/openldap/slapd.conf \ -F /usr/local/openldap/etc/openldap/slapd.d # ↑こちらが自動生成 ↓こちらが作成されたslapd.dのtest $ sudo /usr/local/openldap/sbin/slaptest -u \ -F /usr/local/openldap/etc/openldap/slapd.d config file testing succeeded # slapd.d 作成により、こちらを参照するはずですが # 念の為、slapd.conf , slapd.ldif を退避 # ( slapd.ldif の利用のされ方は理解していません ) $ sudo mv /usr/local/openldap/etc/openldap/slapd.conf \ /usr/local/openldap/etc/openldap/slapd.conf.20191101 $ sudo rm /usr/local/openldap/etc/openldap/slapd.ldif # slapd.d による起動test $ sudo tail -f /var/log/slapd/slapd.log $ sudo /usr/local/openldap/libexec/slapd \ -u ldap -F /usr/local/openldap/etc/openldap/slapd.d $ ps -ef | less $ sudo kill $SLAPD_PROC_NO
OpenLDAP 自動起動
以下は、「入門LDAP/OpenLDAPディレクトリサービス導入・運用ガイド第3版」に 記載の起動scriptを参考にしています。
$ cd /lib/systemd/system $ sudo vi slapd.service [Unit] Description=OpenLDAP Server Daemon After=syslog.target network.target [Service] Type=forking PIDFile=/usr/local/openldap/var/run/slapd.pid #「-h」は待受アドレスの指定. # ldap:/// -> ldap port(389). ldapi:/// -> UnixDomainSocket ExecStart=/usr/local/openldap/libexec/slapd -u ldap -h "ldap:/// ldapi:///" ExecReload=/bin/kill -HUP $MAINPID ExecStop=/bin/kill -TERM $MAINPID [Install] WantedBy=multi-user.target $ sudo systemctl enable slapd.service $ sudo systemctl start slapd.service
OpenAM 用 スキーマ投入
https://github.com/hiroyuki-sato/openldap-schemas-for-openam
上記urlにある「cn={99}openam.ldif」を投入します。
私の手元環境において、実際には「cn={99}openam.ldif」を少々、変更し 独自カラム追加等を行っています。
$ sudo /usr/local/openldap/bin/ldapmodify \ -Y EXTERNAL -H ldapi:// -D cn=config \ -f cn={99}openam.ldif
OpenAM 用 データストア作成
schemaが完成すれば、データストア作成 を行い、完了です。
$ vi 2_CREATE_DATA_STORE.ldif dn: dc=sso,dc=xmart-helm,dc=com objectclass: dcObject objectclass: organization o: xmart-helm dc: sso dn: cn=Manager,dc=sso,dc=xmart-helm,dc=com objectclass: organizationalRole cn: Manager dn: ou=People,dc=sso,dc=xmart-helm,dc=com objectClass: organizationalUnit ou: People dn: ou=Groups,dc=sso,dc=xmart-helm,dc=com objectClass: organizationalUnit ou: Groups dn: cn=sidNext,dc=sso,dc=xmart-helm,dc=com cn: sidNext uidNumber: 1 objectClass: uidNext dn: cn=defaultpolicy,dc=sso,dc=xmart-helm,dc=com objectClass: top objectClass: device objectClass: pwdPolicyChecker objectClass: pwdPolicy cn: defaultpolicy pwdAttribute: userPassword dn: cn=HelpDesk,dc=sso,dc=xmart-helm,dc=com objectclass: organizationalRole cn: HelpDesk dn: cn=HelpDesk,cn=HelpDesk,dc=sso,dc=xmart-helm,dc=com objectClass: person cn: HelpDesk sn: HelpDesk userPassword: {SSHA}cwqMnl8H6x8nxa3jphm3+LbOoUUvHkit $ /usr/local/openldap/bin/ldapadd -x -w sasa24ki \ -D cn=Manager,dc=sso,dc=xmart-helm,dc=com \ -f /home/end0tknr/tmp/LDAP/2_CREATE_DATA_STORE.ldif # 上記の確認 $ /usr/local/openldap/bin/ldapsearch -x -b "dc=sso,dc=xmart-helm,dc=com" \ "(objectclass=*)"