Kerberos データベースは Kerberos のバックボーンであり、適切に保守されなければなりません。この節では、Kerberos データベースを管理する手順 (データベースのバックアップと復元、並列伝達の設定、stash ファイルの管理など) を説明します。最初にデータベースを設定する手順については、「マスター KDC を構成するには」を参照してください。
Kerberos データベースをマスター KDC からスレーブ KDC に伝達することは、最も重要な構成作業の 1 つです。十分な頻度で伝達しなければ、マスター KDC とスレーブ KDC が同期しません。したがって、マスター KDC がダウンした場合、スレーブ KDC は最新のデータベース情報を持てません。また、負荷均衡のためにスレーブ KDC をマスターとしても構成している場合、そのスレーブをマスター KDC として使用しているクライアントも最新の情報を持てません。したがって、Kerberos データベースを変更する頻度に基づいて、十分な頻度で伝達を行うことが重要です。
マスター KDC を構成するときは、Kerberos データベースを /var/krb5/slave_datatrans ダンプファイルに自動的にバックアップし、スレーブ KDC に伝達するように、cron ジョブ内の kprop_script を設定します。しかし、他のファイルと同様に、Kerberos データベースも壊れる可能性があります。あるスレーブ KDC で Kerberos データベースが壊れても、次回のデータベースの自動伝達で新しいコピーがインストールされるため、壊れたことに気が付くことはありません。しかし、マスター KDC 上の Kerberos データベースが壊れた場合、壊れたデータベースが次回の自動伝達ですべてのスレーブに伝達されます。さらに、マスター KDC 上にある以前の壊れていないバックアップファイルが壊れたバックアップで上書きされます。
この場合には「安全な」バックアップコピーは存在しないため、定期的に slave_datatrans ダンプファイルを別の場所にコピーするか、kdb5_util の dump コマンドで別のバックアップコピーを作成するように cron ジョブを設定すべきです。そうすれば、データベースが壊れた場合でも、kdb5_util の load コマンドでマスター KDC 上の最新のバックアップを復元できます。
もう一つ注意しておくことは、データベースダンプファイルにはプリンシパル鍵が含まれているため、認証されていないユーザーがこのファイルにアクセスすることを防ぐ必要があります (デフォルトでは、データベースダンプファイルには root の読み取り権と書き込み権だけがあります)。また、kprop コマンドは転送するデータを暗号化するため、データベースダンプファイルを伝達するときには、kprop コマンドだけを使用することも重要です。また、kprop はスレーブ KDC だけにデータを伝達します。したがって、認証されていないホストにデータベースダンプを誤って送信することが最小限に抑えられます。
Kerberos データベースが伝達後に更新され、その後、次回の伝達前に壊れた場合、スレーブは更新されたデータを持ちません。つまり、更新されたデータは失われます。このような場合があるため、データベースで行なった更新が重要な場合は、通常のスケジュールされた伝達の前に手動でデータベースを伝達し、更新されたデータが失われないようにしてください。
KDC 上の kpropd.acll ファイルは、ホストプリンシパル名のリスト (1 行ごとに 1 つ) を提供します。これには、KDC が伝達機構を通じて更新されたデータベースを受信するシステムを指定します。マスター KDC がすべてのスレーブ KDC に伝達する場合、各スレーブ上の kpropd.acl ファイルにはマスターのプリンシパル名だけが入っている必要があります。
しかし、このマニュアルで説明する SEAM のインストール手順とそれに続く構成手順では、同じ kpropd.acl ファイルをマスター KDC とスレーブ KDC に追加するように説明しています。このファイルには、すべての KDC ホストプリンシパル名が入っています。この構成によって、KDC の伝達が一時的に利用不可能になった場合でも、任意の KDC から伝達できます。さらに、同じコピーをすべての KDC で保持することで、保守が簡単になります。
kprop_script コマンドは kprop コマンドを使用して Kerberos データベースを他の KDC に伝達します (kprop_script をスレーブ KDC 上で実行する場合、kprop_script はそのスレーブの Kerberos データベースのコピーを他の KDC に伝達します)。kprop_script には引数として、伝達する KDC を示すホスト名のリスト (スペースで区切る) を使用できます。
kprop_script を実行すると、kprop_script は Kerberos データベースのバックアップを /var/krb5/slave_datatrans ファイルに作成し、そのファイルを指定された KDC にコピーします。Kerberos データベースは伝達が終了するまでロックされます。
マスター KDC 上でスーパーユーザーになります。
kdb5_util の dump コマンドを使用して、Kerberos データベースをバックアップします。
# /usr/krb5/sbin/kdb5_util dump [-verbose] [-d dbname] [filename [principals...]] |
-verbose |
バックアップされるすべてのプリンシパルとポリシーの名前を出力する |
dbname |
バックアップされるデータベースの名前。データベース名には常に「.db」が追加されることに注意。また、ファイルの絶対パスも指定できる。-d オプションを指定しないと、デフォルトのデータベース名は /var/krb5/principal であるが、実際には /var/krb5/principal.db となる |
filename |
データベースがバックアップされるファイル。ファイルの絶対パスも指定できる。ファイルを指定しないと、データベースは標準出力にダンプされる |
principal |
バックアップされる 1 つまたは複数のプリンシパルのリスト (スペースで区切る)。完全指定のプリンシパル名を使用しなければならない。プリンシパルを指定しないと、データベース全体がバックアップされる |
次の例では、Kerberos データベースを dumpfile というファイルにバックアップします。-verbose オプションを指定しているため、すべてのプリンシパルがバックアップされるたびに出力されます。
# kbd5_util dump -verbose dumpfile kadmin/kdc1.eng.acme.com@ENG.ACME.COM krbtgt/eng.acme.com@ENG.ACME.COM kadmin/history@ENG.ACME.COM pak/admin@ENG.ACME.COM pak@ENG.ACME.COM changepw/kdc1.eng.acme.com@ENG.ACME.COM # |
次の例では、Kerberos データベースから pak と pak/admin のプリンシパルをバックアップします。
# kdb5_util dump -verbose dumpfile pak/admin@ENG.ACME.COM pak@ENG.ACME.COM pak/admin@ENG.ACME.COM pak@ENG.ACME.COM # |
マスター KDC 上でスーパーユーザーになります。
kdb_util の load コマンドを使用して、Kerberos データベースを復元します。
# /usr/krb5/sbin/kdb5_util load [-verbose] [-d dbname] [-update] [filename] |
-verbose |
復元されるすべてのプリンシパル名とポリシー名を出力する |
dbname |
復元されるデータベースの名前。データベース名には常に「.db」が追加されることに注意。また、ファイルの絶対パスも指定できる。-d オプションを指定しないと、デフォルトのデータベース名は /var/krb5/principal であるが、実際には /var/krb5/principal.db となる |
-update |
既存のデータベースを更新する。データベースが存在しない場合、新しいデータベースを作成する。既存のデータベースは上書きされる |
filename |
データベースが復元されるファイル。ファイルの絶対パスも指定できる |
次の例では、dumpfile ファイルから database1.db というデータベースを現在のディレクトリに復元します。-update オプションを指定していないため、復元によって新しいデータベースが作成されます。
# kdb5_util load -d database1 dumpfile |
この手順では、kprop コマンドで Kerberos データベースを伝達する方法を示します。この手順は、定期的な cron ジョブ以外で、スレーブ KDC とマスター KDC を同期させる必要がある場合に使用します。kprop_script とは異なり、kprop を使用すれば、あらかじめデータベースの新しいバックアップを作成しなくても現在のデータベースのバックアップを伝達できます。
マスター KDC 上でスーパーユーザーになります。
(省略可能) kdb5_util コマンドを使用して、データベースをバックアップします。
# /usr/krb5/sbin/kdb5_util dump /var/krb5/slave_datatrans |
kprop コマンドを使用して、データベースをスレーブ KDC に伝達します。
# /usr/krb5/lib/kprop -f /var/krb5/slave_datatrans slave_KDC |
定期的な cron ジョブ以外で、データベースをバックアップし、スレーブ KDC に伝達したい場合は、次のように kprop_script コマンドも使用できます。
# /usr/krb5/lib/kprop_script slave_KDC |
ほとんどの場合、データベースをスレーブ KDC に伝達するとき、マスター KDC は独占的に使用されます。しかし、たくさんのスレーブ KDC が存在するサイトでは、伝達プロセスの負荷共有を考えるかもしれません。これを「並列伝達」と呼びます。
並列伝達を使用すると、特定のスレーブ KDC が伝達作業をマスター KDC と共有できます。これによって、より速く伝達を処理でき、マスター KDC の負荷を軽減できます。
たとえば、1 つのマスターと 6 つのスレーブが存在するサイトを仮定します (図 3-2 を参照)。ここでは、slave-1 から slave-3 までが 1 つの論理グループを構成し、slave-4 から slave-6 までがもう 1 つの論理グループを構成しています。並列伝達を設定すると、マスター KDC は slave-1 と slave-4 にデータベースを伝達します。その後、slave-1 と slave-4 が各グループのスレーブにデータベースを伝達します。
ここで示すのは並列伝達を有効にするための詳細な設定手順ではなく、構成手順の概要です。
マスター KDC 上で、その cron ジョブ内の kprop_script エントリを変更して、連続伝達を行うスレーブ (伝達スレーブ) だけを引数として指定します。
各伝達スレーブ上で、その cron ジョブに kprop_script エントリを追加して、伝達するスレーブを引数として指定します。並列伝達を正常に実行するには、伝達スレーブ自体に新しいデータベースが伝達された後に cron ジョブが実行されるように設定します。
伝達スレーブが伝達されるときにかかる時間は、ネットワークの帯域幅やデータベースのサイズなどの要因によって異なります。
各スレーブ KDC 上で、伝達に適切なアクセス権を設定します。アクセス権を設定するには、伝達する KDC のホストプリンシパル名をその kpropd.acl ファイルに追加します。
図 3-2 の例を使用すると、マスター KDC の kprop_script エントリは次のようになります。
10 3 * * * /usr/krb5/lib/kprop_script slave-1.acme.com slave-4.acme.com
slave-1 の kprop_script エントリは次のようになります (スレーブへの伝達はマスターの伝達から 1 時間後に始まります)。
10 4 * * * /usr/krb5/lib/kprop_script slave-2.acme.com slave-3.acme.com
伝達スレーブの kpropd.acl ファイルには、次のエントリが必要です。
host/master.acme.com@ACME.COM
slave-1 が伝達するスレーブの kpropd.acl ファイルには、次のエントリが必要です。
host/slave-1.acme.com@ACME.COM
stash ファイルには、Kerberos データベースのマスター鍵が入っています。このマスター鍵は、Kerberos データベースを作成するときに自動的に作成されます。stash ファイルが壊れた場合、kdb5_util(1M) の stash コマンドで壊れたファイルを上書きできます。stash ファイルを削除する必要があるのは、kdb5_util の destroy コマンドで Kerberos データベースを削除した後だけです。stash ファイルはデータベースと一緒に自動的に削除されないため、必ず手動で削除する必要があります。
stash ファイルを持つ KDC 上でスーパーユーザーになります。
stash ファイルを削除します。
# rm stash_file |
stash_file |
stash ファイルへのパス。デフォルトでは、stash ファイルは /var/krb5/.k5.realm に存在する |
stash ファイルを再び作成する必要がある場合は、kdb5_util コマンドの -f オプションを使用します。