日本語 man コマンド類 (ja-man-1.1j_5) と日本語 man ドキュメント (ja-man-doc-5.4 (5.4-RELEASE 用) など) をインストールすると、以下のような man コマンド閲覧、キーワード検索が コンソールからできるようになります。
4.11-RELEASE-K, 5.4-RELEASE-K, 5.5-RELEASE-K, 6.0-RELEASE-K から 6.4-RELEASE-K, 7.0-RELEASE-K から 7.4-RELEASE-K, 8.0-RELEASE-K から 8.4-RELEASE-K, 9.0-RELEASE-K から 9.3-RELEASE-K, 10.0-RELEASE-K から 10.3-RELEASE-K, 11.0-RELEASE-K から 11.4-RELEASE-K, 12.0-RELEASE-K, 12.1-RELEASE-K は、 プライベート版 (小金丸が編集してまとめたもの) ですが、 より多くの翻訳したファイルが含まれています。 (5.4-RELEASE-K から 6.4-RELEASE-K, 7.0-RELEASE-K から 7.4-RELEASE-K, 8.0-RELEASE-K から 8.4-RELEASE-K, 9.0-RELEASE-K から 9.3-RELEASE-K, 10.0-RELEASE-K から 10.3-RELEASE-K, 11.0-RELEASE-K から 11.4-RELEASE-K, 12.0-RELEASE-K から 12.4-RELEASE-K, 13.0-RELEASE-K から 13.3-RELEASE-K, 14.0-RELEASE-K から 14.1-RELEASE-K は、全翻訳済み)
13.3-STABLE-K, 15.0-CURRENT-K は現在、作成中で日々更新されています。
Table of Contents
JAIL(2) FreeBSD システムコールマニュアル JAIL(2)
名称
jail, jail_get, jail_set, jail_remove, jail_attach -- システム jail (刑務
所) を作成して、管理する
ライブラリ
標準 C ライブラリ (libc, -lc)
書式
#include <sys/param.h>
#include <sys/jail.h>
int
jail(struct jail *jail);
int
jail_attach(int jid);
int
jail_remove(int jid);
#include <sys/uio.h>
int
jail_get(struct iovec *iov, u_int niov, int flags);
int
jail_set(struct iovec *iov, u_int niov, int flags);
解説
jail() システムコールは、jail (刑務所) を設定して、現在のプロセスをその中
にに閉じ込めます。
引数は、jail を記述する構造体へのポインタです:
struct jail {
uint32_t version;
char *path;
char *hostname;
char *jailname;
unsigned int ip4s;
unsigned int ip6s;
struct in_addr *ip4;
struct in6_addr *ip6;
};
``version'' は、使用している API のバージョンを定義します。
JAIL_API_VERSION は、現在のバージョンに対して定義されています。
``path'' ポインタは、jail のルートとなるディレクトリに設定されるべきで
す。
``hostname'' ポインタを jail のホスト名に設定することができます。これを
jail の内部から変更することができます。
``jailname'' ポインタは、例えば、管理目的のために jail に割り当てることが
できるオプションの名前です。
``ip4s'' と ``ip6s'' は、それらのそれぞれのポインタを通して渡される IPv4
と IPv6 アドレスの数値を与えます。
jail に割り当てられる IPv4 と IPv6 アドレスの配列に ``ip4'' と ``ip6'' ポ
インタを設定することができるか、または何もなければ、NULL に設定することが
できます。IPv4 アドレスは、ネットワークバイト順でなければなりません。
これは、パラメータ path, host.hostname, name, ip4.addr と ip6.addr があ
り、JAIL_ATTACH フラグがある jail_set() システムコール (下記参照) と同等
で、それらを支持して推奨されません。
jail_set() システムコールは、新しい jail を作成するか、または既存のものを
変更して、オプションで現在のプロセスをそれに閉じ込めます。jail パラメータ
は、niov 要素を含んでいる配列 iov の名前-値の組の配列として渡されます。パ
ラメータ名は、ヌル文字で終了する文字列であり、値は、文字列、整数、または
他の任意のデータであるかもしれません。いくつかのパラメータは、ブール値で
あり、値を持ちませんが (それらの長さは、0 である)、例えば persist または
nopersist のような ``no'' 接頭辞のあるなしにかかわらず名前単独で設定され
ます。設定されないパラメータは、一般的に現在の環境に基づいてデフォルト値
が与えられます。
jail には、1 組のコアパラメータがあり、モジュールは、それら自身の jail パ
ラメータを追加することができます。利用可能なパラメータの現在のセットとそ
れらの形式を、security.jail.param sysctl MIB エントリを通して検索すること
ができます。注目すべきパラメータは、作成されるか、または変更される jail
を識別する jid と name と同様に、上記の jail() の説明で述べたものを含んで
います。コア jail パラメータの詳しい情報については、jail(8) を参照してく
ださい。
flags 引数は、次のフラグの 1 つ以上から成ります:
JAIL_CREATE
新しい jail を作成します。jid または name パラメータが存在してい
るなら、それらは、既存の jail を参照してはいけません。
JAIL_UPDATE
既存の jail を変更します。jid または name パラメータの 1 つが存在
していなければならなくて、既存の jail を参照しなければなりませ
ん。JAIL_CREATE と JAIL_UPDATE の両方が設定されているなら、jail
は、まだ存在していないなら作成され、存在しているなら、変更されま
す。
JAIL_ATTACH
jail を作成するか、または変更することに加えて、jail_attach() シス
テムコールのように現在のプロセスをそれにアタッチします。
JAIL_DYING
削除されている途中である jail の設定ができます。
jail_get() システムコールは、iov と niov 引数の jail_set() として同じ名
前-値リストを使用して、jail パラメータを検索します。リスト中に jid または
name のパラメータを含むことによって、それらのいずれかによって、読み込みの
ための jail を指定することができます。
それらが含まれていますが、検索キーとなることを目的としていなら、それら
は、(それぞれ、0 と空文字列に) クリアされるべきです。すべての jail のリス
トを検索するために特別のパラメータ lastjid を使用することができます。それ
は、上記の jid があり、渡された値に近い jail を取って来ます。0 の lastjid
を渡すことによって、最初の jail (通常、常に jid 1 ではない) を見つけるこ
とができます。
flags 引数は、1 つ以上の次のフラグから成ります:
JAIL_DYING
削除されている途中である jail を取得できます。
jail_attach() システムコールは、現在のプロセスを jid によって識別される既
存の jail にアタッチします。プロセスのルートとカレントディレクトリを、
jail の path ディレクトリに変更します。
jail_remove() システムコールは、jid によって識別された jail を削除しま
す。それは、jail に属しているすべてのプロセスを kill して、その jail のす
べての子供を削除します。
戻り値
成功すれば、jail(), jail_set() と jail_get() は、jail 識別子 (JID) と呼ば
れる負でない整数を返します。それらは、失敗すれば、-1 を返し、errno にエ
ラーを示す値を設定します。
関数 jail_attach() および jail_remove() は、処理が成功すると値 0 を返しま
す。そうでない場合、値 -1 が返され、グローバル変数 errno にエラーを示す値
が設定されます。
エラー
jail() システムコールは、次の場合に失敗します:
[EPERM] このプロセスは、スーパユーザでないためか、または jail
の children.max の制限を超えているからのいずれかのため
に、jail を作成できません、
[EFAULT] jail が、プロセスの割り付けられたアドレス空間の外のア
ドレスを指している。
[EINVAL] 引数のバージョン番号が、正しくない。
[EAGAIN] 空いている JID を見つけることができませんでした。
jail_set() システムコールは、次の場合に失敗します:
[EPERM] このプロセスは、スーパユーザでないためか、または jail
の children.max の制限を超えているからのいずれかのため
に、jail を作成できません、
[EPERM] jail パラメータが、現在の環境でなく、制限されていない
値に設定されている。
[EFAULT] iov またはその中に含まれたアドレスの 1 つが、プロセス
に割り付けられたアドレス空間の外のアドレスを指してい
る。
[ENOENT] jid または name パラメータによって参照された jail が存
在しません、そして、JAIL_CREATE フラグが設定されていま
せん。
[ENOENT] jid によって参照される jail が、プロセスが異なった
jail にあるので、プロセスによってアクセス可能ではあり
ません。
[EEXIST] jid または name パラメータによって参照された jail が存
在し、そして、JAIL_UPDATE フラグが設定されていません。
[EINVAL] 供給されたパラメータが間違ったサイズです。
[EINVAL] 供給されたパラメータが範囲外です。
[EINVAL] 供給された文字列パラメータがヌル文字で終了していませ
ん。
[EINVAL] 供給されたパラメータ名が知られているパラメータにマッチ
していません。
[EINVAL] JAIL_CREATE または JAIL_UPDATE フラグの 1 つが設定され
ていません。
[ENAMETOOLONG] 供給された文字列パラメータが許されでいるより長い。
[EAGAIN] jail ID が残っていません。
jail_get() システムコールは、次の場合に失敗します:
[EFAULT] iov またはその中に含まれたアドレスの 1 つが、プロセス
に割り付けられたアドレス空間の外のアドレスを指してい
る。
[ENOENT] jid または name パラメータによって参照された jail が存
在しません。
[ENOENT] jid によって参照される jail が、プロセスが異なった
jail にあるので、プロセスによってアクセス可能ではあり
ません。
[ENOENT] lastjid パラメータが最も大きな現在の jail ID より大き
い。
[EINVAL] 供給されたパラメータが間違ったサイズです。
[EINVAL] 供給されたパラメータ名が知られているパラメータにマッチ
していません。
jail_attach() と jail_remove() システムコールは、次の場合に失敗します:
[EPERM] スーパユーザ以外のユーザが、jail にアタッチするか、ま
たは削除しようとしました。
[EINVAL] jid によって指定された jail が存在していません。
さらに、jail(), jail_set() と jail_attach() は、内部的に chroot(2) を呼び
出すので、すべて同じ理由で失敗するかもしれません。詳細については、
chroot(2) マニュアルページを調べてください。
関連項目
chdir(2), chroot(2), jail(8)
歴史
jail() システムコールは、FreeBSD 4.0 で登場しました。jail_attach() システ
ムコールは、FreeBSD 5.1 で登場しました。jail_set(), jail_get() と
jail_remove() システムコールは、FreeBSD 8.0 で登場しました。
作者
jail の機能は、それを FreeBSD に寄贈した Poul-Henning Kamp によって R&D
Associates のために書かれました。
James Gritton は、拡張可能な jail パラメータと階層的な jail を追加しまし
た。
FreeBSD 13.2 February 19, 2021 FreeBSD 13.2