ONC+ 開発ガイド

NFS マウント例

この節全体を通して、AUTH_KERB を使用した NFS マウント要求について説明します。マウント要求は、SunOS のルートで実行されるので、ユーザの識別情報は、root.c.になります。

クライアント c は、マウントするディレクトリのファイルハンドルを獲得するために、サーバ sMOUNTPROC_MOUNT 要求を実行します。クライアントのマウントプログラムは、ファイルハンドル、mountflavor、時間同期アドレス、サーバの既知の主体名である nfs.s を、クライアントのカーネルに渡して、NFS マウントシステムコールを実行します。次に、クライアントのカーネルが時間同期ホストでサーバに接続し、クライアント/ サーバ間の時間差を取得します。

クライアントのカーネルは、次の RPC 呼び出しを行います。(1) チケットおよびセッションキーを獲得するためにのローカルの kerbd への KSETKCRED 呼び出し。(2) フルネームの資格およびベリファイアを使用した、サーバのNFSサービスへの NFSPROC_GETATTR 呼び出し。サーバは、呼び出しを受信し、ローカルの kerbdKGETKCRED 呼び出しを行ってクライアントのチケットを検査します。

サーバの kerbd と Kerberos ライブラリは、チケットの暗号を解除し、主体名および DESセッションキーを他のデータの中に返します。サーバは、チケットがまだ有効であることをチェックし、セッションキーを使用して資格、ベリファイアの DES-encrypted の部分の暗号を解除し、ベリファイアが有効であることを検査します。

この時に返される可能性のある Kerberos 認証エラーは、下記のとおりです。

エラーを受信しない場合、サーバはクライアントの識別情報をキャッシュに書き込み、NFS 回答に返されるニックネーム (小さい整数) を割り当てります。その時サーバは、クライアントがサーバと同じ領域かどうかをチェックします。クライアントがサーバと同じ領域の場合、サーバは、KGETUCRED をローカルの kerbd に呼び出して、主体名を UNIX の資格に変換します。変換できない場合、ユーザは匿名であるとマークされます。サーバは、ファイルシステムのエクスポート情報に対するこれらの資格を検査します。次の 3 つのケースを考えてください。

  1. KGETUCRED 呼び出しが失敗し、匿名の要求が受け入れられた場合、匿名のユーザに UNIX 資格が割り当てられます。

  2. KGETUCRED 呼び出しが失敗し、匿名の要求が受け入れられない場合、NFS 呼び出しは失敗し、AUTH_TOOWEAK が返されます。

  3. KGETUCRED 呼び出しが成功する場合は、資格が割り当てられ、その後にルートのパーミッションのチェックも含む、正常な保護検査が行われます。

次に、サーバが、ニックネームおよびサーバのベリファイアを組み込んで NFS 回答を送信します。クライアントは回答を受信し、ベリファイアの暗号の解除と妥当性検査を行い、今後の呼び出しのためにニックネームを格納します。クライアントがサーバに 2 番目の NFS 呼び出しを行うと、先にサーバに書込まれた呼び出しが繰り返されます。クライアントのカーネルが、以前に記述されたニックネーム資格およびベリファイアを使用して、サーバの NFS サービスに NFSPROC_STATVFS 呼び出しを行います。サーバは呼び出しを受信し、ニックネームの妥当性検査を行います。これが範囲外であれば、エラー AUTH_BADCRED を返します。サーバは、獲得したばかりのセッションキーを使用して、ベリファイアの DES-encrypted 部分の暗号を解除し、ベリファイアの妥当性検査を行います。

この時に返される可能性のある Kerberos 認証エラーは、次のとおりです。

エラーが受信されない場合、サーバは、ニックネームを使用して、呼び出し側の UNIX 資格を検出します。それから、サーバはファイルシステムのエクスポート情報に対するこれらの資格を検査し、ニックネームおよびサーバのベリファイアを組み込んだ NFS 回答を送信します。クライアントは回答を受信し、ベリファイアの暗号の解除および妥当性検査を行い、これからの呼び出しのためにニックネームを格納します。最後に、クライアントのNFS マウントシステムコールが返り、要求が終了します。