先日のエントリに関連しますが、 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=*)"