11.2. Kerberos KDC の設定

マスター KDC を最初にインストールして設定した後に、必要なセカンダリーサーバーをインストールします。

重要

Kerberos KDC を手動で設定することは推奨されません。Red Hat Enterprise Linux 環境に Kerberos を導入する際は、Identity Management 機能を使用することが推奨されます。

11.2.1. マスター KDC サーバーの設定

重要

KDC システムは専用マシンにしてください。このマシンは非常に安全である必要があります。可能な場合は、このマシン上で KDC 以外のサービスを実行しないでください。
  1. KDC に必要なパッケージをインストールします。
    [root@server ~]# yum install krb5-server krb5-libs krb5-workstation
  2. /etc/krb5.conf/var/kerberos/krb5kdc/kdc.conf の設定ファイルをレルム名とドメインからレルムへのマッピングを反映させるように編集します。例を示します。
    [logging]
     default = FILE:/var/log/krb5libs.log
     kdc = FILE:/var/log/krb5kdc.log
     admin_server = FILE:/var/log/kadmind.log
    
    [libdefaults]
     default_realm = EXAMPLE.COM
     dns_lookup_realm = false
     dns_lookup_kdc = false
     ticket_lifetime = 24h
     renew_lifetime = 7d
     forwardable = true
     allow_weak_crypto = true
    
    [realms]
      EXAMPLE.COM = {
      kdc = kdc.example.com.:88
      admin_server = kdc.example.com
      default_domain = example.com
     }
    
    [domain_realm]
     .example.com = EXAMPLE.COM
     example.com = EXAMPLE.COM
    シンプルなレルムは、EXAMPLE.COMexample.com を適切なドメイン名で置き換え (大文字と小文字を正確な形式になるよう確認してください)、KDC を kerberos.example.com から Kerberos サーバーに変更することで構成できます。慣例では、レルム名はすべて大文字、DNS ホスト名およびドメイン名はすべて小文字になります。これらの設定ファイルの man ページには、ファイル形式に関する詳細が記載されています。
  3. kdb5_util ユーティリティーを使用してデータベースを作成します。
    [root@server ~]# kdb5_util create -s
    create コマンドは、Kerberos レルム用の鍵を保存するデータベースを作成します。-s 引数は、マスター鍵を保存する stash ファイルを作成します。鍵を読み取る stash ファイルがない場合、Kerberos サーバー (krb5kdc) は起動時に毎回、ユーザーに対してマスターサーバーのパスワード (これを使って鍵を再生成することが可能) を要求します。
  4. /var/kerberos/krb5kdc/kadm5.acl ファイルを編集します。kadmind はこのファイルを使って Kerberos データベースへの管理アクセスがあるプリンシパルとそのアクセスレベルを判断します。以下に例を示します。
    */admin@EXAMPLE.COM  *
    ほとんどのユーザーはデータベース内で単一プリンシパル (joe@EXAMPLE.COM のような NULL または空白のインスタンス) により表示されます。この設定では、admin のインスタンスがある 2 番目のプリンシパル (たとえば joe/admin@EXAMPLE.COM) を持つユーザーは、レルムの Kerberos データベースに対して完全な管理制御を行使することができます。
    kadmind がサーバー上で開始されると、ユーザーはレルム内のクライアントもしくはサーバー上で kadmin を実行することでこのサービスにアクセスできます。ただし、データベースの編集が可能なのは (自身のパスワード変更を除く) kadm5.acl ファイルに名前が記載されているユーザーのみになります。

    注記

    kadmin ユーティリティーはネットワーク経由で kadmind サーバーと通信し、Kerberos を使って認証を処理します。このため、ネットワーク経由でサーバーに接続してこの処理を行う前に、最初のプリンシパルが存在している必要があります。最初のプリンシパルは、kadmin.local コマンドで作成します。このコマンドは、KDC と同じホスト上で使用するように特別に設計されており、認証に Kerberos を使用しません。
  5. KDC ターミナルで kadmin.local を使用して最初のプリンシパルを作成します。
    [root@server ~]# kadmin.local -q "addprinc username/admin"
  6. 以下のコマンドを使用して Kerberos を起動します。
    [root@server ~]# systemctl start krb5kdc.service
    [root@server ~]# systemctl start kadmin.service
  7. kadmin 内で addprinc コマンドを使用してユーザーにプリンシパルを追加します。kadmin および kadmin.local は、KDC のコマンドラインインターフェースになります。このため、addprinc のようなコマンドの多くは、kadmin プログラムの起動後に利用可能になります。詳細は、kadmin の man ページを参照してください。
  8. KDC がチケットを発行していることを確認します。まず、kinit を実行してチケットを取得し、認証情報キャッシュファイルに保存します。次に klist を使ってキャッシュ内の認証情報一覧を表示し、kdestroy を使ってキャッシュとそこに含まれる認証情報を破棄します。

    注記

    デフォルトでは、kinit は同一のシステムログインユーザー名 (Kerberos サーバーではなく) を使って認証を試みます。このユーザー名が Kerberos データベース内のプリンシパルに対応しない場合は、kinit はエラーメッセージを発行します。この場合は、コマンドラインで kinit の引数として適切なプリンシパルの名前を指定してください。
    kinit principal

