動機
Kerberosで認証サーバーを立てているが、1台しかない認証サーバーが死ぬと、全部死ぬ。
Kerberosって、多重化できないの?
本家を見ながらやったらできたっぽいので、メモ。
思い出しながら書いているので、抜けがあるかも。
前提
- 元々KDCが動作している環境であること
環境
OS選択に深い意味はありません。
元々動作しているマスターKDC
- OpenBSD 6.3
- Heimdal 7.5
これから立てるスレーブKDC
- FreeBSD 11.2
- FreeBSD付属のHeimdal
KDCを指定する設定
krb5.confの場合
[realms]
セクションのレルムのブロックの中で、kdc
の行を、複数記述する。
[realms]
EXAMPLE.ORG = {
kdc = kdc1.example.org
kdc = kdc2.example.org
:
}
krb5.confのサンプルを見ると、KDCが複数あるレルムがあることに、今気づく。
DNSのSRVレコードの場合
SRVの行を、複数記述する。
HeimdalのDNSの説明によると、RFC2782を見よとある。
RFC2782では、SRV
の後に続く数値は、優先度で、数値が小さい方が優先度が高い。
_kerberos._udp IN SRV 0 0 88 kdc1.example.org.
_kerberos._tcp IN SRV 0 0 88 kdc1.example.org.
_kerberos._udp IN SRV 10 0 88 kdc2.example.org.
_kerberos._tcp IN SRV 10 0 88 kdc2.example.org.
これも、HeimdalのDNSの説明の例で、SRVが複数あることに、今気づく。
マスターKDCの設定
プリンシパルの追加
host/ホスト名
に加えて、iprop/ホスト名
を追加する。
kdc1# ktutil get -p hoge/admin host/kdc1.example.org
kdc1# ktutil get -p hoge/admin iprop/kdc1.example.org
実際には作ったのを持ってきて設置してしまったので、動かなかったらすいません。
本家でktutil get
初めて知った…。
スレーブの指定
/var/heimdal/slaves
に、プリンシパルで指定する。
iprop/kdc2.example.org@EXAMPLE.ORG
ipropd-master
を起動する
kdc1# rcctl ipropd-master enable
kdc1# rcctl ipropd-master start
スレーブKDCの設定
プリンシパルの追加
host/ホスト名
に加えて、iprop/ホスト名
を追加する。
kdc2# ktutil get -p hoge/admin host/kdc2.example.org
kdc2# ktutil get -p hoge/admin iprop/kdc2.example.org
m-keyの設定
マスターから/var/heimdal/m-key
を持ってくる。
…で、合っているんだろうか。
rc.confの設定
kdc
とipropd_slave
を動くようにする。
ipropd_slave_master
とはややこしい名前だが、ipropd_slave
に指定する、マスターの名前。
kdc_enable="YES" # Run a kerberos 5 KDC (or NO).
kadmind_enable="NO" # Run kadmind (or NO)
kpasswdd_enable="NO" # Run kpasswdd (or NO)
ipropd_slave_enable="YES" # Run Heimdal incremental propagation daemon
# (slave daemon).
ipropd_slave_master="kdc1.example.org" # master node name.
起動
kdc2# /etc/rc.d/ipropd_slave start
kdc2# /etc/rc.d/kdc start
確認
マスターでの転送状況の確認
kdc1# cat /var/heimdal/slaves-stats
Status for slaves, last updated: 2018-08-24T03:19:42
Master version: 36
Name Address Version Status Last Seen
iprop/kdc2.example.org@EXAMPLE.ORG IPv4:192.168.100.11 36 Up 2018-08-24T03:17:42
何か転送されているらしい。
マスターの停止
kdc1# rcctl stop kdc
kinit
kdc2$ kinit hoge@EXAMPLE.ORG
kdc2$ klist
数秒待った後、チケットが取得できていれば、スレーブを参照している模様。