なんらかのサービスで Kerberos 5 (あるいは GSSAPI) 認証を有効にする
やり方はわりといろんな人が blog に書いてくれていて、Kerberos 5 認証を有効にしたいサービス名と "kerberos" を組み合わせて検索すると出てくるので、それを参考に設定してゆくとよい。 例えば cyrus-imapd なら cyrus-imapd で kerberos5 認証 | Mimori's Algorithms Press、 FreeBSD で nfs 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 ファイルの所有者とパーミッションに気をつければうまく行くと思う。