能書き
自宅サーバー構築譚:基本構想に基づく自宅サーバー構築、Ubuntu22.04LTSインストールその2の続きです。
CentOS方面の話ですが、現在、OpenLDAPは非推奨になっているようです。
代わりに 389 Directory Server (通称 389-ds)というソフトが標準となるようです。理由は明示されてませんが、OpenLDAPは重いからじゃないかという意見も。調査によっては動作が4倍以上遅いとかいう数字も見かけました。
しかし Ubuntu 20.04 の頃の話ですが、 389-ds をインストールしようとすると依存パッケージが山程出てきてちょっと不気味。良く見ると Apache まで入ってるように見えました。見間違いでしょうか?しかしこれで使う気が失せました。
それにしても LDAP という規格は参考文献が少なくて苦労しました。ネットで幾ら調べても、ごく大雑把な概念説明と、こうやったら上手くいきましたというノウハウしか出てこなくて。その間を埋める知識がわかりません。仕方が無いので本を買いました。それも2007年の本、新品ではなくて古本屋での購入です。関係者の皆様スミマセン。
どうやら LDAP は、エンタープライズでの利用が一般的なせいかあんまり記事がありませんな。誰か中級者向け記事を書いてください(切実)
本記事もノウハウ寄りになります。理論は参考書を購入して勉強して下さい。古~い規格なので、十数年前の古~い参考書も現役で役に立ちます。
と言う訳で Ubuntu に OpenLDAP をインストールします。以前も試みましたが、今回は Ubuntu 22.04 です。ログ出力も追加したので、新しく記事を起こす事にしました。
目標
LDAPを良く分かっていないので、一気に作業を進めるのは危険と判断しました。関連する作業内容を下記4つに分割し、1つずつ進めていきます。
- LDAPインストール。そしてログを rsyslog に出力する設定。
- LDAP over TLS を設定。そしてサーバーマシンとは別のクライアントマシンから ldaps アクセス。
- クライアントマシンに sssd をインストールしてログイン。LDAP でのアカウント管理を実現。
- SSH の公開鍵接続。公開鍵の LDAP 管理を実現。クライアントマシンから SSH 接続。
今回は 1. LDAP インストールとログ出力設定 を実施します。
参考文献
基本的なインストールと設定
- 自宅サーバー構築譚:LDAPサーバー OpenLDAP - Qiita … 拙作記事です。これをベースに作業します。
- OpenLDAP Server - Ubuntu Server … 今時はブラウザが自動翻訳してくれたりします。英語の文献でも怖くありません。良い時代になりましたな。
- OpenLDAP : LDAP サーバーの設定 - Server World
- Ubuntu 20.04 LTS にOpenLDAPサーバーを構築したい - Qiita
ログ出力設定
- Logging - Changing the configuration - Install LDAP - OpenLDAP Server - Ubuntu Server
- 5.2.1.2. olcLogLevel: - 5.2.1. cn=config - 5.2. Configuration Directives - 5. Configuring slapd - OpenLDAP Software 2.4 Administrator's Guide
ログの読み方
LDAP 一般論
- OpenLDAPで社内サービスのユーザ情報を一元管理する - Qiita … LDAP 利用における実践的内容の紹介です。参考になります。
インストール
root 化
今回も殆どの作業が root になるので、最初に root になっておきます。
sudo -i
スナップショット
zfs snapshot tank/ROOT/ubuntu@$(date +%Y%m%d_%H%M%S)_before_OpenLDAP_rsyslog
zfs snapshot tank/ROOT/ubuntu/var/lib/apt@$(date +%Y%m%d_%H%M%S)_before_OpenLDAP_rsyslog
zfs snapshot tank/ROOT/ubuntu/var/lib/dpkg@$(date +%Y%m%d_%H%M%S)_before_OpenLDAP_rsyslog
インストール
apt install -y slapd ldap-utils
インストール中に LDAP 管理者のパスワードを求められました。管理者パスワードなので root 並にしっかりした物にしましょう。
┌─────────────────────────┤ Configuring slapd ├─────────────────────────┐
│ Please enter the password for the admin entry in your LDAP directory. │
│ │
│ Administrator password: │
│ │
│ _____________________________________________________________________ │
│ │
│ <Ok> │
│ │
└───────────────────────────────────────────────────────────────────────┘
同じパスワードをもう一回入力します。
┌─────────────────────────────────────┤ Configuring slapd ├────────────────────────────────────────────┐
│ Please enter the password for your LDAP directory again to verify that you hanve typed it correctly. │
│ │
│ Confirm password: │
│ │
│ ____________________________________________________________________________________________________ │
│ │
│ <Ok> │
│ │
└──────────────────────────────────────────────────────────────────────────────────────────────────────┘
これで最後までインストールが完了します。
インストール直後の /etc
をバージョン管理します。まずは確認。
svn st /etc
こう表示されました。
# svn st /etc
? /etc/apparmor.d/local/usr.sbin.slapd
? /etc/apparmor.d/usr.sbin.slapd
? /etc/default/slapd
M /etc/group
M /etc/gshadow
? /etc/init.d/slapd
M /etc/ld.so.cache
? /etc/ldap/sasl2
? /etc/ldap/schema
? /etc/ldap/slapd.d
M /etc/passwd
? /etc/perl
? /etc/rc0.d/K01slapd
? /etc/rc1.d/K01slapd
? /etc/rc2.d/S01slapd
? /etc/rc3.d/S01slapd
? /etc/rc4.d/S01slapd
? /etc/rc5.d/S01slapd
? /etc/rc6.d/K01slapd
M /etc/shadow
? /etc/ufw/applications.d/slapd
svn commit
します。
svn st /etc | grep "^?" | cut -b9- | xargs -I{} find {} -type f -or -type d -or -type l | xargs -t svn add
svn ci /etc -m"installed OpenLDAP"
それから DIT サフィックス(dc)を設定します。インストール直後に設定されているのは nodomain ですので、Unbound を立てた時に決めた家庭内ドメインへと変更します。我が家の場合は home ですな。
また、同時に組織単位(ou)も登録します。というかこのコマンドを実行すると組織単位の設定も要求されます。
下記の参考文献に則って、ここでは infra を作成します。
参考文献:LDAPディレクトリの構成、ACLについて - CentOS7でOpenldap構築 - 1.Openldapの仕組み - Qiita
dpkg-reconfigure slapd
設定できたらsvn commit
しましょう。
svn st /etc
svn ci /etc -m"OpenLDAP initial setting"
ファイルディスクリプタ上限値の設定
家庭向け小規模システムなので、このチューニングは実施しません。メインの参考文献にも書かれていませんし。
関連する参考文献の提示だけにしておきます。
参考文献:ファイルディスクリプタ上限値の設定 - LDAPサーバ構築 - CentOS7でOpenldap構築 - 2.LDAPサーバ構築手順
参考文献:Linux ファイル・ディスクリプタ制限のチューニング - Oji-Cloud
参考文献:5.4 運用時に必要なシステム資源(Linux) - 第5章 チューニング - Interstage HTTP Server 2.2 運用ガイド
ログ設定
*.ldif
ファイルは/opt/ldap
に置く事にします。そう決めました!
mkdir /opt/ldap
cd /opt/ldap
logging.ldif
ファイルを作成。
cat >logging.ldif <<___
dn: cn=config
changetype: modify
replace: olcLogLevel
olcLogLevel: stats
___
変更を実装します。
ldapmodify -Q -Y EXTERNAL -H ldapi:/// -f logging.ldif
rsyslog を設定します。
cat >/etc/rsyslog.d/90-ldap.conf <<___
local4.* /var/log/ldap.log
___
systemctl restart rsyslog
systemctl status rsyslog
logrotate を設定します。
cat >/etc/logrotate.d/ldap <<___
/var/log/ldap.log {
rotate 4
weekly
missingok
compress
notifempty
}
___
ログファイルを用意します。
cd /var/log
touch ldap.log
chown syslog:adm ldap.log
ここまでで root ユーザーによる作業は終わりです。
exit
動作確認
私は誰でしょう。
ldapwhoami -x
この結果は anonymous と表示されます。匿名ユーザーです。
$ ldapwhoami -x
anonymous
ログを確認してみます。
cat /var/log/ldap.log
確認結果は下記のようになりました。
$ cat ldap.log
Mar 15 20:48:01 secondary slapd[116254]: conn=1003 fd=12 ACCEPT from IP=[::1]:59236 (IP=[::]:389)
Mar 15 20:48:01 secondary slapd[116254]: conn=1003 op=0 BIND dn="" method=128
Mar 15 20:48:01 secondary slapd[116254]: conn=1003 op=0 RESULT tag=97 err=0 qtime=0.000024 etime=0.000083 text=
Mar 15 20:48:01 secondary slapd[116254]: conn=1003 op=1 EXT oid=1.3.6.1.4.1.4203.1.11.3
Mar 15 20:48:01 secondary slapd[116254]: conn=1003 op=1 WHOAMI
Mar 15 20:48:01 secondary slapd[116254]: conn=1003 op=1 RESULT oid= err=0 qtime=0.000010 etime=0.000069 text=
Mar 15 20:48:01 secondary slapd[116254]: conn=1003 op=2 UNBIND
Mar 15 20:48:01 secondary slapd[116254]: conn=1003 fd=12 closed
意味する所は何となくわかるようなわからないような、モヤモヤする感じですが。取り敢えず何かは出力されるようです。
量が多いですけども。
この匿名ユーザがアクセス可能な範囲で、home ドメインに登録されている情報を表示してみます。
ldapsearch -x -LLL -H ldapi:/// -b dc=home
実行結果は下記のようになります。
$ ldapsearch -x -LLL -H ldapi:/// -b dc=home
dn: dc=home
objectClass: top
objectClass: dcObject
objectClass: organization
o: infra
dc: home
ログの様子は下記のようになりました。
$ tail -n7 ldap.log
Mar 15 20:55:55 secondary slapd[116254]: conn=1004 fd=12 ACCEPT from PATH=/var/run/slapd/ldapi (PATH=/var/run/slapd/ldapi)
Mar 15 20:55:55 secondary slapd[116254]: conn=1004 op=0 BIND dn="" method=128
Mar 15 20:55:55 secondary slapd[116254]: conn=1004 op=0 RESULT tag=97 err=0 qtime=0.000023 etime=0.000067 text=
Mar 15 20:55:55 secondary slapd[116254]: conn=1004 op=1 SRCH base="dc=home" scope=2 deref=0 filter="(objectClass=*)"
Mar 15 20:55:55 secondary slapd[116254]: conn=1004 op=1 SEARCH RESULT tag=101 err=0 qtime=0.000022 etime=0.001015 nentries=1 text=
Mar 15 20:55:55 secondary slapd[116254]: conn=1004 op=2 UNBIND
Mar 15 20:55:55 secondary slapd[116254]: conn=1004 fd=12 closed
仕舞い
例によって/etc
の変更をバージョン管理しましょう。
sudo -i
svn st /etc | grep "^?" | cut -b9- | xargs -I{} find {} -type f -or -type d -or -type l | xargs -t svn add
svn ci /etc -m"ldap log settings"
exit
作業は以上です。
まずは ldap をインストールして、ログを記録させる事に成功しました。きちんとしたドメイン管理へ第一歩です。やったね