0 インストール
1 設定確認
2 基本的なスキーマの追加
2.1 追加方法
2.2 確認方法
3 パスワードポリシの追加
3.1 スキーマの追加
3.2 確認方法
4 サーバ管理者パスワード設定
4.1 ファイル保存ディレクトリの作成
4.2 パスワードハッシュ値の生成
4.3 ファイルの作成
4.4 追加
4.5 確認
4.6 変更方法
4.6.1 パスワードハッシュ値の生成
4.6.2 ファイルの作成
4.6.3 確認
5 データ用ディレクトリの設定
5.1 現在の設定確認
5.2 設定の変更(初期設定)
5.2.1 ファイルの準備
5.2.2 実行
5.2.3 変更後の設定確認
5.3 設定の変更(ドメイン名の変更)
5.3.1 ファイルの準備
5.3.2 実行
5.3.3 ドメイン変更後の設定確認
6 基本組織・ユーザアカウントを管理する組織・グループを管理する組織の登録
6.1 ファイルの準備
6.2 登録
6.3 確認
7 ネットワークの設定
7.1 IPv4の設定
7.2 Firewallの設定
7.3 ホスト名の設定
7.4 簡易名前解決
7.5 暗号化
7.6 クライアントマシンの設定
8 ユーザの追加方法
8.1 UNIXコマンドの実行
8.2 ファイルの準備
8.3 LDAPディレクトリへの追加
8.4 ユーザパスワードの修正方法
8.4.1 ファイルの準備
8.4.2 実行
8.5 ユーザパスワードを強制的に変更させる方法
8.5.1 ファイルの準備
8.5.2 実行
9 グループの追加
9.1 ファイルの準備
9.2 実行
10 パスワードポリシモジュールのロード
10.1 パスワード用のorganizationalUnitの追加
10.2 パスワードモジュールの追加
10.3 パスワードモジュールが追加されたかの確認
10.4 オーバレイの追加
10.4.1 データベース確認
10.4.2 ファイルの準備
10.4.3 オーバーレイ追加
10.5 パスワードポリシの投入
10.5.1 内容の確認
10.5.2 ファイルの準備
10.5.3 実行
10.5.4 確認
10.5.5 設定変更
10.5.6 パスワードポリシのテスト
11 パスワードロックの解除
11.1 ファイル
11.2 解除方法
12 ファイルディスクリプタの上限を編集
12.1 現在の設定確認
12.2 設定の変更
12.3 設定が反映されたかの確認
13 ログローテートの設定
13.1 rsyslog.confの編集
13.2 rsyslogサービスの再起動
13.3 logrotateの設定にslapdを追加
14 SELinuxの設定
15 便利なコマンド
16 参考情報
目標:
セキュアな LDAP サーバを立てて、クライアントマシンからサーバの LDAP エントリを確認してみる。
ドメイン:intrajp-test.org, intrajp-test2.org
LDAPサーバ:ldap.intrajp-test.org
管理者:Manager
テスト用のLDAPクライアント:client.intrajp-test.org
構築環境:VirtualBox
ネットワーク:内部ネットワーク(172.30.1.0/24)
複数のユーザおよびそのグループを追加できること。
SELinux はセキュリティ向上のために有効にしておくこと。
ちなみに、OpenLDAP が提供する ldif ファイルは、/etc/openldap/schema に存在する。
注意事項:ldif ファイルの末尾にスペースが混入しているとエラーとなり、原因がわかりにくいので、投入前はよく確認すること。
0 インストール
# yum install openldap openldap-servers openldap-clients
# cp -p /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
# chown ldap:ldap /var/lib/ldap/DB_CONFIG
# systemctl start slapd
# systemctl enable slapd
1 設定確認
# ldapsearch -LLL -Y EXTERNAL -H ldapi:/// -b cn=config dn
(インストール直後の表示)
dn: cn=config
dn: cn={0}core,cn=schema,cn=config
dn: olcDatabase={-1}frontend,cn=config
dn: olcDatabase={0}config,cn=config
dn: olcDatabase={1}monitor,cn=config
dn: olcDatabase={2}hdb,cn=config
2 基本的なスキーマの追加
2.1 追加方法
# 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
2.2 確認方法
# ldapsearch -LLL -Y EXTERNAL -H ldapi:/// -b cn=schema,cn=config dn
(表示)
dn: cn=schema,cn=config
dn: cn={0}core,cn=schema,cn=config
dn: cn={1}cosine,cn=schema,cn=config
dn: cn={2}nis,cn=schema,cn=config
dn: cn={3}inetorgperson,cn=schema,cn=config
3 パスワードポリシの追加
3.1 スキーマの追加
# ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/ppolicy.ldif
3.2 確認方法
# ldapsearch -LLL -Y EXTERNAL -H ldapi:/// -b cn=schema,cn=config dn
(表示)
dn: cn=schema,cn=config
dn: cn={0}core,cn=schema,cn=config
dn: cn={1}cosine,cn=schema,cn=config
dn: cn={2}nis,cn=schema,cn=config
dn: cn={3}inetorgperson,cn=schema,cn=config
dn: cn={4}ppolicy,cn=schema,cn=config
4 サーバ管理者パスワード設定
4.1 ファイル保存ディレクトリの作成
# mkdir /root/ldif
4.2 パスワードハッシュ値の生成
# slappasswd
(出力されたハッシュ文字列をメモる)
4.3 ファイルの作成
注意:末尾に空白が含まれているとエラーになるのでよく確認すること。
# vim /root/ldif/ldaprootpasswd.ldif
====
dn: olcDatabase={0}config,cn=config
changetype: modify
add: olcRootPW
olcRootPW: <slappasswd により出力されたハッシュ文字列>
====
4.4 追加
# ldapadd -Y EXTERNAL -H ldapi:/// -f /root/ldif/ldaprootpasswd.ldif
(表示)
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "olcDatabase={0}config,cn=config"
4.5 確認
# ldapsearch -LLL -Y EXTERNAL -H ldapi:/// -b cn=config olcRootPW
4.6 変更方法
4.6.1 パスワードハッシュ値の生成
# slappasswd
(出力されたハッシュ文字列をメモる)
4.6.2 ファイルの作成
# vim /root/ldif/ldaprootpasswd-replace.ldif
====
dn: olcDatabase={0}config,cn=config
changetype: modify
replace: olcRootPW
olcRootPW: <slappasswd により出力されたハッシュ文字列>
====
4.6.3 確認
# ldapsearch -LLL -Y EXTERNAL -H ldapi:/// -b cn=config olcRootPW
5 データ用ディレクトリの設定
5.1 現在の設定確認
# ldapsearch -LLL -Y EXTERNAL -H Ldapi:/// -b 'olcDatabase={2}hdb,cn=config'
(表示)
dn: olcDatabase={2}hdb,cn=config
objectClass: olcDatabaseConfig
objectClass: olcHdbConfig
olcDatabase: {2}hdb
olcDbDirectory: /var/lib/ldap
olcSuffix: dc=my-domain,dc=com
olcRootDN: cn=Manager,dc=my-domain,dc=com
olcDbIndex: objectClass eq,pres
olcDbIndex: ou,cn,mail,surname,givenname eq,pres,sub
5.2 設定の変更(初期設定)
5.2.1 ファイルの準備
# vim /root/ldif/ldapdomain.ldif
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=intrajp-test,dc=org" read by * none
dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcSuffix
olcSuffix: dc=intrajp-test,dc=org
dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcRootDN
olcRootDN: cn=Manager,dc=intrajp-test,dc=org
dn: olcDatabase={2}hdb,cn=config
changetype: modify
add: olcRootPW
olcRootPW: <slappasswd により出力されたハッシュ文字列>
dn: olcDatabase={2}hdb,cn=config
changetype: modify
add: olcAccess
olcAccess: {0}to attrs=userPassword,shadowLastChange by dn="Manager,dc=intrajp-test,dc=org" write by anonymous auth by self write by * none
olcAccess: {1}to dn.base="" by * read
olcAccess: {2}to * by dn="cn=Manager,dc=intrajp-test,dc=org" write by * read
5.2.2 実行
# ldapmodify -Y EXTERNAL -H ldapi:/// -f /root/ldif/ldapdomain.ldif
5.2.3 変更後の設定確認
# ldapsearch -LLL -Y EXTERNAL -H Ldapi:/// -b 'olcDatabase={2}hdb,cn=config'
(表示)
dn: olcDatabase={2}hdb,cn=config
objectClass: olcDatabaseConfig
objectClass: olcHdbConfig
olcDatabase: {2}hdb
olcDbDirectory: /var/lib/ldap
olcDbIndex: objectClass eq,pres
olcDbIndex: ou,cn,mail,surname,givenname eq,pres,sub
olcSuffix: dc=intrajp-test,dc=org
olcRootDN: cn=Manager,dc=intrajp-test,dc=org
olcRootPW:
olcAccess: {0}to attrs=userPassword,shadowLastChange by dn="cn=Manager,dc=intrajp-test,dc=org" write by anonymous auth by self write by * nonw
olcAccess: {1}to dn.base="" by * read
olcAccess: {2}to * by dn="cn=Manager,dc=intrajp-test,dc=org" write by * read
5.3 設定の変更(ドメイン名の変更)
intrajp-test2.org に変更してみる。
5.3.1 ファイルの準備
# vim /root/ldif/ldapdomain-replace.ldif
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=intrajp-test2,dc=org" read by * none
dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcSuffix
olcSuffix: dc=intrajp-test2,dc=org
dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcRootDN
olcRootDN: cn=Manager,dc=intrajp-test2,dc=org
dn: olcDatabase={2}hdb,cn=config
changetype: modify
add: olcRootPW
olcRootPW: <slappasswd により出力されたハッシュ文字列>
dn: olcDatabase={2}hdb,cn=config
changetype: modify
add: olcAccess
olcAccess: {0}to attrs=userPassword,shadowLastChange by dn="Manager,dc=intrajp-test,dc=org" write by anonymous auth by self write by * none
olcAccess: {1}to dn.base="" by * read
olcAccess: {2}to * by dn="cn=Manager,dc=intrajp-test2,dc=org" write by * read
5.3.2 実行
# ldapmodify -Y EXTERNAL -H ldapi:/// -f /root/ldif/ldapdomain-replace.ldif
5.3.3 ドメイン変更後の設定確認
(表示)
dn: olcDatabase={2}hdb,cn=config
objectClass: olcDatabaseConfig
objectClass: olcHdbConfig
olcDatabase: {2}hdb
olcDbDirectory: /var/lib/ldap
olcDbIndex: objectClass eq,pres
olcDbIndex: ou,cn,mail,surname,givenname eq,pres,sub
olcSuffix: dc=intrajp-test,dc=org
olcRootDN: cn=Manager,dc=intrajp-test2,dc=org
olcRootPW:
olcAccess: {0}to attrs=userPassword,shadowLastChange by dn="cn=Manager,dc=intrajp-test2,dc=org" write by anonymous auth by self write by * nonw
olcAccess: {1}to dn.base="" by * read
olcAccess: {2}to * by dn="cn=Manager,dc=intrajp-test2,dc=org" write by * read
6 基本組織・ユーザアカウントを管理する組織・グループを管理する組織の登録
6.1 ファイルの準備
# vim /root/ldf/baseldapdomain.ldif
dn: dc=intrajp-test2,dc=org
objectClass: top
objectClass: dcObject
objectClass: organization
o: intrajp-test2 org
dc: intrajp-test2
dn: cn=Manager,dc=intrajp-test2,dc=org
objectClass: organizationalRole
cn: Manager
description: Directory Manager
dn: ou=People,dc=intrajp-test2,dc=org
objectClass: organizationalUnit
ou: People
dn: ou=Goup,dc=intrajp-test2,dc=org
objectClass: organizationalUnit
ou: Group
6.2 登録
以下のコマンドで、上記エントリを LDAP ディレクトリに追加する。
# ldapadd -x -D cn=Manager,dc=intrajp-test2,dc=org -W -f /root/ldif/baseldapdomain.ldif
(表示)
Enter LDAP Password:
adding new entry "dc=intrajp-test2,dc=org"
adding new entry "cn=Manager,dc=intrajp-test2,dc=org"
adding new entry "ou=People,dc=intrajp-test2,dc=org"
adding new entry "ou=Group,dc=intrajp-test2,dc=org"
6.3 確認
# ldapsearch -x -LLL -b "dc=intrajp-test2,dc=org" "(objectClass=*)"
(表示)
dn: dc=intrajp-test2,dc=org
objectClass: top
objectClass: dcObject
objectClass: organization
o: intrajp-test2 org
dc: intrajp-test2
dn: cn=Manager,dc=intrajp-test2,dc=org
objctClass: organizationalRole
cn: Manager
description: Directory Manager
dn: ou=People,dc=intrajp-test2,dc=org
objectClass: organizationalUnit
ou: People
dn: ou=Group,dc=intrajp-test2,dc=org
objectClass: organizationalUnit
ou: Group
7 ネットワークの設定
7.1 IPv4の設定
# vim /etc/sysconfig/network-scripts/ifcfg-enp0s3
====
...
#BOOTPROTO=dhcp
BOOTPROTO=static
IPADDR=172.30.1.2
NETMASK=255.255.255.0
...
====
# systemctl restart network
# ip a
IPアドレスが、172.30.1.2 であることを確認する。
7.2 Firewallの設定
# firewall-cmd --add-service=ldap --permanent
7.3 ホスト名の設定
# hostnamectl set-hostname --static shibbolethidp.intrajp-test2.org
一度シャットダウンして、ネットワークを「内部ネットワーク」にして、起動。
7.4 簡易名前解決
それぞれのマシンの /etc/hosts にそれぞれのマシン名を設定する。
# vim /etc/hosts
====
172.30.1.1 ldap.intrajp-test.org
172.30.1.2 shibbolethidp.intrajp-test2.org
172.30.1.101 client1.intrajp-test.org
====
7.5 暗号化
サーバで証明書をつくっていく。
秘密鍵作成
# cd /etc/pki/tls/certs/
# make ldaps.key
<パスワードを2回入力>
# openssl rsa -in ldaps.key -out ldaps.key
<先程のパスワードを入力>
これで、パスワードが空になった。
# ls -lt
(表示)
ldaps.key
要求書作成
# make ldaps.csr
JP
KANAGAWA
YOKOHAMA
Common Name:shibbolethidp.intrajp-test2.org
CSRができているか確認。
# ls -lt
証明書作成
# openssl req -x509 -days 3650 -in ldaps.csr -key ldaps.key -out ldaps.crt
証明書ができているか確認。
# ls -lt
ファイルの移動
# mv ldaps.* /etc/openldap/certs
# chown ldap:ldap /etc/openldap/certs/ldaps.*
ca-bundle もコピー。
# cp /etc/pki/tls/certs/ca-bundle.crt /etc/openldap/certs
ファイルの確認
# ls -lt /etc/openldap/certs
一度 config の確認
# ldapsearch -LLL -Y EXTERNAL ldapi:/// -b cn=config
設定ファイルの作成
# vim /root/ldif/ssl.ldif
dn: cn=config
changetype: modify
add: olcTLSCACertificateFile
olcTLSCACertificateFile: /etc/openldap/certs/ca-bundle.crt
-
replace: olcTLSCertificateFile
olcTLSCertificateFile: /etc/openldap/certs/ldaps.crt
-
replace: olcTLSCertificateKeyFile
olcTLSCertificateKeyFile: /etc/openldap/certs/ldaps.key
設定
# ldapmodify -Y EXTERNAL -H ldapi:/// -f /root/ldif/ssl.ldif
(表示)
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "cn=config"
もし、ここで、以下のようなエラーが出力される場合は、証明書の権限誤りか、Common Name が FQDN になっていない(ここ間違えて、かなりはまった)。また、ca-bundle.crt をコピーするのを忘れると、同様のエラーとなるので注意。
(エラー表示が出力される場合)
ldap_modify: Other (e.g., implementation specific) error (80)
ldaps が使用できるようにする
# vim /etc/sysconfig/slapd
(変更前)
SLAPD_URLS="ldapi:/// ldap:///"
(変更後)
SLAPD_URLS="ldapi:/// ldap:/// ldaps:///"
# firewall-cmd --add-service=ldaps --permanent
サービス再起動
# systemctl restart slapd
7.6 クライアントマシンの設定
# hostnamectl set-hostname client1.intrajp-test.org
# yum install openldap openldap-clients nss-pam-ldapd
# vim /etc/sysconfig/network-scripts/ifcfg-enp0s3
#BOOTPROTO=dhcp
BOOTPROTO=static
IPADDR=172.30.1.101
NETMASK=255.255.255.0
# vim /etc/hosts
172.30.1.1 ldap.intrajp-test.org
172.30.1.2. shibbolethidp.intrajp-test2.org
172.30.1.101 client1.intrajp-test.org
クライアントマシンからサーバに ping を打つ。
$ ping ldap.intrajp-test.org
$ ping shibbolethidp.intrajp-test2.org
# systemctl start oddjobd
# systemctl enable oddjobd
# vim /etc/openldap/ldap.conf
(以下を追加)
====
TLS_REQUEST allow
====
# authconfig --enableldap --enableldapauth --ldapserver=ldaps://shibbolethidp.intrajp-test2.org --ldapbasedn="dc=intrajp-test2,dc=org" --enablemkhomedir --update
上記コマンドにより、/etc/openldap/ldap.conf が編集されている。
# shutdown -r now
ところで、サーバを変更しても、サーバを停止しても intrajp-user5 ユーザでログインできるのはなぜ?キャッシュを読んでいるからか?
試しに、sssd を無効にしてみたら、ログインできなくなった。
sssd のキャッシュを読んでいるようである。
まあ、元に戻しておこう。
ここに書いてあるとおりに、キャッシュファイルを削除することでも、サーバを停止しておけばログインはできなくなった。
https://www.rootusers.com/how-to-clear-the-sssd-cache-in-linux/
先程、shibbolethidp.intrajp-test2.org サーバを LDAP サーバに設定してそこには intrajp-user5 ユーザが存在しないにもかかわらずクライアントマシンでログインできたのは、sssd のキャッシュを読んでいたからであった。クライアントマシンのキャッシュファイルを全て削除したら、intrajp-user5 ユーザではログインできなくなった。では、LDAP サーバの設定を、元の ldap.intrajp-test.org サーバに戻しておこう。
# authconfig --enableldap --enableldapauth --ldapserver=ldaps://ldap.intrajp-test.org --ldapbasedn="dc=intrajp-test,dc=org" --enablemkhomedir --update
これで、またクライアントマシンから intrajp-user5 ユーザでログインできるようになった。
8 ユーザの追加方法
8.1 UNIXコマンドの実行
# useradd <ユーザ名>
# passwd <ユーザ名>
# less /etc/passwd | grep <ユーザ名>
(uidNumber を覚えておく)
# slappasswd
(SHAの出力をコピーしておく)
8.2 ファイルの準備
# vim /root/ldif/ldapuser.ldif
====
dn: uid=<ユーザ名>,ou=People,dc=intrajp-test,dc=org
objectClass: top
objectClass: account
objectClass: posixAccount
objectClass: shadowAccount
cn: <ユーザ名>
uid: <ユーザ名>
uidNumber: <idナンバー>
gidNumber: <同上>
homeDirectory: /home/<ユーザ名>
userPassword: <コピーしておいたSHA>
loginShell: /bin/bash
gecos: <ユーザ名>
ShadowLastChange: 0
ShadowMax: 0
ShadowWarning: 0
pwdReset: TRUE
====
8.3 LDAPディレクトリへの追加
# ldapadd -x -D cn=Manager,dc=intrajp-test,dc=org -W -f /root/ldif/ldapuser.ldif
8.4 ユーザパスワードの修正方法
8.4.1 ファイルの準備
# vim /root/ldif/ldapuser-replace.ldif
====
dn: uid=intrajp-user1,ou=People,dc=intrajp-test,dc=org
changetype: modify
replace: userPassword
userPassword: <slappasswd で出力された文字列>
====
8.4.2 実行
# ldapmodify -x -D cn=Manager,dc=intrajp-test,dc=org -W -f /root/ldif/ldapuser-replace.ldif
8.5 ユーザパスワードを強制的に変更させる方法
8.5.1 ファイルの準備
# vim /root/ldif/ldapuser-replace-pwdreset.ldif
====
dn: uid=intrajp-user1,ou=People,dc=intrajp-test,dc=org
changetype: modify
replace: pwdReset
pwdReset: TRUE
====
8.5.2 実行
# ldapmodify -x -D cn=Manager,dc=intrajp-test,dc=org -W -f /root/ldif/ldapuser-replace-pwdreset.ldif
9 グループの追加
9.1 ファイルの準備
# vim /root/ldif/ldapgroup.ldif
====
dn: cn=<グループ名>,ou=Group,dc=intrajp-test.dc=org
objectClass: posixGroup
cn: <グループ名>
gidNUMBER: <idナンバー>
====
9.2 実行
# ldapadd -x -D cn=Manager,dc=intrajp-test,dc=org -W -f /root/ldif/ldapgroup.ldif
10 パスワードポリシモジュールのロード
10.1 パスワード用のorganizationalUnitの追加
policies という organaizationalUnit を追加して、そこにパスワードポリシを含ませてみる。
# vim /root/ldif/oupolicy.ldif
====
dn: ou=policies,dc=intrajp-test,dc=org
objectClass: top
objectClass: organizationalUnit
ou: policies
description: Password plicy
====
# ldapadd -x -W -D cn=Manager,dc=intrajp-test,dc=org -f /root/ldif/oupolicy.ldif
10.2 パスワードモジュールの追加
モジュール追加用LDIFファイル作成
# vim /root/ldif/ppolicymodule.ldif
====
dn: cn=module,cn=config
objectClass: olcModuleList
cn: module
olcModulePath: /usr/lib64/openldap
olcModuleLoad: ppolicy.la
====
追加する。
# ldapadd -Y EXTERNAL -H ldapi:/// -f /root/ldif/ppolicymodule.ldif
以下も参考にした。
https://kifarunix.com/implement-openldap-password-policies/amp/
https://meddeb.net/pqchecker/
ppolicy.la モジュールが LDAP データベースにロードされているかを確認する。
10.3 パスワードモジュールが追加されたかの確認
# slapcat -n 0 | grep -i module
(表示)
...(snip)...
olcModuleLoad: {0}ppolicy.la
olcModuleLoad: {1}ppolicy
...(snip)...
10.4 オーバーレイの追加
10.4.1 データベース確認
# ldapsearch -LLL -Y EXTERNAL -H ldapi:/// -b cn=config olcDatabase
{2}hdb でいく。
10.4.2 ファイルの準備
# vim /root/ldif/ppolicyoverlay.ldif
dn: olcOverlay=ppolicy,olcDatabase={2}hdb,cn=config
objectClass: olcOverlayConfig
objectClass: olcPPolicyConfig
olcOverlay: ppolicy
olcPPolicyDefault: cn=default,ou=policies,dc=intrajp-test,dc=org
10.4.3 オーバーレイ追加
# ldapadd -Y EXTERNAL -H ldapi:/// -f /root/ldif/ppolicyoverlay.ldif
10.5 パスワードポリシの投入
10.5.1 内容の確認
# man slapo-ppolicy
ここも参考にすること(pwdMinAge とかの説明がある)。
10.5.2 ファイルの準備
# vim /root/ldif/ppolicy_only.ldif
dn: cn=default,ou=policies,dc=intrajp-test,dc=org
cn: default
objectClass: top
objectClass: device
objectClass: pwdPolicy
objectClass: pwdPolicyChecker
pwdCheckModule: check_password.so
pwdAttribute: userPassword
pwdLockout: TRUE
pwdMaxFailure: 5
pwdLockoutDuration: 300
pwdCheckQuality: 1
pwdMinLength: 8
pwdSafeModify: FALSE
pwdMaxAge: 7776000
pwdExpireWarning: 604800
pwdInHistory: 2
pwdGraceAuthNLimit: 0
pwdMustChange: TRUE
pwdAllowUserChange: TRUE
pwdReset TRUE
10.5.3 実行
# ldapadd -x -W -D cn=Manager,dc=intrajp-test,dc=org -f /root/ldif/ppolicy.ldif
(確認)
10.5.4 確認
# ldapsearch -x -H ldap:/// -D cn=Manager,dc=domain,dc=local -W -b dc=domain,dc=local "(objectClass=pwdPolicy)" -LLL
10.5.5 設定変更
# vim /etc/openldap/check_password.conf
(以下の値に変更)
====
useCracklib 1
minPoints 3
minUpper 1
minLower 1
minDigit 1
minPunct 1
====
それぞれの値の意味は以下のとおり。
useCracklib : integer. Default value : 1. Set it to 0 to disable cracklib verification. It has no effect if cracklib is not included at compile time.
minPoints : integer. Default value: 3. Minimum number of quality points a new password must have to be accepted. One quality point is awarded for each character class used in the password.
minUpper: integer. Defaut value: 0. Minimum upper characters expected.
minLower: integer. Defaut value: 0. Minimum lower characters expected.
minDigit: integer. Defaut value: 0. Minimum digit characters expected.
minPunct: integer. Defaut value: 0. Minimum punctuation characters expected.
10.5.6 パスワードポリシのテスト
# ldappasswd -H ldapi:/// -Y EXTERNAL -S "uid=intrajp-user1,ou=people,dc=intrajp-test,dc=org"
New password: password
Re-enter new password: password
...
Result: Constraint violation (19)
うまくいったみたいだ。
クライアントから、5回以上パスワードを間違って、ロックさせてみる。
サーバで確認する。
# ldapsearch -x -W -H ldap:/// -D "cn=Manager,dc=intrajp-test,dc=org" -b "dc=intrajp-test,dc=org" pwdAccountLockedTime=* pwdAccountLockedTime
(表示)
...
# intrajp-user1, People, intrajp-test.org
dn: uid=intrajp-user1,ou=People,dc=intrajp-test,dc=org
pwdAccountLockedTime: 20210103084740Z
ロック解除のファイルを作成、適用
# vim /root/ldif/ppolicy-unlock.ldif
dn:uid=intrajp-user1,ou=people,dc=intrajp-test,dc=org
changetype:modify
delete: pwdAccountLockedTime
# ldapmodify -x -D "cn=Manager,dc=intrajp-test,dc=org" -W -f /root/ldif/ppolicy-unlock.ldif
もう一度、確認すると、ロックは解除されていた。
11 パスワードロックの解除
11.1 ファイル
# vim /root/ldif/ppolicy-unlock.ldif
====
dn:uid=intrajp-user1,ou=people,dc=intrajp-test,dc=org
changetype:modify
delete: pwdAccountLockedTime
====
11.2 解除方法
# ldapmodify -x -D "cn=Manager,dc=intrajp-test,dc=org" -W -f /root/ldif/ppolicy-unlock.ldif
12 ファイルディスクリプタの上限を編集
12.1 現在の設定確認
# grep "Max open files" /proc/$(pidof slapd)/limits
(表示)
Max open files 1024 4096 files
12.2 設定の変更
# mkdir /etc/systmd/system/slapd.service.d
# vim /etc/systemd/system/slapd.service.d/override.conf
====
[Service]
LimitNOFILE=65536
LimitNPROC=65536
====
# systemctl daemon-reload
# systemctl restart slapd
# grep "Max oprn files" /proc/$(pidof slapd)/limits
(表示)
Max open files 65536 65536 files
12.3 設定が反映されたかの確認
# shutdown -r now
# grep "Max open files" /proc/$(pidof slapd)/limits
(表示)
Max open files 65536 65536 files
13 ログローテートの設定
13.1 rsyslog.confの編集
rsyslog が slapd のログを吐くようにします。
# vim /etc/rsyslog.conf
以下を追記
====
local4.* /var/log/slapd/slapd.log
====
13.2 rsyslogサービスの再起動
# systemctl restart rsyslog
13.3 logrotateの設定にslapdを追加
# vim /etc/logrotate.d/syslog
====
以下を追記
/var/log/slapd/slapd.log
====
14 SELinuxの設定
SELinux は、セキュリティ向上のために、Enforcing としておく。
確認
# sestatus
(表示)
enforcing
15 便利なコマンド
# ldapsearch -x -LLL -b dc=intrajp-test,dc=org
# ldapsearch -LLL -Y EXTERNAL -H ldapi:/// -b cn=config olcDatabase
スキーマの確認
# ldapsearch -LLL -Y EXTERNAL -H ldapi:/// -b cn=schema,cn=config dn
# slapcat -n 0
ロードされているモジュールの確認
# slapcat -n 0 | grep -i module
# ldapsearch -x -H ldap:/// -D cn=Manager,dc=intrajp-test,dc=org -W -b dc=intrajp-test,dc=org
# ldapsearch -h localhost -x -W -D "cn=Manager,dc=intrajp-test,dc=org" -b 'ou=People,dc=intrajp-test,dc=org'
16 参考情報
(主に参考にしたところ)
https://www.tecmint.com/install-openldap-server-for-centralized-authentication/
(その他参考)
https://qiita.com/y-araki-qiita/items/6b2dcbf1a39a969d8024
https://qiita.com/gzock/items/f1ac346304653a92c8cb
https://qiita.com/pa_pa_paper/items/c3d7f4a28729045167d2
http://kawakamasu.hatenablog.com/entry/2017/06/08/011422
https://www.conversion.co.jp/technology/blog/-/detail/=/blog_id=5836119
https://www.openldap.org/doc/admin24/slapdconf2.html
https://nonylene.hatenablog.jp/entry/2017/08/19/022137
https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/7/html/system-level_authentication_guide/openldap
(クライアントマシンについて)
https://www.tecmint.com/configure-ldap-client-to-connect-external-authentication/
(参考)
https://www.server-world.info/query?os=CentOS_7&p=openldap&f=4
(参考2)
https://www.nedia.ne.jp/blog/tech/2015/09/08/5570
(さらなる参考)
https://www.unix-power.net/networking/post-748