CHROOT
Section: Linux Programmer's Manual (2)
Updated: 2004-06-23
Index
JM Home Page
roff page
名前
chroot - ルート・ディレクトリを変更する
書式
#include <unistd.h>
int chroot(const char *path);
説明
chroot()
は、ルート・ディレクトリを
path
で指定されたディレクトリに変更する。
このディレクトリ以下が / から始まるパス名として使われる。
このルート・ディレクトリは現在のプロセスの全ての子プロセスに受け継がれる。
特権プロセス (Linux では、
CAP_SYS_CHROOT
ケーパビリティを持つプロセス) のみが
chroot(2)
を呼び出すことができる。
このコールはパス名解決の過程で構成要素を変更するのみで、
その他には何も行わない。
このコールは現在の作業ディレクトリ
(working directory) を変更しない。
そのため、このコールの後に '.' が '/' を根とするツリーの外になる場合がある。
特に、スーパー・ユーザーは `mkdir foo; chroot foo; cd ..'
とすれば「chroot jail」から逃げ出せてしまう。
このコールはオープンファイルディスクリプタをクローズしないので、
このようなファイルディスクリプタは chroot ツリーの外にある
ファイルにアクセスできる。
返り値
成功すると 0 を返す。
失敗すると -1 を返し、
errno
に適切な値を設定する。
エラー
ファイルシステムによっては他のエラーが返される事がある。
一般的なエラーを以下に挙げる:
- EACCES
-
パス名の途中のどこかに検索許可 (search permission) がない。
(path_resolution(7)
も参照すること。)
- EFAULT
-
path
が割り当てられたアドレス空間外を指している。
- EIO
-
I/O エラーが発生した。
- ELOOP
-
path
を解決する際に遭遇したシンボリック・リンクが多過ぎる。
- ENAMETOOLONG
-
path
が長過ぎる。
- ENOENT
-
ファイルが存在しない。
- ENOMEM
-
カーネルに十分なメモリがない。
- ENOTDIR
-
path
の内容がディレクトリではない。
- EPERM
-
呼び出し側に十分な特権がない。
準拠
SVr4, 4.4BSD, SUSv2 (但し、SUSv2 では過去の名残とされている)。
この関数は POSIX.1-2001 にはない。
注意
fork(2)
で作成された子プロセスは、
親プロセスのルート・ディレクトリを継承する。
execve(2)
の場合も、ルート・ディレクトリは変更されない。
FreeBSD にはより強力な
jail()
システムコールがある。
関連項目
chdir(2),
path_resolution(7)
Index
- 名前
-
- 書式
-
- 説明
-
- 返り値
-
- エラー
-
- 準拠
-
- 注意
-
- 関連項目
-
This document was created by
man2html,
using the manual pages.
Time: 04:31:34 GMT, November 19, 2007