11.2.2. セカンダリー KDC の設定

あるレルムに複数の KDC がある場合、1 つの KDC (マスター KDC) が書き込み可能なレルムデータベースのコピーを保持し、kadmind を実行します。マスター KDC はレルムの管理サーバーでもあります。追加のセカンダリー KDC はデータベースの読み取り専用コピーを保持して、kpropd を実行します。
マスターおよびスレーブを伝達するステップでは、マスター KDC がデータベースを一時ダンプファイルにダンプして、そのファイルを各スレーブに送信する必要があります。このファイルは、そのダンプファイルのコンテンツでこれ以前に受信したデータベースの読み取り専用コピーを上書きします。
セカンダリー KDC を設定するには、以下の手順にしたがいます。
  1. KDC に必要なパッケージをインストールします。
    [root@slavekdc ~]# yum install krb5-server krb5-libs krb5-workstation
  2. マスター KDC の krb5.confkdc.conf のファイルをセカンダリー KDC にコピーします。
  3. マスター KDC で root シェルから kadmin.local を起動します。
    1. kadmin.local add_principal コマンドを使ってマスター KDC の host サービス用の新規エントリーを作成します。
      [root@slavekdc ~]# kadmin.local -r EXAMPLE.COM
       Authenticating as principal root/admin@EXAMPLE.COM with password.
      kadmin: add_principal -randkey host/masterkdc.example.com
      Principal "host/masterkdc.example.com@EXAMPLE.COM" created.
      kadmin: ktadd host/masterkdc.example.com
      Entry for principal host/masterkdc.example.com with kvno 3, encryption type Triple DES cbc mode with HMAC/sha1 added to keytab WRFILE:/etc/krb5.keytab.
      Entry for principal host/masterkdc.example.com with kvno 3, encryption type ArcFour with HMAC/md5 added to keytab WRFILE:/etc/krb5.keytab.
      Entry for principal host/masterkdc.example.com with kvno 3, encryption type DES with HMAC/sha1 added to keytab WRFILE:/etc/krb5.keytab.
      Entry for principal host/masterkdc.example.com with kvno 3, encryption type DES cbc mode with RSA-MD5 added to keytab WRFILE:/etc/krb5.keytab.
      kadmin: quit
    2. kadmin.local ktadd コマンドを使ってサービス用にランダムの鍵を設定し、その鍵をマスターのデフォルト keytab ファイルに保存します。

      注記

      この鍵は kprop コマンドでセカンダリーサーバーへの認証に使用します。インストールされているセカンダリー KDC サーバーの数にかかわらず、この設定が必要なのは 1 回のみです。
  4. セカンダリー KDC で root シェルから kadmin を起動します。
    1. kadmin.local add_principal コマンドを使ってセカンダリー KDC の host サービス用の新規エントリーを作成します。
      [root@slavekdc ~]# kadmin -p jsmith/admin@EXAMPLE.COM -r EXAMPLE.COM
      Authenticating as principal jsmith/admin@EXAMPLE.COM with password.
      Password for jsmith/admin@EXAMPLE.COM:
      kadmin: add_principal -randkey host/slavekdc.example.com
      Principal "host/slavekdc.example.com@EXAMPLE.COM" created.
      kadmin: ktadd host/slavekdc.example.com@EXAMPLE.COM
      Entry for principal host/slavekdc.example.com with kvno 3, encryption type Triple DES cbc mode with HMAC/sha1 added to keytab WRFILE:/etc/krb5.keytab.
      Entry for principal host/slavekdc.example.com with kvno 3, encryption type ArcFour with HMAC/md5 added to keytab WRFILE:/etc/krb5.keytab.
      Entry for principal host/slavekdc.example.com with kvno 3, encryption type DES with HMAC/sha1 added to keytab WRFILE:/etc/krb5.keytab.
      Entry for principal host/slavekdc.example.com with kvno 3, encryption type DES cbc mode with RSA-MD5 added to keytab WRFILE:/etc/krb5.keytab.
      kadmin: quit
    2. kadmin.local ktadd コマンドを使ってサービス用にランダムの鍵を設定し、その鍵をセカンダリーサーバーのデフォルト keytab ファイルに保存します。この鍵は、クライアントの認証時に kpropd で使用します。
  5. セカンダリー KDC はサービス鍵を使って、接続するクライアントを認証することができます。もちろん、すべてのクライアントが新規レルムデータベースで kprop サービスの提供を許可されるべきではありません。アクセスを制限するために、セカンダリー KDC 上の kprop サービスは、そのプリンシパル名が /var/kerberos/krb5kdc/kpropd.acl に記載されているクライアントからの更新しか受け付けません。
    マスター KDC のホストサービス名をこのファイルに追加します。
    [root@slavekdc ~]# echo host/masterkdc.example.com@EXAMPLE.COM > /var/kerberos/krb5kdc/kpropd.acl
  6. セカンダリー KDC がデータベースのコピーを取得すると、その暗号化に使用されたマスター鍵も必要になります。KDC データベースのマスター鍵がマスター KDC 上の stash ファイル (通常、/var/kerberos/krb5kdc/.k5.REALM) に保存されている場合は、これを安全な方法でセカンダリー KDC にコピーするか、kdb5_util create -s を実行してセカンダリー KDC 上にダミーデータベースおよび同一の stash ファイルを作成し、同じパスワードを提供します。ダミーデータベースは、データベースが最初に正常に伝達される際に上書きされます。
  7. セカンダリー KDC のファイアウォールで、マスター KDC がポート 754 上の TCP (krb5_prop) を使用して接続し、kprop サービスを開始できるように許可されていることを確認します。
  8. kadmin サービスが無効になっていることを確認します。
  9. マスター KDC 上のレルムデータベースを、kprop コマンドが読み取るデフォルトのデータファイル (/var/kerberos/krb5kdc/slave_datatrans) にダンプして、手動でのデータベース伝達テストを実行します。
    [root@masterkdc ~]# kdb5_util dump /var/kerberos/krb5kdc/slave_datatrans
  10. kprop コマンドを使用して、そのコンテンツをセカンダリー KDC に送信します。
    [root@slavekdc ~]# kprop slavekdc.example.com
  11. kinit を使用して、クライアントシステムが KDC から正常に初回認証情報を取得できることを確認します。
    クライアントの /etc/krb5.conf は、KDC 一覧内にセカンダリー KDC のみを記載しているはずです。
    [realms]
      EXAMPLE.COM = {
      kdc = slavekdc.example.com.:88
      admin_server = kdc.example.com
      default_domain = example.com
     }
  12. レルムデータベースをダンプし、kprop コマンドの実行によりデータベースを各セカンダリー KDC に送信するスクリプトを作成します。このスクリプトを定期的に実行するように cron サービスを設定します。

