引数は牢屋を記述する構造体へのポインタです。
struct jail { u_int32_t version; char *path; char *hostname; u_int32_t ip_number; };
``version '' には使用する API のバージョンを定義します。 今のところ 0 に設定します。
``path '' ポインタには牢屋のルートになるディレクトリを設定します。
``hostname '' ポインタには牢屋のホスト名を設定します。 これは牢屋の中から変更できます。
``ip_number '' は牢屋に割り当てる IP 番号を設定します。
Fn jail_attach システムコールは、 Fa jid によって識別される既存の jail を現在のプロセスにアタッチします。
牢屋の中では ``スーパユーザ'' の概念はとても弱まっています。 一般に全体が牢屋の中にあるわけではないものを牢屋の中から台無しにすることは できないと考えられます。 例えば ``path '' の下のディレクトリツリーは ``rm -rf /* '' も含めて、root が普通にできるように操作できますが、 デバイス型特殊ノードは共有されたリソース (カーネルの中のデバイスドライバ) を 参照するので、新しく作ることはできません。 プロセスにとっての実際の ``セキュアレベル'' は、グローバルな ``セキュアレベル'' と、jail 毎の ``セキュアレベル'' (存在する場合) の大きい方です。
IP 活動はすべて指定された IP 番号に制限されます。 指定された IP 番号はネットワークインタフェースのうちの 1 つの別名で あるべきです。
``/proc/<pid>/status '' を調べることで閉じ込められたプロセスを識別することができます。 行末のフィールドが、閉じ込められていないプロセスではハイフン 1 つ、 閉じ込められたプロセスでは現在牢屋に設定されているホスト名になります。
さらに Fn jail は内部で chroot(2) を呼ぶので、全く同じ理由で失敗する可能性があります。 詳しくは chroot(2) のマニュアルページを参照して下さい。