end0tknr's kipple - web写経開発

太宰府天満宮の狛犬って、妙にカワイイ

install openldap 2.4.48 from src to centos8 for openam

centos8 $ sudo yum install openldap-servers -> No match for argument: openldap-servers - end0tknr's kipple - 新web写経開発

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