この章では、KDC サーバー、ネットワークアプリケーションサーバー、NFS サーバー、および SEAM クライアントを構成する手順を説明します。これらの手順の多くは root アクセス権が必要であるため、システム管理者または上級ユーザーが使用します。レルム間の構成の手順など、KDC サーバーに関連する話題も取り上げます。
構成プロセスは、その個々の手順が他の手順に依存するため、特定の順序で行います。多くの場合これらの手順に従うことにより、SEAM を使用するために必要なサービスを設定できます。その他の手順は互いに依存しないため、適宜行うことができます。次の表に、SEAM インストールの推奨する順序を示します。
表 3-1 最初の手順: SEAM 構成の順序
作業 |
説明 |
参照箇所 |
---|---|---|
1. SEAM のインストールの計画を立てる | ソフトウェアのインストールを開始する前に、構成の問題を考えて決定します。 | 第 2 章「SEAM の計画」 |
2. (省略可能) NTP をインストールする | SEAM が適切に動作するには、レルム内のすべてのシステムクロックが同期していなければなりません。 | 「KDC と SEAM クライアント間のクロックの同期」 |
3. (省略可能) SEAM 事前構成手順を実行する | ホストが多いサイトのインストールを簡単にするには、事前構成手順を実行して、インストール情報を NFS サーバーに格納します。この情報はインストール時に使用できます。 | 『SEAM のインストール』 |
4. マスター KDC サーバーを構成する | レルムのマスター KDC サーバーとデータベースを構成および構築します。 | 「マスター KDC を構成するには」 |
5. (省略可能) スレーブ KDC サーバーを構成する | レルムのスレーブ KDC サーバーを構成および構築します。 | 「スレーブ KDC を構成するには」 |
6. (省略可能) KDC サーバーのセキュリティを高める | KDC サーバーへのセキュリティ侵入を防ぎます。 | 「KDC サーバーへのアクセスを制限するには」 |
7. (省略可能) 切り替え可能な KDC サーバーを構成する | マスター KDC とスレーブ KDC の切り替え作業を簡単にします。 | 「切り替え可能なスレーブ KDC を構成するには」 |
上記の手順を終えたら、必要に応じて次の手順に従います。
表 3-2 次の手順: 追加の SEAM 作業
作業 |
説明 |
参照箇所 |
---|---|---|
レルム間認証を構成する | レルム間の通信を有効にします。 | 「レルム間の認証の構成」 |
SEAM アプリケーションサーバーを構成する | サーバーが Kerberos 認証を使用して、ftp、telnet、rsh などのサービスをサポートできるようにします。 | 「SEAM ネットワークアプリケーションサーバーの構成」 |
SEAM クライアントを構成する | クライアントが SEAM サービスを使用できるようにします。 | 「SEAM クライアントの構成」 |
SEAM NFS サーバーを構成する | サーバーが Kerberos 認証を必要とするファイルシステムを共有できるようにします。 | 「SEAM NFS サーバーの構成」 |
アプリケーションサーバーのセキュリティを高める | 認証されたトランザクションだけにアクセスを制限することによって、アプリケーションサーバーのセキュリティを高めます。 | 「Kerberos 化されたアプリケーションだけを有効にするには」 |
SEAM ソフトウェアをインストールした後は、KDC サーバーを構成します。マスター KDC と (少なくとも 1 つの) スレーブ KDC を構成することによって、資格を発行するサービスを提供します。このような資格は SEAM の基本であるため、KDC は他の作業を行う前にインストールされている必要があります。
マスター KDC とスレーブ KDC の重要な違いは、マスターだけがデータベースの管理要求を処理できることです。たとえば、パスワードの変更や新しいプリンシパルの追加はマスター KDC で行います。その後、このような変更はスレーブ KDC に伝達できます。スレーブ KDC とマスター KDC は両方とも資格を生成します。つまり、スレーブ KDC はマスターが応答できなくなった場合にバックアップを提供します。
事前構成手順を使用しない場合の、一連の構成手順を説明します。。ソフトウェアをインストールするときに事前構成手順を使用した場合、この手順に含まれる多くのファイルは編集する必要がありません。しかし、ファイルの内容は確認してください。
この手順では、次の構成パラメータを使用します。
レルム名 = ACME.COM
DNS ドメイン名 = acme.com
マスター KDC = kdc1.acme.com
スレーブ KDC = kdc2.acme.com
admin プリンシパル = kws/admin
オンラインヘルプの URL = http://denver/ab2/coll.384.1/SEAM/@AB2PageView/6956
マスター KDC を構成するための前提条件
この手順では、マスター KDC ソフトウェアがインストールされている必要があります。さらに、DNS が実行されていなければなりません。マスター KDC を切り替え可能にする命名方法については、「マスター KDC とスレーブ KDC の切り替え」を参照してください。
マスター KDC 上でスーパーユーザーになります。
Kerberos 構成ファイル (krb5.conf) を編集します。
レルム名とサーバー名を変更する必要があります。このファイルの説明については、krb5.conf(4) のマニュアルページを参照してください。構成ファイルを使用して SEAM ソフトウェアをインストールした場合、ファイルの内容を編集せず、確認だけしてください。
kdc1 # cat /etc/krb5/krb5.conf [libdefaults] default_realm = ACME.COM [realms] ACME.COM = { kdc = kdc1.acme.com kdc = kdc2.acme.com admin_server = kdc1.acme.com } [domain_realm] .acme.com = ACME.COM # # ドメイン名とレルム名が同じ場合、このエントリは必要ない。 # [logging] default = FILE:/var/krb5/kdc.log kdc = FILE:/var/krb5/kdc.log [appdefaults] gkadmin = { help_url = //denver/ab2/coll.384.1/SEAM/@AB2PageView/6956 } |
この例では、default_realm、kdc、admin_server、およびすべての domain_realm のエントリが変更されています。レルム名とドメイン名が同じ場合、default_realm の行はインストールプロセスでは作成されませんが、ここでは必要な場合の例として入れてあります。さらに、help_url を定義する行は編集されています。
KDC 構成ファイル (kdc.conf) を編集します。
レルム名を変更する必要があります。このファイルの説明については、kdc.conf(4) のマニュアルページを参照してください。構成ファイルを使用して SEAM ソフトウェアをインストールした場合、ファイルの内容を編集せず、確認だけしてください。
kdc1 # cat /etc/krb5/kdc.conf [kdcdefaults] kdc_ports = 88,750 [realms] ACME.COM= { profile = /etc/krb5/krb5.conf database_name = /var/krb5/principal admin_keytab = /var/krb5/kadm5.keytab acl_file = /var/krb5/kadm5.acl kadmind_port = 749 max_life = 8h 0m 0s max_renewable_life = 7d 0h 0m 0s } |
この例では、realms セクションのレルム名定義が変更されています。
kdb5_util を使用して、KDC データベースを作成します。
kdb5_util コマンドは KDC データベースを作成します。さらに、-s オプションを指定すると、kadmind と krb5kdc のデーモンを起動する前に、自分自身に対して KDC を認証するための stash ファイルを作成します。
kdc1 # /usr/krb5/sbin/kdb5_util create -r ACME.COM -s Initializing database '/var/krb5/principal' for realm 'ACME.COM' master key name 'K/M@ACME.COM' You will be prompted for the database Master Password. It is important that you NOT FORGET this password. Enter KDC database master key: <鍵を入力する> Re-enter KDC database master key to verify: <もう一度鍵を入力する> |
レルム名がサーバーのネームスペースのドメイン名と同じ場合、レルム名の後にある -r オプションは必要ありません。
Kerberos アクセス制御リストファイル (kadm5.acl) を編集します。
/etc/krb5/kadm5.acl には、生成後、KDC を管理することが許可されたすべてのプリンシパル名が必要です。追加する最初のエントリは次のようになります。
kws/admin@ACME.COM * |
このエントリは ACME.COM レルム内の kws/admin プリンシパルに、KDC 内のプリンシパルまたはポリシーを変更する機能を与えます。デフォルトのインストールでは、すべての admin プリンシパルに一致する「*」が入っています。これはセキュリティの観点から危険であるため、すべての admin プリンシパルのリストに変更する方が安全です。
kadmin.local を起動します。
次の手順では、SEAM が使用するプリンシパルを作成します。
kdc1 # /usr/krb5/sbin/kadmin.local kadmin.local: |
kadmin.local を使用して、admin プリンシパルをデータベースに追加します。
必要なすべての admin プリンシパルを追加できます。KDC 構成プロセスを完了するには、少なくとも 1 つの admin プリンシパルを追加する必要があります。この例では、kws/admin プリンシパルが追加されています。「kws」の代わりに適切なプリンシパル名を使用してください。
kadmin.local: addprinc kws/admin Enter password for principal kws/admin@ACME.COM: <パスワードを入力する> Re-enter password for principal kws/admin@ACME.COM: <もう一度パスワードを入力する> Principal "kws/admin@ACME.COM" created. kadmin.local: |
kadmin.local を使用して、kadmin 用に keytab ファイルを作成します。
次のコマンドは、kadmin と changepw のプリンシパルエントリを持つ特別な keytab ファイルを作成します。これらのプリンシパルは kadmind サービスに必要です。
kadmin.local: ktadd -k /etc/krb5/kadm5.keytab kadmin/kdc1.acme.com Entry for principal kadmin/kdc1.acme.com with kvno 3, encryption type DES-CBC-CRC added to keytab WRFILE:/etc/krb5/kadm5.keytab. kadmin.local: ktadd -k /etc/krb5/kadm5.keytab changepw/kdc1.acme.com Entry for principal changepw/kdc1.acme.com with kvno 3, encryption type DES-CBC-CRC added to keytab WRFILE:/etc/krb5/kadm5.keytab. kadmin.local: |
kadmin.local を終了します。
これで、次の手順に必要なすべてのプリンシパルを追加しました。
kadmin.local: quit |
Kerberos デーモンを起動します。
kdc1 # /etc/init.d/kdc start kdc1 # /etc/init.d/kdc.master start |
kadmin を起動します。
この時点で、SEAM 管理ツールを使用してプリンシパルを追加できます。説明を簡単にするために、コマンド行の例を示します。この手順の前半で作成した admin プリンシパル名の 1 つでログインする必要があります。
kdc1 # /usr/krb5/sbin/kadmin -p kws/admin Enter password: <kws/admin のパスワードを入力する> kadmin: |
kadmin を使用して、マスター KDC の host プリンシパルを作成します。
host プリンシパルは Kerberos 化されたアプリケーション (klist や kprop など) と Kerberos 化されたサービス (ftp や telnet など) で使用されます。
kadmin: addprinc -randkey host/kdc1.acme.com Principal "host/kdc1.acme.com@ACME.COM" created. kadmin: |
省略可能: kadmin を使用して、マスター KDC の root プリンシパルを作成します。
このプリンシパルは認証された NFS マウントで使用されます。したがって、マスター KDC では必要ない場合もあります。
kadmin: addprinc root/kdc1.acme.com Enter password for principal root/kdc1.acme.com@ACME.COM: <パスワードを入力する> Re-enter password for principal root/kdc1.acme.com@ACME.COM: <パスワードをもう一度入力する> Principal "root/kdc1.acme.com@ACME.COM" created. kadmin: |
マスター KDC の host プリンシパルをマスター KDC の keytab ファイルに追加します。
host プリンシパルを keytab ファイルに追加することによって、このプリンシパルが自動的に使用されるようになります。
kadmin: ktadd host/kdc1.acme.com kadmin: Entry for principal host/kdc1.acme.com with kvno 3, encryption type DES-CBC-CRC added to keytab WRFILE:/etc/krb5/krb5.keytab kadmin: quit |
kadmin を終了します。
kadmin: quit |
各 KDC のエントリを伝達構成ファイル (kpropd.acl) に追加します。
このファイルの説明については、kprop(1M) のマニュアルページを参照してください。構成ファイルを使用して SEAM ソフトウェアをインストールした場合、ファイルの内容を編集せず、確認だけしてください。
kdc1 # cat /etc/krb5/kpropd.acl host/kdc1.acme.com@ACME.COM host/kdc2.acme.com@ACME.COM |
省略可能: NTP などのクロック同期機構を使用して、マスター KDC のクロックを同期させます。
NTP をインストールおよび使用することは必須ではありません。しかし、認証が成功するには、すべてのクロックが krb5.conf ファイルの libdefaults セクションで定義されたデフォルトの時間内に収まっている必要があります。NTP については、「KDC と SEAM クライアント間のクロックの同期」を参照してください。
この手順では、kdc3 という新しいスレーブ KDC を構成します。ソフトウェアをインストールするときに事前構成手順を使用していない、あるいは、事前構成手順を行うときに kdc3 をスレーブとして定義していない場合の手順を説明します。事前構成手順を行うときに kdc3 をスレーブとして定義した場合、この手順に含まれる多くのファイルは編集する必要がありません。しかし、ファイルの内容は確認してください。
この手順では、次の構成パラメータを使用します。
レルム名 = ACME.COM
DNS ドメイン名 = acme.com
マスター KDC = kdc1.acme.com
スレーブ KDC = kdc2.acme.com と kdc3.acme.com
admin プリンシパル = kws/admin
オンラインヘルプの URL = http://denver/ab2/coll.384.1/SEAM/@AB2PageView/6956
スレーブ KDC を構成するための前提条件
この手順では、マスター KDC を構成していて、SEAM のスレーブ KDC ソフトウェアを kdc3 にインストールしている必要があります。スレーブ KDC を切り替え可能にする方法については、「マスター KDC とスレーブ KDC の切り替え」を参照してください。
マスター KDC 上で スーパーユーザーになります。
マスター KDC 上で kadmin を起動します。
マスター KDC を構成するときに作成した admin プリンシパル名の 1 つでログインする必要があります。
kdc1 # /usr/krb5/sbin/kadmin -p kws/admin Enter password: <kws/admin のパスワードを入力する> kadmin: |
マスター KDC 上で kadmin を使用して、スレーブ KDC の host プリンシパルをデータベースに追加します。
正常に機能するには、スレーブは host プリンシパルを持つ必要があります。
kadmin: addprinc -randkey host/kdc3.acme.com Principal "host/kdc3@ACME.COM" created. kadmin: |
省略可能: マスター KDC 上で kadmin を使用して、スレーブ KDC の root プリンシパルを作成します。
このプリンシパルは、認証されたファイルシステムをスレーブが NFS マウントする場合だけに必要です。
kadmin: addprinc root/kdc3.acme.com Enter password for principal root/kdc3.acme.com@ACME.COM: <パスワードを入力する> Re-enter password for principal root/kdc3.acme.com@ACME.COM: <パスワードをもう一度入力する> Principal "root/kdc3.acme.com@ACME.COM" created. kadmin: |
kadmin を終了します。
kadmin: quit |
マスター KDC 上で Kerberos 構成ファイル (krb5.conf) を編集します。
各スレーブのエントリを追加する必要があります。このファイルの説明については、krb5.conf(4) のマニュアルページを参照してください。事前構成手順を実行するときに kdc3 をスレーブサーバーとして定義した場合、ファイルの内容を編集せず、確認だけしてください。
kdc1 # cat /etc/krb5/krb5.conf [libdefaults] default_realm = ACME.COM [realms] ACME.COM = { kdc = kdc1.acme.com kdc = kdc2.acme.com kdc = kdc3.acme.com admin_server = kdc1.acme.com } [domain_realm] .acme.com = ACME.COM # # ドメイン名とレルム名が同じ場合、このエントリは必要ない。 # [logging] default = FILE:/var/krb5/kdc.log kdc = FILE:/var/krb5/kdc.log [appdefaults] gkadmin = { help_url = //denver/ab2/coll.384.1/SEAM/@AB2PageView/6956 |
マスター KDC 上で各 スレーブ KDC のエントリをデータベース伝達構成ファイル (kpropd.acl) に追加します。
このファイルの説明については、kprop(1M) のマニュアルページを参照してください。事前構成手順を行うときに kdc3 をスレーブサーバーとして定義した場合、ファイルの内容を編集せず、確認だけしてください。
kdc1 # cat /etc/krb5/kpropd.acl host/kdc1.acme.com@ACME.COM host/kdc2.acme.com@ACME.COM host/kdc3.acme.com@ACME.COM |
すべてのスレーブ上でマスター KDC サーバーから KDC 管理ファイルをコピーします。
マスター KDC サーバーは各 KDC サーバーが必要とする情報を更新しているため、この手順はすべてのスレーブ KDC 上で行うことが必要です。事前構成手順を行うときに kdc3 をスレーブサーバーとして定義した場合、ファイルの内容を編集せず、確認だけしてください。ftp などの転送機構を使用すると、マスターから次のファイルのコピーを取得できます。
/etc/krb5/krb5.conf
/etc/krb5/kdc.conf
/etc/krb5/kpropd.acl
新しいスレーブ上で kadmin を使用して、スレーブの host プリンシパルをスレーブの keytab ファイルに追加します。
マスター KDC を構成するときに作成した admin プリンシパル名の 1 つでログインする必要があります。このエントリによって、kprop などの Kerberos 化されたアプリケーションが機能するようになります。
kdc3 # /usr/krb5/sbin/kadmin -p kws/admin Enter password: <kws/admin のパスワードを入力する> kadmin: ktadd host/kdc3.acme.com kadmin: Entry for principal host/kdc3.acme.com with kvno 3, encryption type DES-CBC-CRC added to keytab WRFILE:/etc/krb5/krb5.keytab kadmin: quit |
マスター KDC 上でスレーブ KDC 名を cron ジョブに追加します。そして、crontab -e を実行すると、バックアップが自動的に実行されます。
各スレーブ KDC サーバーの名前を kprop_script 行の終わりに追加します。事前構成手順を行うときに kdc3 をスレーブサーバーとして定義した場合、ファイルの内容を編集せず、確認だけしてください。
10 3 * * * /usr/krb5/lib/kprop_script kdc2.acme.com kdc3.acme.com |
バックアップの時間を変更したい場合もあります。この構成では、バックアッププロセスは毎日の午前 3 時 10 分に起動されます。
マスター KDC 上で kprop_script を使用して、データベースをバックアップおよび伝達します。
データベースのバックアップコピーがすでに利用可能な場合、別のバックアップをする必要はありません。詳細手順については、「手動で Kerberos データベースをスレーブ KDC に伝達するには」を参照してください。
kdc1 # /usr/krb5/lib/kprop_script kdc3.acme.com Database propagation to kdc3.acme.com: SUCCEEDED |
新しいスレーブ上で kdb5_util を使用して、stash ファイルを作成します。
kdc3 # /usr/krb5/sbin/kdb5_util stash kdb5_util: Cannot find/read stored master key while reading master key kdb5_util: Warning: proceeding without master key Enter KDC database master key: <鍵を入力する> |
新しいスレーブ上で KDC デーモン (krb5kdc) を起動します。
kdc3 # /etc/init.d/kdc start |
省略可能: 新しいスレーブ上で NTP などのクロック同期機構を使用して、マスター KDC のクロックと同期させます。
NTP をインストールおよび使用することは必須ではありません。しかし、認証が成功するには、すべてのクロックが krb5.conf ファイルの libdefaults セクションで定義されたデフォルトの時間内に収まっている必要があります。NTP については、「KDC と SEAM クライアント間のクロックの同期」を参照してください。
あるレルムのユーザーが別のレルムでも認証されるように複数のレルムをリンクする方法はいくつかあります。通常は、2 つのレルム間で共有される秘密鍵を確立します。レルム間の関係は階層構造か、直接的な関係のどちらかにすることができます (「レルムの階層」を参照)。
この例では、ENG.EAST.ACME.COM と EAST.ACME.COM の 2 つのレルムを使用します。レルム間認証は両方向で行われます。この手順は、両方のレルムのマスター KDC 上で行います。
階層的なレルム間認証を確立するための前提条件
この手順では、各レルムのマスター KDC を構成しておく必要があります。プロセス全体を通してテストするには、いくつかのクライアントまたはスレーブ KDC をインストールしておく必要があります。
最初のマスター KDC サーバー上でスーパーユーザーになります。
kadmin を使用して、2 つのレルムにチケット許可チケットのサービスプリンシパルを作成します。
マスター KDC を構成するときに作成した admin プリンシパル名の 1 つでログインする必要があります。
# /usr/krb5/sbin/kadmin -p kws/admin Enter password: <kws/admin のパスワードを入力する> kadmin: addprinc krbtgt/ENG.EAST.ACME.COM@EAST.ACME.COM Enter password for principal krgtgt/ENG.EAST.ACME.COM@EAST.ACME.COM: <パスワードを入力する> kadmin: addprinc krbtgt/EAST.ACME.COM@ENG.EAST.ACME.COM Enter password for principal krgtgt/EAST.ACME.COM@ENG.EAST.ACME.COM: <パスワードを入力する> kadmin: quit |
各サービスプリンシパルに入力するパスワードは両方の KDC で同じにします。つまり、krbtgt/ENG.EAST.ACME.COM@EAST.ACME.COM のパスワードは両方のレルムで同じにします。
各レルムのドメイン名を定義するエントリを Kerberos 構成ファイル (krb5.conf) に追加します。
# cat /etc/krb5/krb5.conf [libdefaults] . . [domain_realm] .eng.east.acme.com = ENG.EAST.ACME.COM .east.acme.com = EAST.ACME.COM |
この例では、ENG.EAST.ACME.COM と EAST.ACME.COM のレルムのドメイン名が定義されています。ファイルはトップダウン方式で検索されるため、サブドメインを最初に入れることが重要です。
このレルムのすべてのクライアントに Kerberos 構成ファイルをコピーします。
レルム間認証を適切に動作させるには、すべてのシステム (スレーブ KDC などのサーバーを含む) に新しいバージョンの Kerberos 構成ファイル (/etc/krb5/krb5.conf) をインストールしておく必要があります。
次のレルムでも上記手順を繰り返します。
この例では、ENG.EAST.ACME.COM と SALES.WEST.ACME.COM の 2 つのレルムを使用します。レルム間認証は両方向で行われます。この手順は、両方のレルムのマスター KDC 上で行います。
直接的なレルム間認証を確立するための前提条件
この手順では、各レルムのマスター KDC を構成しておく必要があります。プロセス全体を通してテストするには、いくつかのクライアントまたはスレーブ KDC をインストールする必要があります。
最初のマスター KDC サーバー上でスーパーユーザーになります。
kadmin を使用して、2 つのレルムにチケット許可チケットのサービスプリンシパルを作成します。
マスター KDC を構成するときに作成した admin プリンシパル名の 1 つでログインします。
# /usr/krb5/sbin/kadmin -p kws/admin Enter password: <kws/admin のパスワードを入力する> kadmin: addprinc krbtgt/ENG.EAST.ACME.COM@SALES.WEST.ACME.COM Enter password for principal krgtgt/ENG.EAST.ACME.COM@SALES.WEST.ACME.COM: <パスワードを入力する> kadmin: addprinc krbtgt/SALES.WEST.ACME.COM@ENG.EAST.ACME.COM Enter password for principal krgtgt/SALES.WEST.ACME.COM@ENG.EAST.ACME.COM: <パスワードを入力する> kadmin: quit |
各サービスプリンシパルに入力するパスワードは両方の KDC で同じにします。つまり、krbtgt/ENG.EAST.ACME.COM@SALES.WEST.ACME.COM のパスワードを両方のレルムで同じにします。
リモートレルムの直接パスを定義するエントリを Kerberos 構成ファイル (kdc.conf) に追加します。
この例は、ENG.EAST.ACME.COM レルム用です。SALES.WEST.ACME.COM レルムで適切な定義をするには、レルム名を入れ替えます。
# cat /etc/krb5/krb5.conf [libdefaults] . . [capaths] ENG.EAST.ACME.COM = { SALES.WEST.ACME.COM = . } SALES.WEST.ACME.COM = { ENG.EAST.ACME.COM = . } |
現在のレルムのすべてのクライアントに Kerberos 構成ファイルをコピーします。
レルム間認証を適切に動作させるには、すべてのシステム (スレーブ KDC などのサーバーを含む) に新しいバージョンの Kerberos 構成ファイル (krb5.conf) をインストールしておく必要があります。
次のレルムでも上記手順を繰り返します。
ネットワークアプリケーションサーバーとは、ネットワークアプリケーション (ftp、rcp、rlogin、rsh、および telnet) の 1 つを使用してアクセスを提供するホストのことです。少しの手順を実行するだけで、これらコマンドの SEAM バージョンをサーバーで有効にできます。
この手順では、次の構成パラメータを使用します。
アプリケーションサーバー = boston
admin プリンシパル = kws/admin
DNS ドメイン名 = acme.com
レルム名 = ACME.COM
アプリケーションサーバーを構成するための前提条件
この手順では、マスター KDC を構成しておく必要があります。プロセス全体を通してテストするには、いくつかのクライアントをインストールしておく必要があります。
SEAM クライアントソフトウェアをインストールします。
省略可能: NTP クライアントなどのクロック同期機構をインストールします。
NTP については、「KDC と SEAM クライアント間のクロックの同期」を参照してください。
kadmin を起動します。
SEAM 管理ツールを使用してプリンシパルを追加する方法については、「新しいプリンシパルを作成するには」を参照してください。次の例に、コマンド行で必要とされるプリンシパルを追加する方法を示します。マスター KDC を構成するときに作成した admin プリンシパル名の 1 つでログインします。
kdc1 # /usr/krb5/sbin/kadmin -p kws/admin Enter password: <kws/admin のパスワードを入力する> kadmin: |
サーバーの host プリンシパルを作成します。
kadmin: addprinc -randkey host/boston.acme.com Principal "host/boston.acme.com" created. kadmin: |
省略可能: host プリンシパルの root プリンシパルを作成します。
kadmin: addprinc root/boston.acme.com Enter password for principal root/boston.acme.com@ACME.COM: <パスワードを入力する> Re-enter password for principal root/boston.acme.com@ACME.COM: <もう一度パスワードを入力する> Principal "root/boston.acme.com@ACME.COM" created. kadmin: |
サーバーの host プリンシパルをサーバーの keytab に追加します。
kadmin コマンドが実行されていない場合、次のようなコマンドで再起動します。/usr/krb5/bin/kadmin -p kws/admin
kadmin: ktadd host/boston.acme.com kadmin: Entry for principal host/boston.acme.com with kvno 3, encryption type DES-CBC-CRC added to keytab WRFILE:/etc/krb5/krb5.keytab kadmin: quit |
kadmin を終了します。
kadmin: quit |
NFS サービスは UNIX のユーザー ID でユーザーを識別するので、プリンシパルを直接使用できません。プリンシパルをユーザー ID に変換するには、ユーザーのプリンシパルを UNIX のユーザー ID にマッピングする資格テーブルを作成する必要があります。次の手順では、SEAM NFS サーバーを構成し、資格テーブルを管理し、NFS マウントされたファイルシステムを Kerberos セキュリティモードで起動するために必要な作業を説明します。次の表に、この節で説明する作業を示します。
表 3-3 SEAM NFS サーバーの構成の作業マップ
作業 |
説明 |
参照箇所 |
---|---|---|
SEAM NFS サーバーを構成する | サーバーが Kerberos 認証を必要とするファイルシステムを共有できるようにします。 | 「SEAM NFS サーバーを構成するには」 |
資格テーブルのバックエンド機構を変更する | gsscred が使用するバックエンド機構を定義します。 | 「gsscred テーブルのバックエンド機構を変更するには」 |
資格テーブルを作成する | 資格テーブルを生成します。 | 「資格テーブルを作成するには」 |
ユーザーのプリンシパルを UNIX のユーザー ID にマッピングする資格テーブルを変更する | 資格テーブルの情報を更新します。 | 「1 つのエントリを資格テーブルに追加するには」 |
Kerberos 認証でファイルシステムを共有する | Kerberos 認証が必要なセキュリティモードでファイルシステムを共有します。 | 「複数の Kerberos セキュリティモードで安全な NFS 環境を設定するには」 |
この手順では、マスター KDC を構成しておく必要があります。プロセス全体を通してテストするには、いくつかのクライアントをインストールしておく必要があります。この手順では、次の構成パラメータを使用します。
レルム名 = ACME.COM
DNS ドメイン名 = acme.com
NFS サーバー = denver.acme.com
admin プリンシパル = kws/admin
SEAM NFS サーバーを構成するための前提条件
SEAM クライアントソフトウェアをインストールしておきます。
省略可能: NTP クライアントなどのクロック同期機構をインストールします。
NTP については、「KDC と SEAM クライアント間のクロックの同期」を参照してください。
kadmin を起動します。
SEAM 管理ツールを使用してプリンシパルを追加する方法については、「新しいプリンシパルを作成するには」を参照してください。次の例に、コマンド行で必要とされるプリンシパルを追加する方法を示します。マスター KDC を構成するときに作成した admin プリンシパル名の 1 つでログインします。
denver # /usr/krb5/sbin/kadmin -p kws/admin Enter password: <kws/admin のパスワードを入力する> kadmin: |
サーバーの NFS サービスプリンシパルを作成します。
kadmin: addprinc -randkey nfs/denver.acme.com Principal "nfs/denver.acme.com" created. kadmin: |
省略可能: NFS サーバーの root プリンシパルを作成します。
kadmin: addprinc root/denver.acme.com Enter password for principal root/denver.acme.com@ACME.COM: <パスワードを入力する> Re-enter password for principal root/denver.acme.com@ACME.COM: <もう一度パスワードを入力する> Principal "root/denver.acme.com@ACME.COM" created. kadmin: |
サーバーの NFS サービスプリンシパルをサーバーの keytab に追加します。
kadmin: ktadd nfs/denver.acme.com kadmin: Entry for principal nfs/denver.acme.com with kvno 3, encryption type DES-CBC-CRC added to keytab WRFILE:/etc/krb5/krb5.keytab kadmin: quit |
kadmin を終了します。
kadmin: quit |
gsscred テーブルを作成します。
詳細は、「資格テーブルを作成するには」を参照してください。
Kerberos セキュリティモードを使用して、NFS ファイルシステムを共有します。
詳細は、「複数の Kerberos セキュリティモードで安全な NFS 環境を設定するには」を参照してください。
各クライアント上でユーザーと root の両方のプリンシパルを認証します。
詳細は、「NFS ファイルシステムをマウントするための root 認証の設定」を参照してください。
NFS サーバー上でスーパーユーザーになります。
/etc/gss/gsscred.conf を編集して、バックエンド機構を変更します。
バックエンド機構 (files、xfn_files、xfn_nis、xfn_nisplus、または xfn) の 1 つを使用できます。これらの機構の利点については、「gsscred テーブルの使い方」を参照してください。
gsscred 資格テーブルは、NFS が SEAM プリンシパルをユーザー ID にマッピングするために使用します。NFS クライアントが Kerberos 認証を使用して NFS サーバーからファイルシステムをマウントできるようにするには、このテーブルを作成して、利用可能にしておきます。
適切なサーバー上でスーパーユーザーになります。
どのサーバー上でこのコマンドを使用するか、および、どの ID でこのコマンドを実行するかは、gsscred テーブルをサポートするために使用するバックエンド機構によって異なります。すべての機構 (xfn_nisplus を除く) において、スーパーユーザーになる必要があります。
使用するバックエンド機構 |
操作 |
---|---|
files |
NFS サーバー上で実行する |
xfn |
デフォルトの xfn ファイルの設定に基づいてホストを選択する |
xfn_files |
NFS サーバー上で実行する |
xfn_nis |
NIS マスター上で実行する |
xfn_nisplus |
NIS+ データを変更するアクセス権がある任意の場所で実行する |
省略可能: /var/fn がないときで xfn オプションの 1 つを使用したい場合、初期 XFN データベースを作成します。
# fnselect files # fncreate -t org -o org// |
gsscred を使用して、資格テーブルを作成します。
このコマンドは、/etc/nsswitch.conf の passwd エントリで書かれているすべての情報源から情報を集めます。ローカルのパスワードエントリを資格テーブルに入れたくない場合は、一時的に files エントリを削除します。詳細は、gsscred(1) のマニュアルページを参照してください。
# gsscred -m kerberos_v5 -a |
この手順では、gsscred テーブルをすでに NFS サーバーにインストールしている必要があります。
NFS サーバー上でスーパーユーザーになります。
gsscred を使用して、エントリをテーブルに追加します。
# gsscred -m [mech] -n [name] -u [uid] -a |
mech |
使用されるセキュリティ機構 |
name |
KDC で定義されたユーザーのプリンシパル名 |
uid |
パスワードデータベースで定義されたユーザーのユーザー ID |
-a |
ユーザー ID からプリンシパル名へのマッピングを追加する |
次の例では、ユーザー名 sandy のエントリを追加して、ユーザー ID 3736 にマッピングしています。コマンド行にユーザー ID を指定しない場合、ユーザー ID はパスワードファイルから取得されます。
# gsscred -m kerberos_v5 -n sandy -u 3736 -a |
NFS サーバー上でスーパーユーザーになります。
/etc/dfs/dfstab ファイルを編集して、適切なエントリに sec= オプションを追加し、必要なセキュリティモードを指定します。
# share -F nfs -o [mode] [filesystem] |
mode |
共有時に使用されるセキュリティモード。複数のセキュリティモードを使用する場合、リストの最初のモードがデフォルトとして autofs に使用される |
filesystem |
共有されるファイルシステムへのパス |
指定したファイルシステムのファイルにアクセスするすべてのクライアントは Kerberos 認証が必要です。ファイルへのアクセスを完了するには、NFS クライアント上のユーザーと root の両方のプリンシパルが認証される必要があります。
NFS サービスがサーバー上で動作していることを確認します。
Share コマンドを初めて実行する場合、NFS デーモンが動作していないこともあります。次のコマンドで、NFS デーモンを強制終了して再起動します。
# /etc/init.d/nfs.server stop # /etc/init.d/nfs.server start |
省略可能: autofs を使用している場合、auto_master
データを編集して、デフォルト以外のセキュリティモードを選択します。
autofs でファイルシステムにアクセスしていない場合、あるいは、デフォルトのセキュリティモードを使用する場合、この手順を行う必要はありません。
/home auto_home -nosuid,sec=krbi |
省略可能: 手動で mount コマンドを実行して、デフォルト以外のモードでファイルシステムにアクセスします。
また、mount コマンドを使用してもセキュリティモードを指定できますが、この方法ではオートマウントの機能は使えません。
# mount -F nfs -o sec=krb5p /export/home |
この例では、ファイルにアクセスするために Kerberos 認証が必要です。
# share -F nfs -o sec=krb5 /export/home |
この例では、3 つの Kerberos セキュリティモードをすべて選択しています。マウント要求を行うときにセキュリティモードを指定しない場合、リストの最初のモードがすべての NFS V3 クライアント (この場合は krb5) 上で使用されます。詳細は、「share コマンドへの変更」を参照してください。
# share -F nfs -o sec=krb5:krb5i:krb5p /export/home |
SEAM クライアントとは、SEAM サービスを使用する必要があるネットワーク上の任意のホスト (KDC サーバーを除く) のことです。この節では、SEAM クライアントをインストールする手順と、root 認証を使用して NFS ファイルシステムをマウントする方法を説明します。
この手順では、次の構成パラメータを使用します。
レルム名 = ACME.COM
DNS ドメイン名 = acme.com
マスター KDC = kdc1.acme.com
スレーブ KDC = kdc2.acme.com
クライアント = client.acme.com
admin プリンシパル = kws/admin
ユーザープリンシパル = mre
オンラインヘルプの URL = http://denver/ab2/coll.384.1/SEAM/@AB2PageView/6956
SEAM クライアントを構成するための前提条件
SEAM クライアントソフトウェアがインストールされている必要があります。
Kerberos 構成ファイル (krb5.conf) を編集します。
事前構成手順を使用した場合、このファイルは編集する必要がありません。しかし、ファイルの内容は確認してください。SEAM のデフォルトからファイルを変更するには、レルム名とサーバーの名前を変更して、gkadmin のヘルプファイルへのパスを指定する必要があります。
kdc1 # cat /etc/krb5/krb5.conf [libdefaults] default_realm = ACME.COM [realms] ACME.COM = { kdc = kdc1.acme.com kdc = kdc2.acme.com admin_server = kdc1.acme.com } [domain_realm] .acme.com = ACME.COM # # ドメイン名とレルム名が同じ場合、このエントリは必要ない。 # [logging] default = FILE:/var/krb5/kdc.log kdc = FILE:/var/krb5/kdc.log [appdefaults] gkadmin = { help_url = //denver/ab2/coll.384.1/SEAM/@AB2PageView/6956 |
省略可能: NTP などのクロック同期機構を使用して、マスター KDC のクロックと同期させます。
NTP については、「KDC と SEAM クライアント間のクロックの同期」を参照してください。
省略可能: ユーザープリンシパルを作成します (すでに存在している場合は必要ありません)。
ユーザープリンシパルを作成する必要があるのは、このホストに関連するユーザーにプリンシパルを割り当てていない場合だけです。SEAM 管理ツールを使用する方法については、「新しいプリンシパルを作成するには」を参照してください。次に、コマンド行の例を示します。
client1 # /usr/krb5/sbin/kadmin -p kws/admin Enter password: <kws/admin のパスワードを入力する> kadmin: addprinc mre Enter password for principal mre@ACME.COM: <パスワードを入力する> Re-enter password for principal mre@ACME.COM: <もう一度パスワードを入力する> kadmin: |
root プリンシパルを作成します。
kadmin: addprinc root/client1.acme.com Enter password for principal root/client1.acme.com@ACME.COM: <パスワードを入力する> Re-enter password for principal root/client1.acme.com@ACME.COM: <もう一度パスワードを入力する> kadmin: quit |
(省略可能) SEAM クライアントのユーザーが Kerberos 認証を使用して Kerberos 化された NFS ファイルシステムを自動的にマウントするようにしたい場合、root ユーザーを認証する必要があります。
このプロセスは、kinit コマンドを使用することで確実に実行されます。しかし、Kerberos で保護されたファイルシステムをマウントするたびに、ユーザーは root として kinit を使用しなければなりません。その代わりに、keytab ファイルを使用する方法もあります。keytab 要件についての詳細は、「NFS ファイルシステムをマウントするための root 認証の設定」を参照してください。
client1 # /usr/krb5/bin/kinit root/client1.acme.com Password for root/client1.acme.com@ACME.COM: <パスワードを入力する> |
keytab ファイルオプションを使用するには、kadmin を使用して、root プリンシパルをクライアントの keytab に追加します。
client1 # /usr/krb5/sbin/kadmin -p kws/admin Enter password: <kws/admin のパスワードを入力する> kadmin: ktadd root/client1.acme.com kadmin: Entry for principal root/client.acme.com with kvno 3, encryption type DES-CBC-CRC added to keytab WRFILE:/etc/krb5/krb5.keytab kadmin: quit |
クライアントが Kerberos チケットの有効期限が切れることをユーザーに警告するためには、/etc/krb5/warn.conf ファイルにエントリを作成します。
詳細は、warn.conf(4) のマニュアルページを参照してください。
ユーザーのシェル検索パスを修正して、SEAM のコマンドとマニュアルページの場所を指定します。
構成ファイルを使用して SEAM ソフトウェアをインストールし、PATH 定義を自動的に更新することを選択した場合、MANPATH 変数だけを変更する必要があります。C シェルを使用する場合、次のように入力します。
% set path=(/usr/krb5/bin $path) % set MANPATH=(/usr/krb5/man $MANPATH) |
このような変更を永続的にシェル検索パスに適用するには、.cshrc または .login 起動ファイルを編集します。
Bourne シェルまたは Korn シェルを使用する場合、次のように入力します。
$ PATH=/usr/krb5/bin:$PATH $ MANPATH=/usr/krb5/man:$MANPATH |
このような変更を永続的にシェル検索パスに適用するには、.profile 起動ファイルを編集します。
ユーザーが Kerberos 化されていない NFS ファイルシステムにアクセスしたい場合、NFS ファイルシステムには root としてマウントできます。あるいは、(root アクセス権がなくても) アクセスすれば、オートマウンタで自動的にアクセスできます。
Kerberos 化された NFS ファイルシステムをマウントする場合もほとんど同じです。しかし、若干の問題があります。Kerberos 化された NFS ファイルシステムをマウントするには、通常、クライアントの root プリンシパルはクライアントの keytab に存在していないため、ユーザーは root として kinit コマンドを使用し、クライアントの root プリンシパルの資格を取得する必要があります。これは、オートマウンタが設定されているときにも同様です。さらに、すべてのユーザーはシステムの root パスワードと root プリンシパルのパスワードを知っていなければなりません。
この手順を省略するには、クライアントの root プリンシパルをクライアントの keytab に追加します。そうすると、自動的に root の資格が提供されます。この方法でユーザーは kinit コマンドを実行せずに NFS ファイルシステムをマウントでき、利用しやすくなりますが、セキュリティが侵害される可能性があります。たとえば、keytab に root プリンシパルを持つシステムへのアクセス権を誰かが取得した場合、そのユーザーは root の資格も取得できます。したがって、セキュリティ保護のための予防措置が必要となります。詳細は、「keytab の管理」を参照してください。
Kerberos 認証システムを使用しているすべてのホストは内部クロックを同期させ、指定した最大時間 (「クロックスキュー」と呼ぶ) の誤差に収まるようにします。同時に Kerberos のセキュリティをチェックすることにもなります。任意のホスト間でクロックスキューを超えた場合、クライアントの要求は拒否されます。
また、クロックスキューは、再実行された要求を認識および拒否するために、アプリケーションサーバーがすべての Kerberos プロトコルメッセージを追跡する時間も決定します。したがって、クロックスキュー値を大きくするほど、アプリケーションサーバーが収集する情報も多くなります。
最大クロックスキューのデフォルト値は 300 秒 (5 分) です。この値は、krb5.conf ファイルの libdefaults セクションで変更できます。
セキュリティ保護のため、クロックスキューには 300 秒より小さな値を指定してください。
KDC と SEAM クライアント間でクロックを同期させることは重要であるため、Network Time Protocol (NTP) ソフトウェアを使用することを推奨します。University of Delaware の Network Time Protorol (NTP) パブリックドメインソフトウェアは 2.6 リリース以降の Solaris リリースに入っています。
rdate コマンドと cron ジョブを使用してもクロックを同期させることができます。この方法では、NTP を使用するよりも処理が少なくなります。しかし、この節では NTP を使用する方法を中心に説明します。さらに、ネットワークでクロックを同期させる場合、クロック同期プロトコルもセキュリティが保護されている必要があります。
NTP を使用すると、ネットワーク環境で正確な時間とネットワーククロック同期を管理できます。NTP は基本的にサーバークライアント方式です。1 つのシステムをマスタークロックとして選択して (NTP サーバー)、他のすべてのシステムはマスタークロックと同期するように設定します (NTP クライアント)。これらの作業はすべて xntpd デーモンで実行できます。xntpd デーモンは、インターネット標準時間サーバーに従って、UNIX システムの時刻を設定および保守します。図 3-1 に、サーバークライアント方式の NTP を使用する例を示します。
KDC と SEAM クライアントが継続的にクロックを同期させるには、次の手順に従います。
NTP サーバーをネットワーク (マスター KDC 以外の任意のシステム) 上で設定します。詳細は、「NTP サーバーを設定するには」を参照してください。
ネットワーク上で構成した後、KDC と SEAM クライアントを NTP サーバーの NTP クライアントとして設定します。詳細は、「NTP クライアントを設定するには」を参照してください。
NTP サーバーとなるシステム上でスーパーユーザーになります。
/etc/inet ディレクトリに移動します。
ntp.server ファイルを ntp.conf ファイルにコピーします。
# cp ntp.server ntp.conf |
/etc/init.d ディレクトリに移動します。
xntpd デーモンを起動します。
# ./xntpd start |
NTP クライアントとなるシステム上でスーパーユーザーになります。
/etc/inet ディレクトリに移動します。
ntp.client ファイルを ntp.conf ファイルにコピーします。
# cp ntp.client ntp.conf |
/etc/init.d ディレクトリに移動します。
xntpd デーモンを起動します。
# ./xntpd start |
これらの手順は、マスター KDC とスレーブ KDC の切り替えを容易にします。マスター KDC とスレーブ KDC を切り替えるのは、マスター KDC が何らかの理由で異常終了した場合、あるいはマスター KDC を再インストールしなければならない (たとえば、新しいハードウェアをインストールする) 場合だけです。
この手順は、マスター KDC としても利用したいスレーブ KDC サーバー上で実行します。
インストール時、マスター KDC サーバーと切り替え可能なスレーブ KDC サーバーには別名を使用します。
KDC のホスト名を定義するときは各システムの別名が DNS に含まれていることを確認して、/etc/krb5/krb5.conf にホストを定義するときは別名を使用します。
マスター KDC ソフトウェアをインストールします。
マスター KDC ソフトウェアをインストールすると、切り替え中に必要なバイナリなどのファイルが提供されます。これらのファイルには、スレーブ KDC サーバーが必要とするファイルもすべて含まれています。インストールが完了したときには、システムをリブートしないでください。
スレーブ KDC を構成します。
切り替え前に、当該サーバーはレルム内の他のスレーブ KDC とまったく同じように機能している必要があります。この方法については、「スレーブ KDC を構成するには」を参照してください。スレーブソフトウェアはインストールしないでください。必要なファイルはすべて、マスターソフトウェアをインストールするときにインストールされます。
マスター KDC コマンドを移動します。
当該スレーブからマスター KDC コマンドを実行できないようにするには、kprop、kadmind、および kadmin.local を別の場所に移動します。
kdc4 # mv /usr/krb5/lib/kprop /usr/krb5/lib/kprop.save kdc4 # mv /usr/krb5/lib/kadmind /usr/krb5/lib/kadmind.save kdc4 # mv /usr/krb5/sbin/kadmin.local /usr/krb5/sbin/kadmin.local.save |
/etc/init.d/kdc.master 内で kadmind の起動を無効にします。
当該スレーブが要求を処理できないようにするには、KDC データベースを変更して、スクリプト内で kadmind を起動する行をコメント化します。
kdc4 # cat /etc/init.d/kdc.master . . case "$1" in 'start') if [ -f $KDC_CONF_DIR/kdc.conf ] then # $BINDIR/kadmind fi ;; |
root の crontab ファイル内で kprop 行をコメント化します。
この手順を行うことにより、当該スレーブが KDC データベースのコピーを伝達できないようになります。
kdc4 # crontab -e #ident "@(#)root 1.19 98/07/06 SMI" /* SVr4.0 1.1.3.1 */ # # root の crontab はアカウントデータを収集するために使用される。 # # rtc コマンドは、夏時間が変更されたときに、実時間クロックを調整 # するために実行される。 # 10 3 * * 0,4 /etc/cron.d/logchecker 10 3 * * 0 /usr/lib/newsyslog 15 3 * * 0 /usr/lib/fs/nfs/nfsfind 1 2 * * * [ -x /usr/sbin/rtc ] && /usr/sbin/rtc -c > /dev/null 2>&1 30 3 * * * [ -x /usr/lib/gss/gsscred_clean ] && /usr/lib/gss/gsscred_clean #10 3 * * * /usr/krb5/lib/kprop_script kdc1.acme.sun.com #SUNWkr5ma |
この手順では、スレーブ KDC サーバーを切り替え可能なスレーブとして設定しておく必要があります (「切り替え可能なスレーブ KDC を構成するには」を参照)。この手順では、切り替えられるマスターサーバーの名前が kdc1 で、新しいマスターとなるスレーブサーバーの名前が kdc4 です。
古いマスター上で kadmind プロセスを強制終了します。
kadmind プロセスを強制終了すると、KDC データベースを変更できなくなります。
kdc1 # /etc/init.d/kdc.master stop |
古いマスター上で root の crontab ファイル内の kprop 行をコメント化します。
この手順を行うことによって、古いマスターが KDC データベースのコピーを伝達できなくなります。
kdc1 # crontab -e #ident "@(#)root 1.19 98/07/06 SMI" /* SVr4.0 1.1.3.1 */ # # root の crontab はアカウントデータを収集するために使用される。 # # rtc コマンドは、夏時間が変更されたときに、実時間クロックを調整 # するために実行される。 # 10 3 * * 0,4 /etc/cron.d/logchecker 10 3 * * 0 /usr/lib/newsyslog 15 3 * * 0 /usr/lib/fs/nfs/nfsfind 1 2 * * * [ -x /usr/sbin/rtc ] && /usr/sbin/rtc -c > /dev/null 2>&1 30 3 * * * [ -x /usr/lib/gss/gsscred_clean ] && /usr/lib/gss/gsscred_clean #10 3 * * * /usr/krb5/lib/kprop_script kdc2.acme.sun.com #SUNWkr5ma |
古いマスター上で /etc/init.d/kdc.master 内の kadmind の起動を無効にします。
サーバーをリブートするときにマスターが kadmind を再起動できないようにするには、スクリプト内で kadmind を起動する行をコメント化します。
kdc1 # cat /etc/init.d/kdc.master . . case "$1" in 'start') if [ -f $KDC_CONF_DIR/kdc.conf ] then # $BINDIR/kadmind fi ;; |
古いマスター上でデータベースのバックアップと伝達のために kprop_script を実行します。
kdc1 # /usr/krb5/lib/kprop_script kdc4.acme.com Database propagation to kdc4.acme.com: SUCCEEDED |
古いマスター上でマスター KDC コマンドを移動します。
マスター KDC コマンドを実行できないようにするには、kprop、kadmind、および kadmin.local を別の場所に移動します。
kdc4 # mv /usr/krb5/lib/kprop /usr/krb5/lib/kprop.save kdc4 # mv /usr/krb5/lib/kadmind /usr/krb5/lib/kadmind.save kdc4 # mv /usr/krb5/sbin/kadmin.local /usr/krb5/sbin/kadmin.local.save |
DNS サーバー上でマスターの別名を変更します。
サーバーを変更するには、acme.com ゾーンファイルを編集して、masterkdc のエントリを変更します。
masterkdc IN CNAME kdc4 |
DNS サーバー上でインターネットドメイン名サーバーを再起動します。
次のコマンドを両方のサーバー上で実行して、新しい別名情報を取得します。
# pkill -1 in.named |
新しいマスター上でマスター KDC コマンドを移動します。
kdc4 # mv /usr/krb5/lib/kprop.save /usr/krb5/lib/kprop kdc4 # mv /usr/krb5/lib/kadmind.save /usr/krb5/lib/kadmind kdc4 # mv /usr/krb5/sbin/kadmin.local.save /usr/krb5/sbin/kadmin.local |
新しいマスター上で kadmin.local を使用して、kadmin 用に keytab ファイルを作成します。
次のコマンドは、admin と changepw のプリンシパルエントリを持つ特別な keytab ファイルを作成します。これらのプリンシパルは kadmind サービスに必要です。
kdc4 # /usr/krb5/sbin/kadmin.local kadmin.local: ktadd -k /etc/krb5/kadm5.keytab kadmin/kdc4.acme.com Entry for principal kadmin/kdc4.acme.com with kvno 3, encryption type DES-CBC-CRC added to keytab WRFILE:/etc/krb5/kadm5.keytab. kadmin.local: ktadd -k /etc/krb5/kadm5.keytab changepw/kdc4.acme.com Entry for principal changepw/kdc4.acme.com with kvno 3, encryption type DES-CBC-CRC added to keytab WRFILE:/etc/krb5/kadm5.keytab. kadmin.local: quit |
新しいマスター上で /etc/init.d/kdc.master 内の kadmind の起動を有効にします。
kdc4 # cat /etc/init.d/kdc.master . . case "$1" in 'start') if [ -f $KDC_CONF_DIR/kdc.conf ] then $BINDIR/kadmind fi ;; |
新しいマスター上で kadmind を起動します。
kdc4 # /etc/init.d/kdc.master start |
root の crontab ファイル内で kprop 行を有効にします。
kdc4 # crontab -e #ident "@(#)root 1.19 98/07/06 SMI" /* SVr4.0 1.1.3.1 */ # # root の crontab はアカウントデータを収集するために使用される。 # # rtc コマンドは、夏時間が変更されたときに、実時間クロックを調整 # するために実行される。 # 10 3 * * 0,4 /etc/cron.d/logchecker 10 3 * * 0 /usr/lib/newsyslog 15 3 * * 0 /usr/lib/fs/nfs/nfsfind 1 2 * * * [ -x /usr/sbin/rtc ] && /usr/sbin/rtc -c > /dev/null 2>&1 30 3 * * * [ -x /usr/lib/gss/gsscred_clean ] && /usr/lib/gss/gsscred_clean 10 3 * * * /usr/krb5/lib/kprop_script kdc1.acme.sun.com #SUNWkr5ma |
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 オプションを使用します。
これらの手順を使用すると、SEAM アプリケーションサーバーと KDC サーバー上でセキュリティを強化することができます。
この手順は、telnet、ftp、rcp、rsh、および rlogin によるサーバーへのネットワークアクセスを、Kerberos 認証されたトランザクションだけに制限します。
/etc/inetd.conf の telnet エントリを編集します。
-a user オプションを telnet エントリに追加して、有効な認証情報を提供できるユーザーだけにアクセスを制限します。
telnet stream tcp nowait root /usr/krb5/lib/telnetd telnetd -a user |
/etc/inetd.conf の ftp エントリを編集します。
-a オプションを ftp エントリに追加して、Kerberos 認証された接続だけを許可します。
ftp stream tcp nowait root /usr/krb5/lib/ftpd ftpd -a |
/etc/inetd.conf の他のサービスの Solaris エントリを無効にします。
shell と login のエントリはコメント化または削除する必要があります。
# shell stream tcp nowait root /usr/sbin/in.rshd in.rshd # login stream tcp nowait root /usr/sbin/in.rlogind in.rlogind |
マスターとスレーブの KDC サーバーは両方とも KDC データベースのコピーをローカルに格納しています。これらのサーバーへのアクセスを制限して、データベースのセキュリティを保護することは、SEAM をインストールする場合のセキュリティ全体にとって重要です。
/etc/inetd.conf でリモートサービスを無効にします。
KDC サーバーでセキュリティを保護するためには、重要ではないネットワークサービスをすべて無効にします。つまり、/etc/inetd.conf で、このようなサービスを起動するエントリをコメント化します。ほとんどの環境では、実行する必要のあるサービスは time と krdb5_kprop です。さらに、ループバック tli (ticlts、ticotsord、および ticlts) を使用するサービスは有効のままでもかまいません。編集後、ファイルは次のようになります (簡潔にするため、コメントの多くは削除されています)。
kdc1 # cat /etc/inetd.conf # #ident "@(#)inetd.conf 1.33 98/06/02 SMI" /* SVr4.0 1.5 */ . .#name dgram udp wait root /usr/sbin/in.tnamed in.tnamed ##shell stream tcp nowait root /usr/sbin/in.rshd in.rshd #login stream tcp nowait root /usr/sbin/in.rlogind in.rlogind #exec stream tcp nowait root /usr/sbin/in.rexecd in.rexecd #comsat dgram udp wait root /usr/sbin/in.comsat in.comsat #talk dgram udp wait root /usr/sbin/in.talkd in.talkd # #uucp stream tcp nowait root /usr/sbin/in.uucpd in.uucpd # #finger stream tcp nowait nobody /usr/sbin/in.fingerd in.fingerd # # Time service is used for clock synchronization. # time stream tcp nowait root internal time dgram udp wait root internal # . . # 100234/1 tli rpc/ticotsord wait root /usr/lib/gss/gssd gssd #dtspc stream tcp nowait root /usr/dt/bin/dtspcd /usr/dt/bin/dtspcd #100068/2-5 dgram rpc/udp wait root /usr/dt/bin/rpc.cmsd rpc.cmsd 100134/1 tli rpc/ticotsord wait root /usr/krb5/lib/ktkt_warnd kwarnd #klogin stream tcp nowait root /usr/krb5/lib/rlogind rlogind -k #eklogin stream tcp nowait root /usr/krb5/lib/rlogind rlogind -k -e #telnet stream tcp nowait root /usr/krb5/lib/telnetd telnetd #ftp stream tcp nowait root /usr/krb5/lib/ftpd ftpd #kshell stream tcp nowait root /usr/krb5/lib/rshd rshd -k -c -A krb5_prop stream tcp nowait root /usr/krb5/lib/kpropd kpropd |
変更後、サーバーをリブートします。
KDC をサポートするハードウェアへのアクセスを制限します。
物理的なアクセスを制限するため、サーバーとそのモニターは安全な場所に置きます。一般ユーザーは絶対にこのサーバーにアクセスできないようにしてください。
KDC データベースのバックアップをローカルのディスクまたはスレーブに格納します。
KDC のバックアップをテープで行う場合、そのテープはセキュリティの保護される場所に保存してください。これは、keytab ファイルのコピーの場合も同様です。このようなファイルは、他のシステムと共有していないローカルのファイルシステムに格納するのが最適です。格納用のファイルシステムは、マスター KDC サーバーまたは任意のスレーブのどちらに置くこともできます。