RPC(3)

名称
rpc_secure - 安全なリモートプロシージャコールのためのライブラリルーチン

書式
#include <rpc/rpc.h> AUTH * authdes_create(char *name, unsigned window, struct sockaddr *addr, des_block *ckey) int authdes_getucred(struct authdes_cred *adc, uid_t *uid, gid_t *gid, int *grouplen, gid_t *groups) int getnetname(char *name) int host2netname(char *name, char *host, char *domain) int key_decryptsession(const char *remotename, des_block *deskey) int key_encryptsession(const char *remotename, des_block *deskey) int key_gendes(des_block *deskey) int key_setsecret(const char *key) int netname2host(char *name, char *host, int hostlen) int netname2user(char *name, uid_t *uidp, gid_t *gidp, int *gidlenp, gid_t *gidlist) int user2netname(char *name, uid_t uid, char *domain)

解説
このルーチンは、 RPC ライブラリの一部で、 DES 認証を実現しています。 RPC の詳細については、 rpc(3) を参照してください。

DES 認証として知られる、 RPC 安全認証システムのインタフェースとなる最初のルーチンは、 authdes_create() です。次のルーチンは authdes_getucred() です。

注意: DES 認証システムを動作させるには、キーサーバデーモン keyserv(8) を実行する必要があります。

クライアント側で使用する authdes_create() は、安全認証システムを使用できるようにする認証ハンドルを戻します。 最初のパラメータ name は、サーバプロセスの所有者のネットワーク名、つまり netname です。通常の場合、このフィールドは、ユーティリティルーチン host2netname() から引き出された hostname を表しますが、 user2netname() を使用してユーザ名を表すこともできます。第 2 フィールドは、 クライアント証明書の正当性に関するウィンドウで、秒単位で指定されます。 小さいウィンドウの方が大きいウィンドウより安全ですが、ウィンドウを 小さくしすぎると、クロックの揺れのため、再同期化の頻度が 上がります。第 3 パラメータ addr はオプションです。このパラメータを NULL にすると、ローカルクロックとサーバのクロックで常に同期が取られている ことを認証システムが仮定するため、再同期化は実行されなくなります。 しかしアドレスを指定すると、システムは、再同期化が必要な時は常に、 そのアドレスを使用してリモートタイムサービスから情報を得ます。 通常の場合、このパラメータは RPC サーバのアドレスになります。最後のパラメータ ckey もオプションです。このパラメータを NULL にすると、認証システムは、証明書の暗号化に使用するランダムな DES キーを作成します。このパラメータを指定すると、それが ランダムなキーの代わりに使用されます。

DES 認証の第 2 ルーチン authdes_getucred() は、オペレーティングシステムに依存しない DES 証明書を UNIX 証明書に変換するためにサーバ側で使用されます。 authdes_getucred() はキャッシュから情報を引き出すので、情報を得ようとして関数が 呼び出されるたびに Yellow Page 検索をする必要はないという面で、ユーティリティルーチン netname2user() とは異なります。

getnetname() は、固有でありオペレーティングシステムに依存しない、呼び出し側のネット名を 固定長配列 name にインストールします。問題がない場合は TRUE を戻し、問題がある場合は FALSE を戻します。

host2netname() は、ドメイン特有なホスト名をオペレーティングシステムに依存しない ネット名に変換します。問題がない場合は TRUE を戻し、問題がある場合は FALSE を戻します。これは、 netname2host() の逆です。

key_decryptsession() は、 RPC の安全認証システム ( DES 認証) に関連したキーサーバデーモンとのインタフェースです。 このルーチン、およびこのルーチンに関連した key_encryptsession(), key_gendes(), key_setsecret() をユーザプログラムが呼び出す必要はほとんどありません。 login(1) などのシステムコマンドと RPC ライブラリが、この 4 つのルーチンの主なクライアントです。

key_decryptsession() は、サーバのネット名と DES キーを受け取り、サーバの公開鍵と呼び出しプロセスの実効ユーザ ID に関連した秘密鍵を使用してキーを復号化します。これは、 key_encryptsession() の逆です。

key_encryptsession() は、キーサーバインタフェースルーチンです。サーバのネット名と DES キーを受け取り、サーバの公開鍵と呼び出しプロセスの実効ユーザ ID に関連した秘密鍵を使用してキーを暗号化します。これは、 key_decryptsession() の逆です。

key_gendes() は、キーサーバインタフェースルーチンです。安全な変換キーをキーサーバに 要求するために使用します。大抵の場合、 1 つの "ランダム" を選択するだけでは十分ではありません。なぜなら、 現在時刻を利用する様なランダム数値のよくある選択方法は とても容易に推測できるからです。

key_setsecret() は、キーサーバインタフェースルーチンです。呼び出しプロセスの実効 uid のキーを設定するために使用します。

netname2host() は、オペレーティングシステムに依存しないネット名をドメイン特有の ホスト名に変換します。問題がない場合は TRUE を戻し、問題がある場合は FALSE を戻します。これは、 host2netname() の逆です。

netname2user() は、オペレーティングシステムに依存しないネット名をドメイン特有のユーザ ID に変換します。問題がない場合は TRUE を戻し、問題がある場合は FALSE を戻します。これは、 user2netname() の逆です。

user2netname() は、ドメイン特有のユーザ名をオペレーティングシステムに依存しない ネット名に変換します。問題がない場合は TRUE を戻し、問題がある場合は FALSE を戻します。これは、 netname2user() の逆です。

関連項目
rpc(3), xdr(3), keyserv(8)

以下のマニュアル Remote Procedure Calls: Protocol Specification. Remote Procedure Call Programming Guide. Rpcgen Programming Guide. RPC: Remote Procedure Call Protocol Specification, RFC1050, Sun Microsystems Inc., USC-ISI.