Amazon Linux に OpenLDAP 2.4.40 をインストールする
Amazon Linux に OpenLDAP サーバをインストールした際の手順をメモしておきます。 LDAP としては問題無いのですが、後述の通り、LDAPS がエラーになってしまい、動作させられませんでした…(課題)
検証環境
検証環境には AmazonLinux 2017.09 を使いました。
| # cat /etc/os-release
NAME="Amazon Linux AMI"
VERSION="2017.09"
ID="amzn"
ID_LIKE="rhel fedora"
VERSION_ID="2017.09"
PRETTY_NAME="Amazon Linux AMI 2017.09"
ANSI_COLOR="0;33"
CPE_NAME="cpe:/o:amazon:linux:2017.09:ga"
HOME_URL="http://aws.amazon.com/amazon-linux-ami/"
|
OpenLDAP のパッケージは以下を使いました。
- openldap-clients-2.4.40-12.30.amzn1.x86_64
- openldap-2.4.40-12.30.amzn1.x86_64
- openldap-servers-2.4.40-12.30.amzn1.x86_64
インストール
インストールします。
| yum -y install openldap-clients openldap-servers
|
起動スクリプトは /etc/init.d/slapd
に配置されます。 インストール直後は起動していません(停止した状態です)。
設定ファイルの用意
設定ファイルを所定のディレクトリにコピーし、所有者を ldap
ユーザに変更します。
| cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
chown ldap. /var/lib/ldap/DB_CONFIG
|
OpenLDAP を起動する
OpenLDAP を起動します。 併せて、自動起動の設定も実施しておきます。
| service slapd start
chkconfig slapd on
|
OpenLDAP はデフォルトで 389/TCP を Listen します。
| # lsof -i:389
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
slapd 3203 ldap 7u IPv4 12820 0t0 TCP *:ldap (LISTEN)
slapd 3203 ldap 8u IPv6 12821 0t0 TCP *:ldap (LISTEN)
|
管理者パスワードを設定する
管理者パスワードを設定します。 まず、slappasswd
を実行してパスワードを生成します。
実行例は以下の通りです。
| # slappasswd
New password:
Re-enter new password:
{SSHA}xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
パスワード設定用の /root/change-root-password.ldif
というファイルを以下の内容で新規作成します。 olcRootPW
には slappasswd
で生成した SSHA 値を指定します。
| dn: olcDatabase={0}config,cn=config
changetype: modify
add: olcRootPW
olcRootPW: {SSHA}xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
ldapadd
を使って反映します。
| ldapadd -Y EXTERNAL -H ldapi:/// -f /root/change-root-password.ldif
|
実行例は以下の通りです。
| # ldapadd -Y EXTERNAL -H ldapi:/// -f /root/change-root-password.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"
|
ドメイン名を設定する
ドメイン名の設定を進める前に、ディレクトリマネージャ用のパスワードを slappasswd
で生成します。 具体的な実行例は以下の通りです。
| # slappasswd
New password:
Re-enter new password:
{SSHA}xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
以下の内容で /root/change-domain.ldif
というファイルを新規作成します。 DN 名の dc=EXAMPLE,dc=COM
部分は自身の環境に併せて変更します。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 | 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=EXAMPLE,dc=COM" read by * none
dn: olcDatabase={2}bdb,cn=config
changetype: modify
replace: olcSuffix
olcSuffix: dc=EXAMPLE,dc=COM
dn: olcDatabase={2}bdb,cn=config
changetype: modify
replace: olcRootDN
olcRootDN: cn=Manager,dc=EXAMPLE,dc=COM
dn: olcDatabase={2}bdb,cn=config
changetype: modify
add: olcRootPW
olcRootPW: {SSHA}xxxxxxxxxxxxxxxxxxxxxxxx
dn: olcDatabase={2}bdb,cn=config
changetype: modify
add: olcAccess
olcAccess: {0}to attrs=userPassword,shadowLastChange by
dn="cn=Manager,dc=EXAMPLE,dc=COM" write by anonymous auth by self write by * none
olcAccess: {1}to dn.base="" by * read
olcAccess: {2}to * by dn="cn=Manager,dc=EXAMPLE,dc=COM" write by * read
|
ldapmodify
で変更を反映します。
| ldapmodify -Y EXTERNAL -H ldapi:/// -f /root/change-domain.ldif
|
次は以下の内容で /root/set-basedomain.ldif
というファイルを新規作成します。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 | dn: dc=EXAMPLE,dc=COM
objectClass: top
objectClass: dcObject
objectclass: organization
o: EXAMPLE
dc: EXAMPLE
dn: cn=Manager,dc=EXAMPLE,dc=COM
objectClass: organizationalRole
cn: Manager
description: Directory Manager
dn: ou=People,dc=EXAMPLE,dc=COM
objectClass: organizationalUnit
ou: People
dn: ou=Group,dc=EXAMPLE,dc=COM
objectClass: organizationalUnit
ou: Group
|
ldapadd
で変更を反映します。
| ldapadd -x -D cn=Manager,dc=EXAMPLE,dc=COM -W -f /root/set-basedomain.ldif
|
ログ出力の設定
OpenLDAP はデフォルト状態だと全くログを出力しません。 ログ出力を行いたい場合は、まず /etc/sysconfig/ldap
へ以下のように設定を行います。 今回は OpenLDAP のログを Local4 扱いとしました。
| SLAPD_OPTIONS="-l local4 -s 512"
|
rsyslog 側にも「Local4 は /var/log/ldap.log
にロギングする」よう、設定を行います。
| echo "local4.* /var/log/ldap.log" > /etc/rsyslog.d/ldap.conf
|
OpenLDAP を再起動し、変更を反映します。
Windows に LDAP Admin をインストールする
Windows から接続確認するには LDAP Admin 等を利用します。
LDAPS を有効化出来ない?
LDAPS を有効化して外部から接続してもエラーになってしまいました… フォーラム等でも同様の事象が報告されているようですが、結局、解決に至りませんでした。 ldapsearch
をデバッグオプション付きで実行した場合、以下のようなエラーが出ていました。
| TLS: certdb config: configDir='/etc/openldap' tokenDescription='ldap(0)' certPrefix='cacerts' keyPrefix='cacerts' flags=readOnly
TLS: cannot open certdb '/etc/openldap', error -8018:Unknown PKCS #11 error.
TLS: could not get info about the CA certificate directory /etc/openldap/cacerts - error -5950:File not found.
TLS: error: tlsm_PR_Recv returned 0 - error 2:No such file or directory
TLS: error: connect - force handshake failure: errno 2 - moznss error -5938
TLS: can't connect: TLS error -5938:Encountered end of file.
ldap_err2string
ldap_sasl_bind(SIMPLE): Can't contact LDAP server (-1)
|
参考
/etc/sysconfig/ldap
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30 | # Options of slapd (see man slapd)
#SLAPD_OPTIONS=
# At least one of SLAPD_LDAP, SLAPD_LDAPI and SLAPD_LDAPS must be set to 'yes'!
#
# Run slapd with -h "... ldap:/// ..."
# yes/no, default: yes
SLAPD_LDAP=yes
# Run slapd with -h "... ldapi:/// ..."
# yes/no, default: yes
SLAPD_LDAPI=yes
# Run slapd with -h "... ldaps:/// ..."
# yes/no, default: no
SLAPD_LDAPS=no
# Run slapd with -h "... $SLAPD_URLS ..."
# This option could be used instead of previous three ones, but:
# - it doesn't overwrite settings of $SLAPD_LDAP, $SLAPD_LDAPS and $SLAPD_LDAPI options
# - it isn't overwritten by settings of $SLAPD_LDAP, $SLAPD_LDAPS and $SLAPD_LDAPI options
# example: SLAPD_URLS="ldapi:///var/lib/ldap_root/ldapi ldapi:/// ldaps:///"
# default: empty
#SLAPD_URLS=""
# Maximum allowed time to wait for slapd shutdown on 'service ldap stop' (in seconds)
#SLAPD_SHUTDOWN_TIMEOUT=3
# Parameters to ulimit, use to change system limits for slapd
#SLAPD_ULIMIT_SETTINGS=""
|