FreeBSD/Kerberos5
Prerequisites
自宅内DNSサーバ
KDC/ASサーバ
at host
$ export KRB5_IP=192.168.xxx.yyy
$ export NETIF=igb0
$ bastille create krb5 15.0-RELEASE $KRB5_IP $NETIF
$ bastille pkg krb5 update
$ bastille pkg krb5 install heimdal vim
$ bastille sysrc krb5 kdc_enable=yes
$ bastille sysrc krb5 kadmind_enable=yes
at DNS jail
DNSをいじってkerberos.example.org(自分の環境で置換されたし)がさっき作ったjailに向くようにする
at jail
edit
replace EXAMPLE.ORG / example.org to your domain
code:/etc/krb5.conf
default_realm = EXAMPLE.ORG
EXAMPLE.ORG = {
kdc = kerberos.example.org # このホストはDNSで解決可能でなければならない
admin_server = kerberos.example.org
}
.example.org = EXAMPLE.ORG
マスターキーを作成する
$ kstash --enctype=aes256-cts-hmac-sha1-96
kstash: store the KDC master password in a file
デフォルトだとDES3-CBC-SHA1になって微妙
kstash: rc4 8: EVP_CipherInit_ex einitと表示される
OpenSSLあたりがRC4を拒絶している
使ってないのになぁ
Heimdal の kstash が内部的に RC4 を使おうとする?(Claudeくん談)
使わなくてもとりあえず初期化しようとしてコケてるのかもしれない
code:version
% openssl version
OpenSSL 3.5.4 30 Sep 2025 (Library: OpenSSL 3.5.4 30 Sep 2025)
% openssl version -d
OPENSSLDIR: "/etc/ssl"
→ /etc/ssl/openssl.confをいじる
code:/etc/ssl/openssl.conf
default = default_sect
legacy = legacy_sect # 追加
activate = 1 # 追加
activate = 1 # 追加
これで動作するようになった
kstashがうまく終わったら戻しておく
データベースを作成する
kadmin -l
-lがない
kadmin.localが正しい???
kadmin.local: Cannot open DB2 database '/var/db/krb5kdc/principal': No such file or directory while initializing kadmin.local interface
なんやねん
HeimdalのKerberos実装は/usr/local/bin/kadminにあった
/bin/にあるのはMIT実装のほう(古い!)
最初から/usr/local/sbin/kstash//usr/local/bin/kadminでやりなおし
$ /usr/local/sbin/kstash --enctype=aes256-cts-hmac-sha1-96
$ /usr/local/bin/kadmin -l
$ init EXAMPLE.ORG
$ add windymelt(お前のユーザ名)
このままkdcを起動しようとするとMITのkdcが動いてしまうのでsysrcで上書きする
$ sysrc kdc_program=/usr/local/libexec/kdc
$ sysrc kadmind_program=/usr/local/libexec/kadmind
KDCサービスを起動する
$ service kdc start
code:sh
% service kdc status
kdc is running as pid 60284 60285 60286 60287 60288.
$ service kadmind start
code:sh
% service kadmind status
kadmind is running as pid 60420.
ポートを開こう
pfの場合
pass in proto { tcp udp } from $int_ipp to port { 88 464 } label "Kerberos5"
サービス側
krb5.example.comに名前解決できる必要がある
KDC/ASの/etc/krb5.confをコピペして用意する
kinitできることを確認する
例: NFSにKerberos5認証を導入
ここではNFSサーバもFreeBSD 15という設定
NFSサーバ自体はkrb5を解しないので、GSSAPIが仲介する
GSSAPI: この手のセキュリティサービスの共通API log4jとかlackみたいなもん
GSSAPIを喋るゲートウェイがgssd
$ sudo sysrc gssd_enable="YES"
サービスプリンシパルを作成する
NFSサー バという立場をKerberos上に作る
KDC上で
$ /usr/local/bin/kadmin -l add --random-key nfs/(NFSサーバ名 FQDN)@(レルム)
$ /usr/local/bin/kadmin -l add --random-key host/(NFSサーバ名 FQDN)@(レルム)
keytabを作成する
keytabとはサービスを提供するサーバ側が認証するためのファイル
俺が本物のNFSサーバだよ〜ということ
ユーザはkinitで、サーバはkeytabで認証する
KDCから書き出す
$ /usr/local/bin/kadmin -l ext_keytab -k /tmp/nfs.keytab nfs/(NFSサーバ名 FQDN)@(レルム)
これをNFSサーバ側になんとかして持っていく
/etc/krb5.keytabに持っていく
$ sudo bastille rcp krb5 /tmp/nfs.keytab .
bastilleだとホスト側へとこれで取り出せる
-secではなくsec
クライアント側
こちらもサービス側同様
krb5.example.comに名前解決できる必要がある
KDC/ASの/etc/krb5.confをコピペして用意する
openSUSEなのでクライアントパッケージはkrb5-client
$ sudo zypper install krb5-client
するとkinitできるようになる
GNOME上でKerberosを使うならいったんログアウトする
/etc/gss/mech
例: NFS
openSUSE
$ sudo zypper in nfs-client
$ sudo systemctl enable --now rpc-gssd
クライアントマシンの正当性の確認のためにも、こちらにもkeytabが必要
KDC上で
同様に作成してクライアントにkeytabを持っていく
$ /usr/local/bin/kadmin -l add --random-key host/(ホスト名 FQDN)@(レルム)
自分のマシンがDNSで解決できるようにする
DHCPで固定する
DNSに登録する
また、逆引きも可能である必要がある
$ sudo mkdir -p /run/user/0/krb5cc
rpc-gssdがkeytab認証するため (こちらはrootで動作する)
See also
記述が古い