スポンサーリンク

CHROOT(2) FreeBSD システムコールマニュアル CHROOT(2)

名称

chroot − ルートディレクトリを変更する

ライブラリ

標準 C ライブラリ (libc, −lc)

書式

#include <unistd.h>

int

chroot(const char *dirname);

解説

dirname 引数は、ASCII のヌル文字で終了するディレクトリのパス名のアドレス です。 chroot() システムコールは、 dirname をルートディレクトリ、すなわ ち、 ‘/’ で開始するパス名のパス検索の開始点にします。

ディレクトリがルートディレクトリになるためには、プロセスにそのディレクト リへの実行 (検索) 許可がなければなりません。

chroot() はプロセスの現在のディレクトリに影響しないことに注意する必要があ ります。

この関数を呼び出せるのはスーパユーザのみです。

ディレクトリを参照するオープンファイル記述子が存在する場合、 chroot() 呼 び出しは sysctl 変数 ‘kern.chroot_allow_open_directories’ の設定に従い、 次のように失敗します:

‘kern.chroot_allow_open_directories’ が 0 に設定されている場合、ディレク トリがオープンされていれば chroot() は常に EPERM で失敗します。

‘kern.chroot_allow_open_directories’ が 1 に設定されている場合 (デフォル ト)、ディレクトリがオープンされていて、そのプロセスが chroot() システム コールの影響を受ける時、 chroot() は EPERM で失敗します。

‘kern.chroot_allow_open_directories’ が他の値の場合、オープンディレクトリ のチェックはされません。

正常に完了すると、値 0 が返されます。そうでない場合は、値 -1 が返され、エ ラーを示すために errno が設定されます。

エラー

chroot() システムコールは、次の場合処理に失敗し、ルートディレクトリは変更 されません:

       [ENOTDIR]

パスの構成要素中にディレクトリ以外のものが含まれていま す。

[EPERM]
実効ユーザ ID がスーパユーザではありません。またはディ レクトリが 1 つ以上のファイル記述子によってオープンさ れています。

[ENAMETOOLONG]
パス名の構成要素が 255 文字を越えているか、またはパス 名全体が 1023 文字を越えています。

[ENOENT]
指定のディレクトリが存在しません。

[EACCES]
指定されたパスには、検索が許可されていないディレクトリ が含まれています。

[ELOOP]
パス名を変換するときに検出されたシンボリックリンクが多 すぎます。

[EFAULT]
dirname
引数が、プロセスに割り当てられたアドレス空間の 範囲外を指しています。

[EIO]
ファイルシステムに読み書きしている間に入出力エラーが発 生しました。

関連項目

chdir(2), jail(2)

歴史

chroot() システムコールは 4.2BSD で登場しました。

バグ

プロセスがその作業ディレクトリを目的のディレクトリに変更可能であるが、 ( ディレクトリのオープンチェック、または MAC チェックのような) 他のアクセス 制御チェックで失敗する場合には、そのプロセスの作業ディレクトリが変更され たまま、このシステムコールがエラーを返すかもしれません。

FreeBSD 10.0 June 4, 1993 FreeBSD 10.0

スポンサーリンク