名 前
chroot − ル ー ト デ ィ レ ク ト リ を 変 更 す る
書 式
#include <unistd.h>
int chroot(const char *path);
glibc 向 け の 機 能 検 査 マ ク ロ の 要 件 (feature_test_macros(7) 参 照 ):
chroot():
glibc 2.2.2 以 降 :
_BSD_SOURCE ||
(_XOPEN_SOURCE >= 500 ||
_XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED)
&&
!(_POSIX_C_SOURCE >= 200112L ||
_XOPEN_SOURCE >= 600)
glibc 2.2.2 よ り 前 : な し
説 明
chroot() は 、 呼 び 出 し 元 プ ロ セ ス の ル ー ト デ ィ レ ク ト リ を path で 指 定 さ れ た デ ィ レ ク ト リ に 変 更 す る 。 こ の デ ィ レ ク ト リ 以 下 が / か ら 始 ま る パ ス 名 と し て 使 わ れ る 。 こ の ル ー ト デ ィ レ ク ト リ は 呼 び 出 し 元 の プ ロ セ ス の 全 て の 子 プ ロ セ ス に 受 け 継 が れ る 。 特 権 プ ロ セ ス (Linux で は 、 CAP_SYS_CHROOT ケ ー パ ビ リ テ ィ を 持 つ プ ロ セ ス ) の み が chroot() を 呼 び 出 す こ と が で き る 。 こ の コ ー ル は パ ス 名 解 決 の 過 程 で 構 成 要 素 を 変 更 す る の み で 、 そ の 他 に は 何 も 行 わ な い 。 こ の コ ー ル は 現 在 の 作 業 デ ィ レ ク ト リ (working directory) を 変 更 し な い 。 そ の た め 、 こ の コ ー ル の 後 に '.' が '/' を 根 と す る ツ リ ー の 外 に な る 場 合 が あ る 。 特 に 、 ス ー パ ー ユ ー ザ ー は 以 下 の よ う に す る こ と で "chroot jail" か ら 逃 げ 出 せ て し ま う 。
mkdir foo; chroot foo; cd .. こ の コ ー ル は オ ー プ ン フ ァ イ ル デ ィ ス ク リ プ タ ー を ク ロ ー ズ し な い の で 、 こ の よ う な フ ァ イ ル デ ィ ス ク リ プ タ ー は chroot ツ リ ー の 外 に あ る フ ァ イ ル に ア ク セ ス で き る 。
返 り 値
成 功 し た 場 合 は 0 が 返 さ れ る 。 エ ラ ー の 場 合 は −1 が 返 さ れ 、 errno が 適 切 に 設 定 さ れ る 。
エ ラ ー
フ ァ イ ル シ ス テ ム に よ っ て は 他 の エ ラ ー が 返 さ れ る 事 が あ る 。 一 般 的 な エ ラ ー を 以 下 に 挙 げ る :
EACCES パ ス 名 の 構 成 要 素 に 検 索 許 可 が な い |
(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() シ ス テ ム コ ー ル が あ る 。
関 連 項 目
こ の 文 書 に つ い て
こ の man ペ ー ジ は Linux man−pages プ ロ ジ ェ ク ト の リ リ ー ス 3.79 の 一 部 で あ る 。 プ ロ ジ ェ ク ト の 説 明 と バ グ 報 告 に 関 す る 情 報 は http://www.kernel.org/doc/man−pages/ に 書 か れ て い る 。