11.2.3. Kerberos キー配布センター (KDC) プロキシー

デプロイメントによっては、デフォルトの Kerberos ポートではなく HTTPS ポート (TCP を使用した 443) のみがアクセス可能です。クライアントは、プロキシーとして IdM HTTPS サービスを使用して Kerberos 認証情報を取得できます。このリバースプロキシーにより、HTTPS 経由で Kerberos で認証されたサービスにアクセスすることができます。
Kerberos キー配布センタープロキシー (KKDCP) により、IdM にこの機能を提供します。

デプロイメントでの KKDCP の設定

IdM サーバーでは、KKDCP はデフォルトで有効になっています。
IdM クライアントでは、KKDCP を有効化する必要があります。
  1. 「Kerberos クライアントの設定」の説明にあるように、/etc/krb5.conf ファイルを再設定します。
  2. SSSD サービスを再起動します。
    # systemctl restart sssd.service

KKDCP が IdM サーバーで有効化されていることの確認

ipaConfigString=kdcProxyEnabled の属性と値のペアがディレクトリーに存在する場合に、KKDCP は Apache Web サーバーが起動するたびに自動的に有効化されます。このような場合には、/etc/httpd/conf.d/ipa-kdc-proxy.conf のシンボリックリンクが作成されます。
KKDCP 機能が有効化されているかどうかを確認するには、このシンボリックリンクが存在するかどうかを確認します。
$ ls -l /etc/httpd/conf.d/ipa-kdc-proxy.conf
lrwxrwxrwx. 1 root root 36 Aug 15 09:37 /etc/httpd/conf.d/ipa-kdc-proxy.conf -> /etc/ipa/kdcproxy/ipa-kdc-proxy.conf

IdM サーバーの KKDCP の無効化

  1. ディレクトリーから ipaConfigString=kdcProxyEnabled 属性と値のペアを削除します。
    # ipa-ldap-updater /usr/share/ipa/kdcproxy-disable.uldif
  2. IdM サーバーで httpd サービスを再起動します。
    # systemctl restart httpd.service

関連資料