Solaris のシステム管理 (ネーミングとディレクトリサービス : NIS+ 編)

資格情報が古い

資格、アクセス権ともに正しいにもかかわらず、クライアントの要求が拒否されるという場合もあります。これはおそらく、名前空間のどこかに古い情報が存在することが原因です。

資格情報の保存と更新

公開鍵など、資格に関する情報は、名前空間内の様々な場所に保存されています。NIS+ は、情報を格納しているオブジェクトの生存期間に応じてこの情報を定期的に更新しますが、場合によっては、更新の間に同期が失われ、システムが正常に動作しなくなることがあります。その結果、一部の操作が行えなくなります。表 24–2 は、資格に関する情報を保存するオブジェクト、テーブル、ファイルと、そのリセットの方法を示したものです。

表 24–2 資格に関する情報の保存場所

項目 

保存対象 

リセットおよび更新の方法 

cred テーブル

NIS+ 主体の非公開鍵と公開鍵。これらの鍵のマスターコピーとなる 

nisaddcred を使用して新しい資格を作成する。これによって既存の資格が更新される。chkey を使用しても同様のことが行える

ディレクトリオブジェクト 

個々のサーバーの公開鍵のコピー 

ディレクトリオブジェクトに対して /usr/lib/nis/nisupdkeys コマンドを実行する

キーサーバー 

その時点でログインされている NIS+ 主体の非公開鍵 

主体ユーザーに対して keylogin を実行する。あるいは、主体マシンに対して keylogin -r を実行する

NIS+ デーモン 

ディレクトリオブジェクトのコピー (そのサーバーの公開鍵のコピーが含まれる) 

NIS+ サービスを無効にすることにより rpc.nisd デーモンとキャッシュマネージャを停止し、/var/nis から NIS_SHARED_DIRCACHE を削除する。その後、NIS+ サービスを再起動する

ディレクトリキャッシュ 

ディレクトリオブジェクトのコピー (そのサーバーの公開鍵のコピーが含まれる) 

-i オプションを指定して NIS+ キャッシュマネージャを再起動する

コールドスタートファイル 

ディレクトリオブジェクトのコピー (そのサーバーの公開鍵のコピーが含まれる) 

NIS+ サービスを停止する。/var/nis から NIS_COLD_START ファイルと NIS_SHARED_DIRCACHE ファイルを削除する。NIS+ サービスを再起動する

passwd テーブル

ユーザーのパスワードまたはマシンのスーパーユーザーのパスワード 

passwd -r nisplus コマンドを使用する。これによって、NIS+ passwd テーブル、cred テーブルの中でパスワードが更新される

passwd ファイル

ユーザーのパスワードまたはマシンのスーパーユーザーのパスワード 

passwd -r nisplus コマンドを使用する。スーパーユーザー、一般ユーザーのどちらでログインしてもよい

passwd マップ

(NIS) 

ユーザーのパスワードまたはマシンのスーパーユーザーのパスワード 

passwd -r nisplus を使用する

古くなったキャッシュに保存された鍵の更新

情報が古くなる原因としてもっとも多いのが、サーバーの公開鍵のバージョンが古くなることです。一般に、この問題を解決するには、アクセスするドメインに対して nisupdkeys を実行します (nisupdkeys コマンドの使用方法の詳細は、第 12 章「NIS+ 資格の管理」を参照)。

鍵の中にはファイルやキャッシュに保存されているものもあるため、nisupdkeys ですべての問題を解決できるわけではありません。鍵を手作業で更新しなければならない場合もあります。この場合は、「サーバーの公開鍵の内容は、公開鍵が作成された後どのように名前空間オブジェクトに伝えられるのか」ということについて理解する必要があります。サーバーの公開鍵の伝播には、一般に以下の 5 つの段階があります。それぞれの詳細について説明します。

1: サーバーの公開鍵が作成される

