JAIL(2) Linux Programmer's Manual JAIL(2) 名前 jail - prison 環境を作成する 書式 #include int jail(struct jailx *params); 説明 jail() は params によって指定されたパラメータにしたがっ て prison 環境(コンパートメント)を作成する。jail()を呼ん だプロセスの全ての子孫のプロセスはこの prison 環境に属す ることになる。 struct jailx { __u32 version; char *path; char *hostname; __u32 ip_number; __u32 uid_min; __u32 uid_max; __u32 gid_min; __u32 gid_max; }; "version" は jail のバージョン番号であり、現在は 0 のみ である(それ以外を指定した場合は常に失敗する)。 "path" は chroot(2)する時に用いるパス名 "hostname" prison 環境に設定するホスト名 "ip_number" は prison 環境に設定する IPアドレス "uid_min","uid_max" はprison 環境で利用可能な uidの最小 値と最大値 "gid_min","gid_max" はprison 環境で利用可能な gidの最小 値と最大値 jail() を呼び出したプロセスは、それ以降指定したパラメー タの prison 環境で動作することになり、他の prison 環境や 非prison環境に対して、通常の IP を利用した通信を除き全て の直接のアクセスが制限される(rootも含む)。 制限されるアクセスは以下の通り。 PF_INET ソケットで利用できる IP アドレスの制限 signal の送信禁止 ホスト名の名前空間の分離 SySV IPC の名前/資源空間の分離 ファイルシステムのアクセス範囲の制限(chroot(2)) procfs の情報の一部隠蔽と書き込み制限 devpts の情報の一部隠蔽と書き込み制限 関連するカーネル MIB を以下に示す。 set_hostname_allowed sethostname(2) の使用の on/off (デフォルト 0 == off) socket_unixiproute_only socket の利用種別の制限 (デフォルト 1 == 制限あり) jail_sysvipc_allowed SysVIPC の利用の on/off (デフォルト 1 == on) jail_enable_uid_divide 各prison 間での uid の分割利用の on/off(デフォルト 1 == on) jail_enable_gid_divide 各prison 間での gid の分割利用の on/off(デフォルト 0 == off) jail_shared_uid_min 各prison 間で共有する uid の最小値(デフォルト 0) jail_shared_uid_max 各prison 間で共有する uid の最大値(デフォルト 99) jail_shared_gid_min 各prison 間で共有する gid の最小値(デフォルト 0) jail_shared_gid_max 各prison 間で共有する gid の最大値(デフォルト 99) set_reserve_allowed prison からの資源予約要求の可否(デフォルト 0 == 不可) jail_mount_restriction 疑似ファイルシステム以外のマウントの制限 (デフォルト 1 == 制限あり) 返り値 成功すると jail() は 0 を返す。失敗した場合、jail() は 0 以外を返し、errno に失敗の原因をセットする。 エラー EPERM 特権がない EINVAL すでに prison 環境にいるかもしくは jail version の不一致 ENOMEM カーネルに十分なメモリがない 準拠 jail(2) は Linux Secure Virtual Hosting environment で拡 張した関数である。 制限 ioperm(2), ioport(2) などの一部のシステムコールは prison 環境からは利用できない。 関連項目 crow_create_reserve(2), execve(2), ioperm(2), ioport(2)