EN JA
PRIV(9)
PRIV(9) FreeBSD Kernel Developer's Manual PRIV(9)

名称

privカーネル特権チェック API

書式

#include < sys/priv.h>

int
priv_check( struct thread *td, int priv);

int
priv_check_cred( struct ucred *cred, int priv, int flags);

解説

priv インタフェースは、特定のシステム特権が、渡されたスレッド td または資格証明 cred に許可されているかどうかを調べます。このインタフェースは、今削除されている suser(9) 特権チェックインタフェースを置き換えます。特権は通常、2 つのカテゴリの 1 つの権利を表します: システムの特定の構成部品、または特定のポリシかアクセスコントロールリストの免除を管理する権利。呼び出し側は、 priv 引数を通して必要な特権を識別します。オプションのフラグ引数 flags は、現在、使用されていません。

特権のポリシ

特権は通常、2 つのベースシステムポリシの 1 つに基づいて許可されます: 0 の値を持っている実効 UID (時々、実 UID) に基づく特権を許可するスーパユーザポリシと jail 中のプロセスに許可される特定の特権だけが許される、 jail(2) ポリシです。また、利用可能な特権のセットは、 mac(9) で説明された TrustedBSD MAC Framework にも影響されます。

実装に関する注

コードパスに新しい特権チェックを追加するとき、要求された特権のクラスの 1 つが既に存在するかどうか調べるために、 sys/priv.h で現在の特権の完全なリストを最初にチェックします。正確に一致しない場合にだけ、新しい特権が特権のリストに追加されるべきです。特権番号がカーネルモジュール ABI でエンコードされるように、特権の定数は、特権に依存する任意のカーネルモジュールが、再コンパイルされる必要があるとき、変更されてはいけません。新しい特権を追加するとき、 jail(2) の root ユーザに許可された特権の完全なリストを含んでいる prison_priv_check() にリストされるべきかどうか決定することも確実にします。

PRIV_DRIVER のような、特定のキャッチオール特権は、新しいドライバ特有の特権を追加するより、デバイスドライバによって使用されることを目的としています。

戻り値

通常、成功に対して 0 が返えされ、失敗で EPERM が返されます。 priv のほとんどの消費者は、失敗した特権チェックからユーザ空間まで直接エラーコードを返したいでしょう。小さな数は、それを特定のコンテキストに適切な別のエラーコードに変換したくなるでしょう。

新しい API を設計するとき、成功を返さないで、呼び出しのセマンティクスを変更するより特権が許可されないなら、呼び出しから明白なエラーを返すことが望ましいでしょう。例えば、生成されたフィールドである、 stat(2) によって提示された振る舞いは、頻繁な特権チェックの結果として、不適当な特権が極めて望ましくないとき、オプションで 0 で出力され、アクセス制御の失敗が起こったなら、呼び出し側に伝えることができません。

関連項目

jail(2), mac(9), ucred(9)

作者

priv API と実装は、nCircle Network Security, Inc. の契約に基づき Robert Watson によって作成されました。
August 30, 2006 FreeBSD