3.3. Kerberos 5 サーバーの設定
Kerberos を設定する際は、マスター KDC を最初にインストールして設定した後に、必要なセカンダリーサーバーをインストールします。
3.3.1. マスター KDC サーバーの設定
- Kerberos を設定する前に、時刻同期と DNS がすべてのクライアントおよびサーバーマシンで正しく機能していることを確認します。Kerberos サーバーとそのクライアント間の時刻同期に特に注意してください。サーバーとクライアント間の時間差が、設定された制限 (デフォルトでは 5 分) よりも大きい場合、Kerberos クライアントはサーバーに認証できません。この時間同期は、攻撃者が古い Kerberos チケットを使用して有効なユーザーとしてマスカレードしないようにするために必要です。
- KDC を実行する専用マシンに
krb5-libs
krb5-server
およびkrb5-workstation
パッケージをインストールします。このマシンは非常に安全である必要があります。可能な場合は、KDC 以外のサービスを実行しないでください。 - レルム名ととドメイン間のマッピングを反映するように
/etc/krb5.conf
と/var/kerberos/krb5kdc/kdc.conf
設定ファイルを編集します。シンプルなレルムは、EXAMPLE.COM と example.com のインスタンスを正しいドメイン名で置き換えることで構成できます。これは、正しい形式で大文字と小文字の名前を維持することが確実にでき、KDC を kerberos.example.com から Kerberos サーバーの名前に変更することで構成できます。通常、レルム名はすべて大文字で、DNS ホスト名およびドメイン名はすべて小文字になります。これらの設定ファイルの man ページには、ファイル形式に関する詳細が記載されています。 kdb5_util
ユーティリティを使用してデータベースを作成します。/usr/sbin/kdb5_util create -s
このcreate
コマンドは、Kerberos レルムのキーを保存するデータベースを作成します。-s
引数は、マスターサーバーキーを保存する stash ファイルを作成します。キーの読み取り元となる stash ファイルがない場合、Kerberos サーバー (krb5kdc
) は起動時に毎回マスターサーバーのパスワード (このパスワードを使って鍵を再生成できる) を要求します。/var/kerberos/krb5kdc/kadm5.acl
ファイルを編集します。このファイルは、Kerberos データベースkadmind
への管理アクセス権限およびそのアクセスレベルを決定するために使用します。ほとんどの組織は、1 行で対応できます。*/admin@EXAMPLE.COM *
多くのユーザーは、データベース内で単一のプリンシパルで表されます (joe@EXAMPLE.COM などの NULL または空のインスタンス)。この設定では、admin (例: joe/admin@EXAMPLE.COM) のインスタンスを持つ 2 番目のプリンシパルを持つユーザーは、レルムの Kerberos データベースに対する完全な管理制御を強化できます。kadmin
がサーバーで起動した後、ユーザーはレルム内のいずれかのクライアントまたはサーバーでkadmind
を実行することで、そのサービスにアクセスできます。ただし、kadm5.acl
ファイルにリストされているユーザーのみが、自身のパスワードを変更することを除いて、データベースを編集できます。注記
このkadmin
ユーティリティーはネットワーク経由でkadmind
サーバーと通信し、Kerberos を使用して認証を処理します。したがって、ネットワーク経由でサーバーに接続してサーバーを管理するには、最初のプリンシパルがすでに存在している必要があります。kadmin.local
コマンドを使って最初のプリンシパルを作成します。これは、KDC と同じホストで使用するように特別に設計されており、認証に Kerberos を使用しません。- KDC ターミナル
kadmin.local
で最初のプリンシパルを作成します。/usr/sbin/kadmin.local -q "addprinc username/admin"
- 以下のコマンドを使用して Kerberos を起動します。
/sbin/service krb5kdc start /sbin/service kadmin start
kadmin
内でaddprinc
コマンドを使用してユーザーのプリンシパルを追加します。kadmin
およびkadmin.local
は、KDC に対するコマンドラインインターフェースです。そのため、addprinc
などのコマンドの多くは、kadmin
プログラムの起動後に利用できます。詳細についてはkadmin
の man ページを参照してください。- KDC がチケットを発行していることを確認します。まず、
kinit
を実行してチケットを取得し、認証情報キャッシュファイルに保存します。次に、klist
を使用してキャッシュ内の認証情報の一覧を表示し、kdestroy
を使用して、キャッシュと含まれる認証情報を破棄します。注記
デフォルトでは、kinit
が同じシステムログインユーザー名 (Kerberos サーバーではなく) を使用して認証を試みます。ユーザー名が Kerberos データベースのプリンシパルに対応しない場合は、kinit
がエラーメッセージを発行します。その場合は、コマンドラインの引数として、正しいプリンシパルの名前とともにkinit
を提供します。kinit principal
3.3.2. セカンダリー KDC の設定
あるレルムに複数の KDC がある場合は、1 つの KDC (マスター KDC) が書き込み可能なレルムデータベースの書き込み可能なコピーを保持し、
kadmind
を実行します。マスター KDC もレルムの 管理サーバー です。追加のセカンダリー KDC はデータベースの読み取り専用コピーを維持して、kpropd
を実行します。
マスタースレーブを伝達するステップでは、マスター KDC がデータベースを一時ダンプファイルにダンプして、そのファイルを各スレーブに送信する必要があります。このファイルは、そのダンプファイルのコンテンツでこれ以前に受信したデータベースの読み取り専用コピーを上書きします。
セカンダリー KDC を設定するには、以下の手順にしたがいます。
- マスター KDC の
krb5.conf
およびkdc.conf
ファイルをセカンダリー KDC にコピーします。 - マスター KDC で root シェル
kadmin.local
から開始します。- マスター KDC の host サービスの新規エントリーを作成するには、
kadmin.local add_principal
コマンドを使用します。 kadmin.local ktadd
コマンドを使ってサービス用にランダムの鍵を設定し、その鍵をマスターのデフォルト keytab ファイルに保存します。注記
この鍵は、kprop
コマンドがセカンダリーサーバーに認証するために使用されます。インストールするセカンダリー KDC サーバーの数にかかわらず、これは一度だけ実行する必要があります。# kadmin.local -r EXAMPLE.COM Authenticating as principal root/admin@EXAMPLE.COM with password. kadmin: add_principal -randkey host/masterkdc.example.com Principal "host/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
- セカンダリー KDC で root シェルから
kadmin
を起動します。- この
kadmin add_principal
コマンドを使用して、セカンダリー KDC の ホスト サービスの新規エントリーを作成します。 kadmin ktadd
コマンドを使ってサービス用にランダムの鍵を設定し、その鍵をセカンダリー KDC サーバーのデフォルト keytab ファイルに保存します。このキーは、クライアントの認証時にkpropd
サービスによって使用されます。# 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
- セカンダリー KDC はサービスキーを使用して、接続するクライアントをすべて認証できます。すべてのクライアントが新しいレルムデータベースで
kprop
サービスを提供することができるわけではありません。アクセスを制限するため、セカンダリー KDC 上のkprop
サービスは、プリンシパル名が/var/kerberos/krb5kdc/kpropd.acl
でリストされているクライアントからのアップデートのみを受け入れます。マスター KDC のホストサービス名をこのファイルに追加します。# echo host/masterkdc.example.com@EXAMPLE.COM > /var/kerberos/krb5kdc/kpropd.acl
- セカンダリー KDC がデータベースのコピーを取得したら、暗号化に使用したマスターキーも必要になります。KDC データベースのマスターキーがマスター KDC の古いファイル (通常は
/var/kerberos/krb5kdc/.k5.REALM
という名前) に保存されている場合は、利用可能なセキュアな方法を使用してこれをセカンダリー KDC にコピーするか、kdb5_util create -s
を実行して同じパスワードを指定して、ダミーデータベースを作成して、セカンダリーKDC で同一の古いファイルを作成します。ダミーデータベースは、最初に成功したデータベースの伝播によって上書きされます。 - セカンダリー KDC のファイアウォールにより、マスター KDC がポート 754 (krb5_prop) で TCP を使用して接続し、
kprop
サービスを起動できることを確認します。 kadmin
サービスが 無効 になっていることを再度確認します。- マスター KDC のレルムデータベースを、
kprop
コマンドが読み取るデフォルトのデータファイル (/var/kerberos/krb5kdc/slave_datatrans
) にダンプして、手動でデータベース伝搬テストを実行します。# /usr/sbin/kdb5_util dump /var/kerberos/krb5kdc/slave_datatrans
kprop
コマンドを使用して、そのコンテンツをセカンダリー KDC に送信します。# kprop slavekdc.example.com
kinit
を使用して、クライアントシステムが KDC から正常に初回認証情報を取得できることを確認します。クライアントの/etc/krb5.conf
は、KDC の一覧内のセカンダリー KDC のみを一覧表示する必要があります。- レルムデータベースをダンプし、
kprop
コマンドの実行によりデータベースを各セカンダリー KDC に送信するスクリプトを作成します。このスクリプトを定期的に実行するようにcron
サービスを設定します。