chroot(2) FreeBSD 一般コマンドマニュアル

chroot

前のページ 上に戻る 次のページ

chroot




書式

     #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() 呼び出し
     の影響を受ける場合、 EPERM で失敗します。

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

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


エラー

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

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

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

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

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



歴史

     chroot() 関数は 4.2BSD で登場しました。

FreeBSD 4.4                      June 4, 1993                      FreeBSD 4.4

ABELNET VPSサービス