Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

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 ファイルを編集します。このファイルは、Kerberos データベースへの管理アクセス権とそのアクセスレベルを決定するために kadmind によって使用されます。以下に例を示します。
    */admin@EXAMPLE.COM  *
    多くのユーザーは、データベース内で単一のプリンシパルで表されます (joe@EXAMPLE.COM などの NULL または空のインスタンス)。この設定では、admin (例: joe/admin@EXAMPLE.COM) のインスタンスを持つ 2 番目のプリンシパルを持つユーザーは、レルムの 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.conf および kdc.conf ファイルをセカンダリー KDC にコピーします。
  3. マスター KDC の root シェルから kadmin.local を起動します。
    1. kadmin.local add_principal コマンドを使用して、マスター KDC の host サービスの新規エントリーを作成します。
      [root@masterkdc ~]# 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 サーバーの数にかかわらず、これは一度だけ実行する必要があります。
  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 コマンドを使用してサービス用のランダムキーを設定し、ランダムキーをセカンダリー KDC サーバーのデフォルト 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 を実行して同じパスワードを指定して、セカンダリー KDC にダミーデータベースと同一の stash ファイルを作成します。ダミーデータベースは、最初に成功したデータベースの伝播によって上書きされます。
  7. セカンダリー KDC のファイアウォールで、マスター KDC がポート 754 (krb5_prop)で TCP を使用して接続し、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@masterkdc ~]# 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 キー配布センタープロキシー

一部の管理者は、デプロイメントでデフォルトの Kerberos ポートにアクセスできないようにすることを選択する場合があります。ユーザー、ホスト、およびサービスが Kerberos 認証情報を取得できるようにするには、HTTPS ポート 443 経由で Kerberos と通信するプロキシーとして HTTPS サービスを使用できます。
Identity Management (IdM) では、Kerberos Key Distribution Center Proxy (KKDCP) がこの機能を提供します。

KKDCP サーバー

IdM サーバーでは、KKDCP がデフォルトで有効になります。属性と値のペア ipaConfigString=kdcProxyEnabled がディレクトリーに存在する場合、KKDCP は Apache Web サーバーが起動するたびに自動的に有効になります。この状況では、シンボリックリンク /etc/httpd/conf.d/ipa-kdc-proxy.conf が作成されます。したがって、シンボリックリンクが存在することを確認することで、IdM サーバーで 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
詳細は、以下のサーバー設定の例を参照してください。

例11.1 KKDCP サーバー I の設定

以下の設定例により、複数の Kerberos サーバーが使用される IdM KKDCP と Active Directory レルム間のトランスポートプロトコルとして TCP を使用できるようになります。
  1. /etc/ipa/kdcproxy/kdcproxy.conf ファイルで、[global] セクションの use_dns パラメーターを false に設定します。
    [global]
    use_dns = false
    
  2. プロキシー化されたレルム情報を /etc/ipa/kdcproxy/kdcproxy.conf ファイルに配置します。プロキシーを使用する [AD.EXAMPLE.COM] レルムの場合は、たとえば次のようにレルム設定パラメーターを一覧表示します。
    [AD.EXAMPLE.COM]
    kerberos = kerberos+tcp://1.2.3.4:88 kerberos+tcp://5.6.7.8:88
    kpasswd = kpasswd+tcp://1.2.3.4:464 kpasswd+tcp://5.6.7.8:464
    
    重要
    レルム設定パラメーターは、特定のオプションを複数回指定する可能性がある /etc/krb5.conf および kdc.conf ではなく、スペースで区切られた複数のサーバーをリストする必要があります。
  3. IdM サービスを再起動します。
    # ipactl restart

例11.2 KKDCP サーバー II の設定

このサーバー設定の例は、DNS サービスレコードに依存して、通信する AD サーバーを見つけます。
  1. /etc/ipa/kdcproxy/kdcproxy.conf ファイルの [global] セクションで、use_dns パラメーターを true に設定します。
    [global]
    configs = mit
    use_dns = true
    
    configs パラメーターを使用すると、他の設定モジュールをロードできます。この場合、設定は MIT libkrb5 ライブラリーから読み込まれます。
  2. オプション: DNS サービスレコードを使用しない場合は、明示的な AD サーバーを /etc/krb5.conf ファイルの [realms] セクションに追加します。たとえば、プロキシーを使用するレルムが AD.EXAMPLE.COM の場合は、以下を追加します。
    [realms]
    AD.EXAMPLE.COM = {
        kdc = ad-server.ad.example.com
        kpasswd_server = ad-server.ad.example.com
    }
    
  3. IdM サービスを再起動します。
    # ipactl restart

KKDCP クライアント

クライアントシステムは、KDC プロキシーを /etc/krb5.conf ファイルを介してポイントします。この手順に従って、AD サーバーに到達します。
  1. クライアントで /etc/krb5.conf ファイルを開き、AD レルムの名前を [realms] セクションに追加します。
    [realms]
    AD.EXAMPLE.COM {
        kdc = https://ipa-server.example.com/KdcProxy
        kdc = https://ipa-server2.example.com/KdcProxy
        kpasswd_server = https://ipa-server.example.com/KdcProxy
        kpasswd_server = https://ipa-server2.example.com/KdcProxy
    }
    
  2. /etc/sssd/sssd.conf ファイルを開き、krb5_use_kdcinfo = False 行を IdM ドメインセクションに追加します。
    [domain/example.com]
    krb5_use_kdcinfo = False
    
  3. SSSD サービスを再起動します。
    # systemctl restart sssd.service

関連情報