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

第 13 章 NIS+ 鍵の管理

この章では、NIS+ の鍵と、鍵を管理する方法について説明します。


注 –

NIS+ セキュリティタスクには、Solstice AdminSuite ツールがあればより簡単に実行できるものがあります。



注 –

NIS+ は、将来のリリースでサポートされない可能性があります。NIS+ から LDAP への移行支援ツールは、Solaris 9 オペレーティング環境で使用できます (『Solaris のシステム管理 (ネーミングとディレクトリサービス : DNS、NIS、LDAP 編)』を参照)。詳細については、http://www.sun.com/directory/nisplus/transition.html を参照してください。


NIS+ 鍵

NIS+ 鍵は NIS+ の関連情報を暗号化するために使用します。

この章では、NIS+ セキュリティシステム全体と、特にシステムで鍵が果たす役割について、十分理解しているユーザーを想定しています (詳しくは、第 11 章「NIS+ のセキュリティの概要」を参照してください)。

NIS+ 鍵に関するコマンドとその構文やオプションについての詳しい説明は、nis+(1) のマニュアルページを参照してください。また、nisaddcred コマンドも鍵に関連のある働きをします。詳細については、 第 12 章「NIS+ 資格の管理」を参照してください。

キーログイン

主体がログインする時、パスワードの入力を求めるプロンプトが現れます。このパスワードはユーザーがセキュリティゲートをパスし、ネットワークにアクセスするために必要なものです。ログインプロセスは、ユーザーのホームドメインの cred テーブルにあるユーザーの非公開鍵を復号化しキーサーバーへ渡します。キーサーバーはその復号化された非公開鍵を使って、ユーザーが NIS+ オブジェクトにアクセスするつど、ユーザーの認証を行います。

通常は、この場合だけ主体にパスワードが要求されます。しかし、cred テーブルにある主体の非公開鍵がユーザーのログインパスワードと異なるパスワードを使用して暗号化されていると、ログインプロセスはそれを login の際にログインパスワードを使って復号化できないので、キーサーバーに復号化した非公開鍵を提供できません。(これは cred テーブル内にあるユーザーの非公開鍵が、ログインパスワードと異なる Secure-RPC パスワードを使用して暗号化された場合に多く起こります。)


注 –

「ネットワークパスワード」と「Secure-RPC パスワード」を同意語として使用する場合があります。


この問題を一時的に解決するには、ログインの後には必ず主体が keylogin コマンドを使用して、キーログインを実行する必要があります。-r フラグを使って、スーパーユーザー主体にログインし、ホストの /etc/.rootkey にスーパーユーザーの鍵を格納します。

主体ユーザーの場合


keylogin

主体マシンの場合 (一度だけ)


keylogin -r

ただし、オリジナルのパスワードを使用して確実にキーログインを実行しても、そのログインセッションにおいて一時的に問題が解決するだけです。cred テーブルの非公開鍵はユーザーのログインパスワードと異なるパスワードを用いて暗号化されたままであり、次にユーザーがログインした時に同じ問題が起こります。この問題を永久的に解決するには、chkey コマンドを使用して、非公開鍵の暗号化に使ったパスワードをユーザーのログインパスワードに変更します (NIS+ 主体の鍵の変更を参照)。

NIS+ 主体の鍵の変更

chkey コマンドは cred テーブルに格納されている NIS+ 主体の公開および非公開鍵を変更します。このコマンドは passwd テーブル内もしくは /etc/passwd ファイル内のどちらのエントリにも影響を与えません。

chkey コマンドについて

詳細については、マニュアルを参照してください。


注 –

NIS+ 環境では、どんな管理ツールまたは passwd (あるいは nispasswd) コマンドを用いてログインパスワードを変更しても、cred テーブル内の非公開鍵は新規のパスワードを使用して自動的に再暗号化されます。従って、ログインパスワードの変更後に chkey コマンドを実行する必要はありません。


chkey コマンドはキーサーバー、cred テーブル、および passwd テーブルとの関連で動作します。chkey を実行するには次のようにします。

ログインパスワードを使って非公開鍵を再暗号化するために chkey コマンドを使用するには、最初にオリジナルのパスワードを用いて keylogin を実行し、次に 表 13–1 に示す手順で chkey -p を実行します。表 13–1 は、主体ユーザーとして keyloginchkey を実行する方法を示しています。

表 13–1 非公開鍵の再暗号化:コマンドの説明

作業 

コマンド 

ログインする 

Sirius% login Login-name

ログインパスワードを入力する 

Password:

ログインパスワードと Secure RPC パスワードが異なっている場合、keylogin を実行する

Sirius% keylogin

非公開鍵の暗号化に使用したオリジナルパスワードを入力する 

Password:Secure RPC password

chkey を実行する

Sirius% chkey -p
Updating nisplus publickey database
Updating new key for 'unix.1199@Doc.com'.

ログインパスワードを入力する 

Enter login password: login-password

ログインパスワードを再入力する 