NIS+ サーバーはまず第一 に NIS+ クライアントです。つまり、NIS+ サーバーの公開鍵は、NIS+ クライアントの公開鍵と同様に、 nisaddcred コマンドによって生成されます。 公開鍵はその後、サーバーが実際にサポートするドメインではなく、サーバーのホームドメインの cred テーブルに保存されます。

2: 公開鍵の内容がディレクトリオブジェクトに伝えられる

NIS+ ドメインと NIS+ サーバーの設定後は、サーバーとドメインを関係づけることができます。この「関係づけ」は、nismkdir コマンドで行います。nismkdir コマンドによってサーバーとディレクトリの関係づけが行われる際、サーバーの公開鍵も cred テーブルからドメインのディレクトリオブジェクトにコピーされます。たとえば、サーバーが doc.com. ルートドメインのクライアントで、sales.doc.com. ドメインのマスターサーバーになっているという場合を考えてみましょう。

図 24–1 ディレクトリオブジェクトへの公開鍵の伝播

図に、公開鍵が cred.org_dir.doc.com. ドメインから sales.doc.com. ディレクトリオブジェクトにコピーされる様子を示します。

公開鍵は、cred.org_dir.doc.com. ドメインから、sales.doc.com. ディレクトリオブジェクトにコピーされます。以上のことは、niscat -o sales.doc.com. というコマンドを使用して確認できます。

3: ディレクトリオブジェクトの内容がクライアントファイルに伝えられる

nisinit ユーティリティまたは nisclient スクリプトを使用すれば、すべての NIS+ クライアントを初期化できます。

ほかの類似のコマンドと同様、nisinit (または nisclient) では、コールドスタートファイル /var/nis/NIS_COLDSTART が作成されます。コールドスタートファイルは、クライアントのディレクトリキャッシュ /var/nis/NIS_SHARED_DIRCACHE の初期化に使用されます。コールドスタートファイルには、クライアントのドメイン中のディレクトリオブジェクトのコピーが含まれています。ディレクトリオブジェクトには、すでにサーバーの公開鍵のコピーが含まれているため、これで公開鍵の内容はクライアントのコールドスタートファイルに伝えられたことになります。

また、クライアントがホームドメインの外のサーバーに対して要求をした場合、リモートドメインのディレクトリオブジェクトのコピーが、クライアントの NIS_SHARED_DIRCACHE ファイルに保存されます。クライアントのキャッシュの内容は、nisshowcache コマンドを使用して調べることができます。

複製サーバーがドメインに追加されるか、サーバーの鍵が更新されるまでは、鍵の伝播はこの段階にとどまります。

4: 複製サーバーがドメインに追加された場合の処理

複製サーバーがドメインに追加されると、nisping コマンドによって NIS+ テーブル (cred テーブルを含む) が新しい複製サーバーにダウンロードされます。これによって、元のサーバーの公開鍵も複製サーバーの cred テーブルに保存されます。

5: サーバーの公開鍵が更新された場合の処理

サーバーの DES 資格 (サーバーのルート ID) を変更すると、公開鍵も変更されます。その結果、サーバー用に cred テーブルに保存される公開鍵が、以下の場所に保存されるものと矛盾します。

サーバーの鍵は、ほとんどの場所において数分 〜 12 時間で自動的に更新されます。すぐに更新するには、以下のコマンドを使用します。

表 24–3 サーバーの鍵の更新

保存場所 

コマンド 

参照する項目 

複製サーバーの cred テーブル (nisping を使用しなくても、テーブルは数分で自動的に更新される)

nisping

nisping コマンド」

サーバーがサポートするドメインのディレクトリオブジェクト 

nisupdkeys

nisupdkeys コマンド」

クライアントの NIS_COLDSTART ファイル

nisinit -c コマンド

nisinit コマンド」

クライアントの NIS_SHARED_DIRCACHE ファイル

nis_cachemgr

nis_cachemgr デーモン」


注 –

nis_cachemgr の再起動は、既存の nis_cachemgr を停止してから行います。nis_cachemgr を停止するには、svcadm disable /network/rpc/nisplus:default を使用して NIS+ サービスを無効にします。