Man page - chroot(2)

Packages contains this manual

Available languages:

en fr pl nl ja ru ro de

Manual

CHROOT

名 前
書 式
説 明
返 り 値
エ ラ ー
準 拠
注 意
関 連 項 目
こ の 文 書 に つ い て

名 前

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

書 式

#include <unistd.h>

int chroot(const char * path );

glibc 向 け の 機 能 検 査 マ ク ロ の 要 件 ( feature_test_macros (7) 参 照 ):

chroot ():

glibc 2.2.2 以 降 :

_XOPEN_SOURCE && ! (_POSIX_C_SOURCE >= 200112L)
|| /* glibc 2.20 以 降 : */ _DEFAULT_SOURCE
|| /* Glibc 2.19 以 前 : */ _BSD_SOURCE

glibc 2.2.2 よ り 前 : な し

説 明

chroot () は 、 呼 び 出 し 元 プ ロ セ ス の ル ー ト デ ィ レ ク ト リ を path で 指 定 さ れ た デ ィ レ ク ト リ に 変 更 す る 。 こ の デ ィ レ ク ト リ 以 下 が / か ら 始 ま る パ ス 名 と し て 使 わ れ る 。 こ の ル ー ト デ ィ レ ク ト リ は 呼 び 出 し 元 の プ ロ セ ス の 全 て の 子 プ ロ セ ス に 受 け 継 が れ る 。

特 権 プ ロ セ ス (Linux で は 、 そ の プ ロ セ ス の ユ ー ザ ー 名 前 空 間 で CAP_SYS_CHROOT ケ ー パ ビ リ テ ィ を 持 つ プ ロ セ ス ) の み が chroot () を 呼 び 出 す こ と が で き る 。

This call changes an ingredient in the pathname resolution process and does nothing else. In particular, it is not intended to be used for any kind of security purpose, neither to fully sandbox a process nor to restrict filesystem system calls. In the past, chroot () has been used by daemons to restrict themselves prior to passing paths supplied by untrusted users to system calls such as open (2). However, if a folder is moved out of the chroot directory, an attacker can exploit that to get out of the chroot directory as well. The easiest way to do that is to chdir (2) to the to-be-moved directory, wait for it to be moved out, then open a path like ../../../etc/passwd.

A slightly trickier variation also works under some circumstances if chdir (2) is not permitted. If a daemon allows a "chroot directory" to be specified, that usually means that if you want to prevent remote users from accessing files outside the chroot directory, you must ensure that folders are never moved out of it.

こ の コ ー ル は 現 在 の 作 業 デ ィ レ ク ト リ (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) の 場 合 も 、 ル ー ト デ ィ レ ク ト リ は 変 更 さ れ な い 。

The magic symbolic link, /proc/[pid]/root , can be used to discover a process’s root directory; see proc (5) for details.

FreeBSD に は よ り 強 力 な jail () シ ス テ ム コ ー ル が あ る 。

関 連 項 目

chroot (1), chdir (2), pivot_root (2), path_resolution (7), switch_root (8)

こ の 文 書 に つ い て

こ の man ペ ー ジ は Linux man-pages プ ロ ジ ェ ク ト の リ リ ー ス 5.10 の 一 部 で あ る 。 プ ロ ジ ェ ク ト の 説 明 と バ グ 報 告 に 関 す る 情 報 は https://www.kernel.org/doc/man-pages/ に 書 か れ て い る 。