EN JA
CAP_ENTER(2)
CAP_ENTER(2) FreeBSD System Calls Manual CAP_ENTER(2)

名称

cap_enter, cap_getmodeケーパビリティモードシステムコール

ライブラリ

Standard C Library (libc, -lc)

書式

#include < sys/capability.h>

int
cap_enter( void);

int
cap_getmode( u_int *modep);

解説

cap_enter() は、プロセスがファイル記述子でシステムコールを発行するか、または限られた制限されたグローバルシステム状態を読み込むだけである、実行のモードである、ケーパビリティモードに現在のプロセスを置きます。ファイルシステムまたは IPC 名前空間のような、グローバル名前空間へのアクセスは、防止されます。プロセスが既にケーパビリティモードモードのサンドボックスであるなら、システムコールは、無効の操作 (no-op) です。 fork(2) または pdfork(2) で作成された将来のプロセスの子孫は、始まりからケーパビリティモードに置かれます。

cap_rights_limit(2), cap_ioctls_limit(2), cap_fcntls_limit(2), と組み合わされるとき、 cap_enter() は、適切に作られたアプリケーションまたはアプリケーションの構成要素が実行されるカーネルで実行されたサンドボックスを作成するために使用されます。

cap_getmode() は、プロセスがケーパビリティモードのサンドボックスにあるかどうかを示すフラグを返します。

警告

効果的なプロセスサンドボックスを作成することは、プロセスによって要求された最小限の権利を識別して、次に、安全な方法でそれらの権利をプロセスに渡すことを含むトリッキなプロセスです。また、 cap_enter() の消費者は、考えられるべきである、VM リソースへのアクセス、メモリ内容と他のプロセスの特性などのような、他の継承される権利を承知しているべきです。できるだけわずかな暗黙のうちに取得された権利を持っているサンドボックス内で実行時間の環境を作成するために fexecve(2) を使用することは、賢明です。

戻り値

The cap_enter() and cap_getmode() functions return the value 0 if successful; otherwise the value -1 is returned and the global variable errno is set to indicate the error.

エラー

cap_enter() と cap_getmode() システムコールは、次の場合に失敗します:
[ ENOSYS]
カーネルは、次のものなしでコンパイルされます:

options CAPABILITY_MODE

また、 cap_getmode() システムコールは、次のエラーを返します:

[ EFAULT]
ポインタ modep が、プロセスの割り付けられたアドレス空間の外側を指しています。

歴史

ケーパビリティとケーパビリティモードのサポートは、 TrustedBSD プロジェクトの一環として開発されました。

作者

これらの関数とケーパビリティ機能は、 Google Inc. からの助成金の支援によって University of Cambridge Computer Laboratory の Robert N. M. Watson によって作成されました。
February 25, 2012 FreeBSD