2015年5月14日木曜日

nfsv4 + krb5 on jessie

 

ここが参考になる。

https://www.debian-administration.org/article/570/MIT_Kerberos_installation_on_Debian

あと、krb5-doc パッケージを入れておいて w3m file:///usr/share/doc/krb5-doc/index.html すると krb5 関連のドキュメントを読める。

実は以前も DNS で SRV レコードを作成してサービスの検出に使う方法 (http://web.mit.edu/Kerberos/krb5-1.5/krb5-1.5.4/doc/krb5-install/Hostnames-for-the-Master-and-Slave-KDCs.html) を取っていたのだが、nfs-kernel-server, krb5-{kdc, admin-server} のマシンの HDD とばしてしまって環境つぶしちゃってから、復活させずに放置していたのを jessie に dist-upgrade したのを期に復活させてみた。

以前の nfsv4+krb5 では今となっては脆弱な暗号化通信(すでに weak_crypto とされてる des-cbc-crc:normal)しかサポートされてなかったのだが、古い nfsv4 がいない(後方互換すてられる)なら aes などが使えるので、des-cbc-crc とか使ってるマシンは早めに dist-upgrade したほうが良いと思う。

いろいろ忘れてて苦戦した記録...

DNS での krb5 関連の SRV レコード設定


bind9 での例

/etc/bind/db.example.org


[...]
$ORIGIN example.org.
[...]
server1               A      192.0.2.1
                      AAAA   2001:db8::1
ntp1                  CNAME  server1
kerberos              CNAME  server1
_kerberos             TXT    "EXAMPLE.ORG kerberos service"
_kerberos._udp        SRV 0 0 88  server1
_kerberos-adm._tcp    SRV 0 0 749 server1
_kerberos-master._udp SRV 0 0 751 server1
_kerberos-master._tcp SRV 0 0 751 server1
_kpasswd._udp         SRV 0 0 464 server1

これで TTL を小さくして serial をあげて systemctl restart bind9 する。スレーブがあるならそっちで rndc retransfer example.org して更新しておく。設定終わったら TTL 元に戻しておいた方がいいと思う。(いじるレコード毎に小さなTTL書くほうがいいかもしれない)

こうすると server1.example.org は ntp1.example.org や kerberos.example.org という fqdn でもアクセスできるようになる。

dig @ns.example.org kerberos.example.org 
dig @ns.example.org _kerberos._udp.example.org SRV
とかで期待したとおりに動いているか確認する。


/etc/nsswitch.conf

しばらく /etc/krb5.conf で kerberos.example.org を指定しても kdc へつながらずに悩んだ(kadmin.local はつながるけど kadmin や kinit が接続できない症状がでてた)のだが、/etc/nsswitch.conf を修正するとうまくうごいた。

デフォルトでは
hosts:   files mdns4_minimal [NOTFOUND=return] dns mdns4
こうなっているのを、dns を files の直後に持ってきて mdns4_minimal よりも優先する。
hosts:   files dns mdns4_minimal [NOTFOUND=return] mdns4

mdns4 って avahi-daemon のだけど、使おうと思ったことないのでなにをどうするものなのかよく知らない...

/etc/krb5.conf 

[libdefaults]
default_realm = STAINED-G.LOCAL
dns_lookup_kdc = true
scan_interfaces = true
dns_lookup_realm = true

srv_lookup = true
[...]
[realms] 
[...]
EXAMPLE.ORG {
default_domain = example.org
kdc = kerberos.example.org 
admin_server = kerberos.example.org  
}

みたいに指定しておいて

kinit や kadmin でうまく kdc や admin_server につながればOK。

その他調整が必要な設定ファイル

  • /etc/idmapd.conf
 環境に応じて /etc/krb5.conf などと整合性とれるように設定する。

[General]

Verbosity = 0
Pipefs-Directory = /run/rpc_pipefs #<-- ここ
#Domain = localdomain
Domain = example.org               #<-- ここ
Local-Realm = EXAMPLE.ORG          #<-- ここ

[Mapping]

Nobody-User = nobody
Nobody-Group = nogroup

[Translation]
Method = nsswitch,static          #<-- ここ
GSS-Methods = nsswitch,static     #<-- ここ

[Static]
whoami@EXAMPLE.ORG = iamjon
              #<-- ここ

  • /etc/default/nfs-common
NEED_IDMAPD="yes" 
NEED_GSSD="yes"

  • /etc/default/nfs-kernel-server
NEED_SVCGSSD=yes

krb5kdc の起動時 (sudo systemctl start krb5-kdc) に Couldn't open logfile [...] というようなエラーが表示されることがある。これ、/etc/krb5.conf と /etc/krb5kdc/kdc.conf の [logging] セクションで kdc = FILE:/var/log/krb5kdc/kdc.log のような指定していて、krb5.conf と kdc.conf で指定違ってたりすると起こる模様..

jessie の krb5.conf(5) を読むとそもそも [logging] セクションの記述がないので、/etc/krb5.conf には [logging]セクションは 記述しない = 削除する のが正解だと思う。

おそらく、以前のバージョンから引き継いで使ってる場合に残っちゃったのではないだろうか。(以前導入した時に私が kdc.conf と混乱して記述しちゃった可能性もないではないが、検索すると結構あちこちで見かけるので..)




0 件のコメント:

コメントを投稿