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] [ENAMETOOLONG] [ENOENT] [EACCES] [ELOOP] [EFAULT] [EIO] 関連項目 |
歴史
chroot() システムコールは 4.2BSD で登場しました。 |
バグ
プロセスがその作業ディレクトリを目的のディレクトリに変更可能であるが、 ( ディレクトリのオープンチェック、または MAC チェックのような) 他のアクセス 制御チェックで失敗する場合には、そのプロセスの作業ディレクトリが変更され たまま、このシステムコールがエラーを返すかもしれません。 FreeBSD 10.0 June 4, 1993 FreeBSD 10.0 |