SUSER(9)

名称
suser, suser_cred - 証明がスーパユーザの権限を持っているかどうかのチェック

書式
<sys/param.h> <sys/systm.h> int suser(struct thread *td) int suser_cred(struct ucred *cred, int flag)

解説
suser() および suser_cred() 関数は、スーパユーザの権限を含む証明が与えられているかどうかをチェックします。

suser() 関数は最も普通で、特別な事情がその他の方法を要求するのでなければ、 これが使用されるべきです。

suser_cred() 関数は、チェックされるべき証明がそのスレッド自身のものでない時、 スレッドが存在しない時、スーパユーザの権限が 閉じ込められた root に拡大されるべき時、またはチェックされるべき証明が 実効ユーザというよりは実際のユーザである時に、使用されるべきです。

デフォルトでは、 jail(2) システムコールによって閉じ込められている場合には、 プロセスはスーパユーザの権限を持ちません。 しかしながら、これが適切な場合があり、 suser_cred() 関数へ渡す flag 引数に SUSER_ALLOWJAIL ビットを設定することによって実現されます。 これが牢屋を弱くしないことを、注意深く再調査することが重要です。 一般的には jail(2) 呼び出しの中の暗黙の chroot(2) によって行動が保護されている場所のみにおいて、 このような権限を承諾されるべきです。

デフォルトでは、チェックされる証明は実効ユーザです。 代わりに実際のユーザをチェックする必要がある場合 (例えば、 リソースリミットが適用された場合の決定のとき) があります。 そして、これは suser_cred() 関数への flag 引数に SUSER_RUID を渡すことによって行うことが可能です。

suser() および suser_cred() 関数は、スーパユーザの権限が使用された事を、 指定されたプロセスのプロセス構造体中に記録します。 これらの関数の機能の一部は、スーパユーザの権限が使用されたかどうかを 通知することにありますので、 他のパーミッションの可能性が使い尽くされた後でのみ、 これら関数を呼び出すべきです。

戻り値
suser() および suser_cred() 関数は、そのユーザがスーパユーザの権限を持っている場合には 0 を返し、 そうでない場合には EPERM を返します。 これは、TRUE の応答がスーパユーザ権限を持つことを示すような他の実装とは 逆の論理 になっています。 TRUE の応答の suser() はスーパユーザの権限を示します。

関連項目
chroot(2), jail(2)

バグ
suser() および suser_cred() 関数は事実上は 2000 年の 8 月から、 スーパユーザの特権が使用されたことおよびされなかったことを記録しません。