Retype password:

鍵の変更

次の節では、NIS+ 主体の鍵の変更方法を説明します。


注 –

サーバーの鍵を変更するときは常に、ドメイン内の全クライアントの鍵情報も更新する必要があります。方法については、クライアントの鍵情報の更新で説明します。


ルートからのルート鍵の変更

ルートマスターから (root として) ルートマスターサーバーの鍵を変更するには、表 13–2 の手順を実行します。

表 13–2 ルートマスター鍵の変更:コマンドの説明

作業 

コマンド 

新規 DES 資格を作成 

rootmaster# nisaddcred des

rpc.nisd のプロセス ID を発見

rootmaster# ps -e | grep rpc.nisd

NIS+ デーモンを終了 

rootmaster# kill pid

セキュリティなしで NIS+ デーモンを再起動 

rootmaster# rpc.nisd -S0

keylogout を実行 (以前の keylogin はタイムアウト)

rootmaster# keylogout -f

マスターがディレクトリに保管していた鍵を更新 

rootmaster# nisupdkeys dirs

rpc.nisd のプロセス ID を発見

rootmaster# ps -e | grep rpc.nisd

NIS+ デーモンを終了 

rootmaster# kill pid

デフォルトセキュリティで NIS+ デーモンを再起動 

rootmaster# rpc.nisd

keylogin を実行

rootmaster# keylogin

引数の意味は、それぞれ以下のとおりです。

表 13–2 に示すプロセスの最初の手順では、nisaddcred がルートマスターの cred テーブルを更新し、/etc/.rootkey を更新し、ルートマスターのキーログインを実行します。この時点では、マスターに保管されたディレクトリオブジェクトが更新されておらず、その資格情報とルートマスターとは同期がとれていません。表 13–2 に示すその後の手順は、すべてのオブジェクトを更新するのに必要です。


注 –

サーバーの鍵を変更するときは常に、ドメイン内の全クライアントの鍵情報も更新する必要があります。方法については、クライアントの鍵情報の更新で説明します。


別のマシンからルート鍵を変更する手順

別のマシンからルートマスターの鍵を変更する場合、それに必要な NIS+ 資格とそれを行う承認を得ていなくてはなりません。

表 13–3 別のマシンによるルートマスターの鍵の変更 - コマンドの説明

作業 

コマンド 

新規の DES 資格を作成 

othermachine% nisaddcred -p principal -P nisprincipal des

ディレクトリオブジェクトを更新 

othermachine% nisupdkeys dirs

/etc.rootkey を更新

othermachine% keylogin -r

クライアントとして他のマシンを再度初期化 

othermachine% nisinit -cH

引数の意味は、それぞれ以下のとおりです。

nisupdkeys を実行する場合、関連したディレクトリオブジェクトのすべてを同時に更新するように注意します。すなわち、すべてを 1 つのコマンドで行います。分割して更新すると、認証エラーになります。


注 –

サーバーの鍵を変更するときは常に、ドメイン内の全クライアントの鍵情報も更新する必要があります。方法については、クライアントの鍵情報の更新で説明します。


複製からルート複製の鍵を変更する手順

複製からルート複製の鍵を変更する手順を次に示します。


replica# nisaddcred des
replica# nisupdkeys dirs

引数の意味は、それぞれ以下のとおりです。

nisupdkeys を実行する場合、関連したディレクトリオブジェクトのすべてを同時に更新するように注意します。すなわち、すべてを 1 つのコマンドで行います。分割して更新すると、認証エラーになります。


注 –

サーバーの鍵を変更するときは常に、ドメイン内の全クライアントの鍵情報も更新する必要があります。方法については、クライアントの鍵情報の更新で説明します。


ルート以外のサーバーの鍵の変更手順

サーバーからルート以外のサーバー (マスターまたは複製) の鍵を変更する手順を以下に示します。


subreplica# nisaddcred des
subreplica# nisupdkeys parentdir dirs

引数の意味は、それぞれ以下のとおりです。

nisupdkeys を実行する場合、関連したディレクトリオブジェクトのすべてを同時に更新するように注意します。すなわち、すべてを 1 つのコマンドで行います。分割して更新すると、認証エラーになります。


注 –

サーバーの鍵を変更するときは常に、ドメイン内の全クライアントの鍵情報も更新する必要があります。方法については、クライアントの鍵情報の更新で説明します。


公開鍵の更新

NIS+ サーバーの公開鍵は名前空間のあちこちに格納されています。サーバーに新規の資格情報を作成する場合、新規の鍵ペアが作成され cred テーブルに格納されます。しかし、名前空間ディレクトリオブジェクトには、まだサーバーの古い公開鍵のコピーが残っています。nisupdkeys コマンドを使用して、これらのディレクトリオブジェクトのコピーを更新します。

nisupdkeys コマンド

古い鍵ペアの保全が危うくなったり、非公開鍵の暗号化に使ったパスワードを忘れてしまったりして新規の鍵ペアを作成する場合、nisupdkeys を使用してディレクトリオブジェクト内の古い公開鍵を更新できます。

