Samba4 を kerberos (あるいは GSSAPI) 認証の KDC にする

なんらかのサービスで Kerberos 5 (あるいは GSSAPI) 認証を有効にする

やり方はわりといろんな人が blog に書いてくれていて、Kerberos 5 認証を有効にしたいサービス名と "kerberos" を組み合わせて検索すると出てくるので、それを参考に設定してゆくとよい。 例えば cyrus-imapd なら cyrus-imapd で kerberos5 認証 | Mimori's Algorithms PressFreeBSDnfs v4 なら KerberizedNFS - FreeBSD Wiki や、 [FreeBSD-users-jp 96316] Re: NFSv4 + Kerberos が参考になる。

利用している KDC が MIT Kerberos や Heimdal ならこれで済むのだが、Samba 4 で Active Directory を使っていると KDC には samba を利用したい。ここにちょっと罠がある。 Samba Wiki にも Kerberos5 (GSSAPI) 認証の設定例があるが Authenticating other services against Samba AD - SambaWiki、 どうもかゆいところに手が届いていない。

Samba 4 を KDC として利用する際の注意点

SPN に @REALM 部分を登録しない

Keytab に登録する key は、Samba では Service Principal Name としてなんらかのユーザー(コンピューターを含む)に対して登録する。SPN を登録するためのユーザーを作成している例をよく見るが、私はサービスを走らせるコンピューターに対して登録した方が分かりやすいかなと思ってそうしている。

Keytab に登録される key は、例えば imap/host.example.jp@EXAMPLE.JP という形をしているためうっかり @EXAMPLE.JP という @realm 部分も SPN 登録時につけてしまうと、samba が key を認証しない。 というわけで、Active Directory DC のマシン上で

# samba-tool spn add imap/host.example.jp computer\$

という感じで登録すること。

keytab の抽出は net ads コマンドがおすすめ

例としてよく書かれているのは samba-tool domain exportkeytab コマンドで keytab を書き出す例だが、 これだと使っている暗号が弱い方から3つまでしか key が書き出されない。 サービスを動かす host で

# KRB5_KTNAME=/var/imap/krb5.keytab net ads keytab add imap -U administrator

とやるのがおすすめである。 なお、administrator というビルトインユーザーは使わないで、Administrators 権限を持つユーザーを別に作って使った方がよいかもしれない。

以上で、あとは keytab ファイルの所有者とパーミッションに気をつければうまく行くと思う。