次の表は、特権を使用するためのインタフェースの一覧です。この表に続いて、主な特権インタフェースのいくつかについて説明します。
表 2–1 特権を使用するためのインタフェース
目的 |
関数 |
補足説明 |
---|---|---|
特権セットの取得と設定 |
setppriv() と getppriv() はシステム呼び出しです。priv_ineffect() と priv_set() は簡易操作用のラッパーです。 |
|
特権の特定と変換 |
priv_str_to_set(3C), priv_set_to_str(3C), priv_getbyname(3C), priv_getbynum(3C), priv_getsetbyname(3C), priv_getsetbynum(3C) |
これらの関数は、指定された特権または特権セットを特定の名前または数字にマッピングします。 |
特権セットの操作 |
priv_allocset(3C), priv_freeset(3C), priv_emptyset(3C), priv_fillset(3C), priv_isemptyset(3C), priv_isfullset(3C), priv_isequalset(3C), priv_issubset(3C), priv_intersect(3C), priv_union(3C), priv_inverse(3C), priv_addset(3C), priv_copyset(3C), priv_delset(3C), priv_ismember(3C) |
これらの関数は、特権のメモリー割り当て、テスト、および各種セット操作に関する機能を提供します。 |
プロセスフラグの取得と設定 |
PRIV_AWARE プロセスフラグは、プロセスが特権を理解するのか、それともプロセスがスーパーユーザーモデルの下で実行されるのかを示します。PRIV_DEBUG は特権のデバッグ時に使用されます。 |
|
低レベルの資格操作 |
これらのルーチンは、デバッグ、低レベルのシステム呼び出し、およびカーネル呼び出しを行う際に使用されます。 |
特権設定用の主要関数は、 setppriv() です。その構文は次のとおりです。
int setppriv(priv_op_t op, priv_ptype_t which, \ const priv_set_t *set);
op は、実行する特権操作を表します。op パラメータには、次の 3 つの値のいずれかを指定できます。
PRIV_ON – set 変数によって指定された特権を、which によって指定されたセット型に追加します
PRIV_OFF – set 変数によって指定された特権を、which によって指定されたセット型から削除します
PRIV_SET – set 変数によって指定された特権で、which によって指定されたセット型に含まれる特権を置き換えます
which には、変更する特権セットの種類を指定します。次のいずれかを指定します。
PRIV_PERMITTED
PRIV_EFFECTIVE
PRIV_INHERITABLE
PRIV_LIMIT
set には、変更操作で使用される特権を指定します。
さらに、簡易関数 priv_set() が提供されています。
これらの関数は、特権名を数値にマッピングする場合に役立ちます。 priv_str_to_set() は、このファミリの一般的な関数です。priv_str_to_set() の構文は次のとおりです。
priv_set_t *priv_str_to_set(const char *buf, const char *set, \ const char **endptr);
priv_str_to_set() は特権名の文字列を引数に取りますが、その文字列は buf に指定されます。priv_str_to_set() が返す特権値のセットは、4 つの特権セットのいずれかと組み合わせることができます。**endptr は、構文解析エラーのデバッグ時に使用できます。buf には次のキーワードを含めることができます。
「all」は、定義済みのすべての特権を示します。「all,!priv_name,...」の書式を使えば、指定された特権を除くすべての特権を指定できます。
「priv_set, “!priv_name,...」を使用する構文は指定された特権のセットから指定された特権を取り去ります。最初にセットを指定せずに 「!priv_name,...」を使用しないでください。元になる特権セットが指定されていないと、構文は空の特権セットから指定された特権を取り去ることになり、事実上、特権がないことになってしまいます。
「none」は、特権なしを示します。
「basic」 は、標準 UNIX オペレーティングシステムへのログイン時にすべてのユーザーに従来から許可されている操作を実行する際に必要となる特権のセットを示します。