nisupdkeys コマンドで次の操作を行うことができます。

ただし、nisupdkeys は主体マシン上の NIS_COLD_START ファイルを更新できません。サーバーの鍵のコピーを更新するには、NIS+ クライアントが nisclient コマンドを実行しなければなりません。あるいは、NIS+ キャッシュマネージャを実行中でかつコールドスタートファイル内で1つ以上のサーバーを利用できる場合、主体はディレクトリオブジェクト上で生存期間がタイムアウトするまで待つことができます。タイムアウトが発生すると、キャッシュマネージャはコールドスタートファイルを自動的に更新します。生存期間のデフォルトは 12 時間です。

nisupdkeys を使うには、NIS+ ディレクトリオブジェクトへの変更権が必要です。

公開鍵の引数の更新と例

nisupdkeys コマンドは /usr/lib/nis にあります。nisupdkeys コマンドは次の引数を使います。nisupdkeys コマンドの詳細と引数すべてのリストは、nisupdkeys(1M) のマニュアルページを参照してください。

表 13–4 nisupdkeys の引数

引数 

用途 

(引数なし) 

カレントドメインのサーバーの鍵をすべて更新する 

directoryname

ディレクトリ名で指定したディレクトリオブジェクトの鍵を更新する 

-H servername

カレントドメインのディレクトリオブジェクト内のサーバー名で指定したサーバーの鍵を更新する。他のドメインにあるサーバーの鍵を更新する場合は、完全ホスト名を使用する 

-s -H servername

サーバー名で指定したサーバーで保管されたディレクトリオブジェクトすべての鍵を更新する 

-C

鍵をクリアする 

表 13–5 で公開鍵の更新手順の例を示します。

表 13–5 公開鍵の更新: コマンド例

タスク 

コマンド (Commands) 

カレントドメイン (doc.com) のすべてのサーバーのすべての鍵を更新

rootmaster# /usr/lib/nis/nisupdkeys

Fetch Public key for server rootmaster.doc.com.

netname='unix.rootmaster@doc.com'

Updating rootmaster.doc.com.'s public key.

Public key: public-key

sales.doc.com ドメインのディレクトリオブジェクトをサポートしているすべてのサーバーの鍵を更新

salesmaster# nisupdkeys sales.doc.com

(画面上には何も表示されません) 

すべてのディレクトリ内のサーバー名が master7 であるサーバーの鍵を更新

rootmaster# nisupdkeys -H master7

sales.doc.com ディレクトリオブジェクトで保管された鍵をクリア

rootmaster# nisupdkeys -C sales.doc.com

カレントドメインのディレクトリオブジェクトのサーバー名が master7 であるサーバーの鍵をクリア

rootmaster# nisupdkeys -C -H master7

IP アドレスの更新

サーバーの IP アドレスを変更するかアドレスを追加する場合、NIS+ アドレス情報を更新するために nisupdkeys を実行する必要があります。

1 つ以上のサーバーの IP アドレスを更新するには、-a オプション付きで nisupdkeys を使用します。

指定されたドメインのサーバーの IP アドレスを更新。


rootmaster# nisupdkeys -a  domain

特定サーバーの IP アドレスを更新。


rootmaster# nisupdkeys -a -H  server

クライアントの鍵情報の更新

サーバーの鍵を変更するときは、常に全クライアントの鍵情報も更新する必要があります。NIS+ のサーバーは NIS+ のクライアントでもあります。そのため、あるサーバーの鍵を更新した場合は、それが NIS+ のサーバーであるか通常のクライアントであるかにかかわらず、ドメイン内にあるほかのすべてのマシンの鍵情報を更新する必要があります。

クライアントの鍵情報を更新するには、以下の 3 通りの方法があります。

クライアントの鍵情報を一括で更新する

サーバーの鍵を変更したあとで、ドメイン内にあるすべてのマシンのクライアントの鍵情報を一括更新できます。

  1. nischttl コマンドを使用して、ドメインのディレクトリオブジェクトの生存期間 (TTL) を、すぐに満了するような小さな値にしてください。

    たとえば、sales.doc.com. ドメイン内のサーバーの鍵を変更した場合、ディレクトリの TTL 値を 1 分にするには、以下のように入力します。


    client% nischttl 60 sales.doc.com.
    
  2. ディレクトリの TTL 値が満了すると、キャッシュマネージャはエントリを終了し、クライアントのために新しく更新された情報を入手します。

  3. ディレクトリオブジェクトの TTL 値が満了したあとで、ディレクトリオブジェクトの TTL 値をデフォルト値に戻します。

    たとえば、sales.doc.com. ドメインのディレクトリオブジェクトの TTL 値を 12 時間に戻すには、以下のように入力します。


    client% nischttl 12h sales.doc.com.
    

    TTL 値の使用の詳細は、nischttl コマンドを参照してください。