3.3. Kerberos 5 サーバーの設定
Kerberos を設定する際は、マスター KDC を最初にインストールして設定した後に、必要なセカンダリーサーバーをインストールします。
3.3.1. マスター KDC サーバーの設定 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
- Kerberos を設定する前に、時刻同期と DNS がすべてのクライアントおよびサーバーマシンで正しく機能していることを確認します。Kerberos サーバーとそのクライアント間の時刻同期に特に注意してください。サーバーとクライアント間の時間差が、設定された制限 (デフォルトでは 5 分) よりも大きい場合、Kerberos クライアントはサーバーに認証できません。この時間同期は、攻撃者が古い Kerberos チケットを使用して有効なユーザーとしてマスカレードしないようにするために必要です。
- KDC を実行する専用マシンに
krb5-libskrb5-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.comkinitを使用して、クライアントシステムが KDC から正常に初回認証情報を取得できることを確認します。クライアントの/etc/krb5.confは、KDC の一覧内のセカンダリー KDC のみを一覧表示する必要があります。- レルムデータベースをダンプし、
kpropコマンドの実行によりデータベースを各セカンダリー KDC に送信するスクリプトを作成します。このスクリプトを定期的に実行するようにcronサービスを設定します。