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

第 13 章 NIS+ 鍵の管理

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


ヒント –

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



注 –

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+ 資格の管理」を参照してください。


注 –

NIS+ サービスは、サービス管理機能 (SMF) によって管理されます。NIS+ サービスに対する有効化、無効化、再起動などの管理操作を実行するには、svcadm コマンドを使用します。SMF を NIS+ で使用する方法については、「NIS+ とサービス管理機能」を参照してください。SMF の概要については、『Solaris のシステム管理 (基本編)』の「サービスの管理 (概要)」を参照してください。詳細については、svcadm(1M)svcs(1) の各マニュアルページも参照してください。


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+ 主体の鍵の変更方法を説明します。


注 –

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


ルートからルート鍵を変更する

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

表 13–2 ルートマスター鍵の変更 - コマンドのまとめ

作業 

コマンド 

新規 DES 資格を作成 

rootmaster# nisaddcred des

NIS+ サービスを発見 

rootmaster# svcs \*nisplus\*

NIS+ サービスを停止 

rootmaster# svcadm disable -t /network/rpc/nisplus:default

-S 0 セキュリティオプションを削除

/lib/svc/method/nisplus ファイルを編集して -S 0 オプションを削除

セキュリティなしで NIS+ サービスを再起動 

# svcadm enable network/rpc/nisplus

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

rootmaster# keylogout -f

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

rootmaster# nisupdkeys dirs

NIS+ サービスを発見 

rootmaster# svcs \*nisplus\*

NIS+ サービスを停止 

rootmaster# svcadm disable -t /network/rpc/nisplus:default

-S 0 セキュリティオプションを追加

/lib/svc/method/nisplus ファイルを編集して -S 0 オプションを追加

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

# svcadm enable network/rpc/nisplus

keylogin を実行

rootmaster# keylogin

引数の意味は以下のとおりです。

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


注 –

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


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

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

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

作業 

コマンド 

新規の DES 資格を作成 

othermachine% nisaddcred -p principal -P nisprincipal des

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

othermachine% nisupdkeysdirs

/etc/.rootkey を更新

othermachine% keylogin -r

クライアントとして再度初期化 

othermachine% nisinit -cH

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

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


注 –

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


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

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


replica# nisaddcred des
replica# nisupdkeys dirs

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

dirs は更新するディレクトリオブジェクト (replica で保管されたディレクトリオブジェクト)

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 の引数

引数 

効果 

(引数なし) 

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

ディレクトリ名

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

-H servername

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

-s -H servername

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

-C

鍵をクリアする 

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

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

作業 

コマンド 

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

rootmaster# /usr/lib/nis/nisupdkeys

Fetch Public key for server rootmaster.doc.com.

netname='unix.rootmaster@doc.com'

rootmaster.doc.com. の公開鍵を更新  

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 コマンド」を参照してください。