LoginSignup
1
1

More than 5 years have passed since last update.

HeimdalでKDCを多重化する

Posted at

動機

Kerberosで認証サーバーを立てているが、1台しかない認証サーバーが死ぬと、全部死ぬ。
Kerberosって、多重化できないの?
本家を見ながらやったらできたっぽいので、メモ。
思い出しながら書いているので、抜けがあるかも。

前提

  • 元々KDCが動作している環境であること

環境

OS選択に深い意味はありません。

元々動作しているマスターKDC

  • OpenBSD 6.3
  • Heimdal 7.5

これから立てるスレーブKDC

  • FreeBSD 11.2
  • FreeBSD付属のHeimdal

KDCを指定する設定

krb5.confの場合

[realms]セクションのレルムのブロックの中で、kdcの行を、複数記述する。

krb5.conf
[realms]
EXAMPLE.ORG = {
                kdc = kdc1.example.org
                kdc = kdc2.example.org
                :
}

krb5.confのサンプルを見ると、KDCが複数あるレルムがあることに、今気づく。

DNSのSRVレコードの場合

SRVの行を、複数記述する。
HeimdalのDNSの説明によると、RFC2782を見よとある。
RFC2782では、SRVの後に続く数値は、優先度で、数値が小さい方が優先度が高い。

zone-file
_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に、プリンシパルで指定する。

/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の設定

kdcipropd_slaveを動くようにする。
ipropd_slave_masterとはややこしい名前だが、ipropd_slaveに指定する、マスターの名前。

/etc/rc.conf
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

数秒待った後、チケットが取得できていれば、スレーブを参照している模様。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1