Kerberosクライアントの手動設定

Kerberosを設定する場合、基本的には/etc/krb5.confファイルに静的に設定する方法と、DNSを使って動的に設定する方法があります。 DNSによる設定を使用する場合、KerberosアプリケーションはDNSレコードを使ってKDCサービスを探します。 静的な設定を使用する場合は、KDCサーバのホスト名をkrb5.confファイルに追加してください(この場合、KDCを移動したりレルムの設定を他の方法で変更したら、ファイルを修正する必要があります)。

一般的にはDNSを使用する方が、柔軟に対応できるだけでなく、コンピュータに関する設定作業の手間を減らせます。 ただし、この場合レルム名をDNSドメイン名、またはサブドメイン名と同じにする必要があります。 また、Kerberosの設定にDNSを使用する方法では、多少セキュリティ上の問題があり、攻撃者がDNSを通じて、インフラストラクチャに重大なダメージを与える可能性があります(ネームサーバをダウンさせたり、偽のDNSレコードを作成するなど)。. ただし、この影響は、最悪の場合でサービスの拒否程度です。 静的な設定の場合でも、krb5.confファイルにホスト名ではなくIPアドレスを指定しない限り、同じような危険性があります。

スタティック設定

Kerberosを設定する方法の1つとして、/etc/krb5.conf設定ファイルを編集する方法があります。 デフォルトでは、このファイルにはさまざまなサンプル項目が記載されています。 作業を開始する前に、これらのサンプル項目はすべて削除してください。krb5.confはさまざまなセクションから成り立っています。各セクションは「[this]」のように、角かっこに囲まれたセクション名から始まります。

Kerberosクライアントを設定するには、krb5.confに次の節を追加してください(ここで、kdc.example.comはKDCのホスト名を表します)。

[libdefaults]
        default_realm = EXAMPLE.COM

[realms]
        EXAMPLE.COM = {
                kdc = kdc.example.com
                admin_server = kdc.example.com
        }

default_realm行には、Kerberosアプリケーションのデフォルトのレルムを設定します。 複数のレルムがある場合は、[realms]セクションに残りのレルムを定義してください。

また、このファイルには、ホスト名のレルムへのマップ方法も定義します。 たとえば、リモートホストに接続する場合、Kerberosはそのホストがどのレルムにあるかを知る必要があります。 この設定は、[domain_realms]セクションに追加する必要があります。

[domain_realm]
        .example.com = EXAMPLE.COM
        www.foobar.com = EXAMPLE.COM

この例では、DNSドメインexample.com中のすべてのホストが、KerberosのレルムEXAMPLE.COMに所属することになります。 また、外部ホストであるwww.foobar.comも、EXAMPLE.COMレルムのメンバとみなされます。

DNSを使った設定

DNSを使ったKerberos設定では、SRVレコードが頻繁に使用されます。 詳細は、にある『(RFC2052) A DNS RR for specifying the location of services http://www.ietf.org』を参照してください。 これらのレコードは、古いバージョンのBINDネームサーバではサポートされていません。 最低でもBINDバージョン8が必要になります。

Kerberosが利用するSRVレコードの形式は、常に_service._proto.realmになります。ここで、「realm」の部分には、Kerberosのレルム名が入ります。 DNS中のドメイン名では大文字と小文字は区別されません。Kerberosレルムでは大文字と小文字が区別されるため、この設定方法を使用する場合、重複が発生する可能性があります。 _serviceはサービス名を表します(たとえば、KDCと通信する場合やパスワードサービスを利用する場合は異なる名前が使われます)。 _protoは、_udp(UDP)または_tcp(TCP)になります。ただし、一部のプロトコルをサポートしていないサービスもあります。

SRVリソースレコードのデータ部は、優先値、重み、ポート番号、およびホスト名で構成されます。 優先値は、ホストを利用する順序を定義しています(値が小さいほど優先度が高くなる)。 重みは、同じ優先度を持つサーバ間の負荷分散に用いられます。 通常は、これらの値を指定する必要がないため、値に0を設定しても構いません。

現在、MIT Kerberosはサービスの検索時に、次の名前を使用しています。

_kerberos

KDCデーモン(認証サーバとTGS(チケット保証サーバ))の場所を定義しています。 一般的なレコードの例を以下に示します。

_kerberos._udp.EXAMPLE.COM.  IN  SRV    0 0 88 kdc.example.com. 
_kerberos._tcp.EXAMPLE.COM.  IN  SRV    0 0 88 kdc.example.com.
_kerberos-adm

リモート管理サービスの場所を記述しています。 一般的なレコードの例を以下に示します。

_kerberos-adm._tcp.EXAMPLE.COM. IN  SRV    0 0 749 kdc.example.com.

kadmindはUDPをサポートしていないため、_udpが付けられたレコードはありません。

静的な設定ファイルの場合と同様に、example.com DNSドメインに所属していないホストでも、そのホストがEXAMPLE.COMレルムに所属していることをクライアントに知らせる方法があります。 クライアントに知らせるには、次の例のようにTXTレコードを_keberos.hostnameに追加します。

_keberos.www.foobar.com.  IN TXT "EXAMPLE.COM"

クロックスキューの調整

クロックスキューは、ホストのシステム時刻とチケットのタイムスタンプが異なる場合に、どの程度の誤差まで許容するかを示します。 通常、クロックスキューは300秒(5分)に設定されています。 つまり、サーバの時刻の5分前~5分後までのタイムスタンプを持つチケットが受け付けられます。

NTPを使ってすべてのホストを同期化する場合、この値を1分に減らすことができます。 クロックスキューは、/etc/krb5.confファイルに次のように指定します。

[libdefaults]
        clockskew = 120