Man page - fexecve(3)

Packages contains this manual

Available languages:

en fr ja ru ro

Manual

FEXECVE

名 前
書 式
説 明
返 り 値
エ ラ ー
バ ー ジ ョ ン
属 性
準 拠
注 意
バ グ
関 連 項 目
こ の 文 書 に つ い て

名 前

fexecve - フ ァ イ ル デ ィ ス ク リ プ タ ー で 指 定 さ れ た プ ロ グ ラ ム を 実 行 す る

書 式

#include <unistd.h>

int fexecve(int fd , char *const argv [], char *const envp []);

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

fexecve ():

glibc 2.10 以 降 :

_POSIX_C_SOURCE >= 200809L

glibc 2.10 よ り 前 :

_GNU_SOURCE

説 明

fexecve () performs the same task as execve (2), with the difference that the file to be executed is specified via a file descriptor, fd , rather than via a pathname. The file descriptor fd must be opened read-only ( O_RDONLY ) or with the O_PATH flag and the caller must have permission to execute the file that it refers to.

返 り 値

fexecve () は 呼 び 出 し に 成 功 し た 場 合 、 戻 る こ と は な い 。 エ ラ ー の 場 合 、 返 り 値 -1 で 関 数 が 返 り 、 errno が 適 切 に 設 定 さ れ る 。

エ ラ ー

エ ラ ー は execve (2) と 同 じ だ が 、 以 下 の エ ラ ー が 追 加 に な っ て い る :

EINVAL

fd が 有 効 な フ ァ イ ル デ ィ ス ク リ プ タ ー で な い 。 ま た は argv が NULL で あ る 。 ま た は envp が NULL で あ る 。

ENOENT

The close-on-exec flag is set on fd , and fd refers to a script. See BUGS.

ENOSYS

The kernel does not provide the execveat (2) system call, and the /proc filesystem could not be accessed.

バ ー ジ ョ ン

fexecve () は glibc 2.3.2 以 降 で 実 装 さ れ て い る 。

属 性

こ の 節 で 使 用 さ れ て い る 用 語 の 説 明 に つ い て は 、 attributes (7) を 参 照 。

Image grohtml-43776-1.png

準 拠

POSIX.1-2008. こ の 関 数 は POSIX.1-2001 で は 規 定 さ れ て お ら ず 、 他 の シ ス テ ム で 広 く 利 用 で き る わ け で は な い 。 POSIX.1-2008 で 規 定 さ れ て い る 。

注 意

On Linux with glibc versions 2.26 and earlier, fexecve () is implemented using the proc (5) filesystem, so /proc needs to be mounted and available at the time of the call. Since glibc 2.27, if the underlying kernel supports the execveat (2) system call, then fexecve () is implemented using that system call, with the benefit that /proc does not need to be mounted.

fexecve () の 裏 に あ る 考 え は 、 呼 び 出 し 元 が 、 フ ァ イ ル を 実 行 す る 前 に 実 行 フ ァ イ ル の 内 容 を 検 査 (チ ェ ッ ク サ ム を 確 認 ) で き る よ う に す る こ と で あ る 。 単 に 、 フ ァ イ ル を オ ー プ ン し て 内 容 の チ ェ ッ ク サ ム を 検 査 し 、 そ れ か ら execve (2) を 行 う の は 十 分 で は な い 。 な ぜ な ら 、 2 つ の ス テ ッ プ の 間 で 、 フ ァ イ ル 名 や 、 パ ス 名 の デ ィ レ ク ト リ の 前 の 方 が 入 れ 換 え ら れ る 可 能 性 が あ る か ら だ (例 え ば 、 シ ン ボ リ ッ ク リ ン ク の リ ン ク 先 を 変 更 す る な ど )。 fexecve () は 、 チ ェ ッ ク サ ム の 検 査 と fexecve () の 呼 び 出 し の 間 で 、 フ ァ イ ル の 内 容 を 変 更 で き る 可 能 性 が あ る と い う 問 題 へ の 対 策 に は な ら な い 。 こ の 問 題 に 対 す る 対 応 策 は 、 確 実 に 、 フ ァ イ ル の ア ク セ ス 許 可 を 設 定 し 、 悪 意 の あ る ユ ー ザ ー が フ ァ イ ル を 変 更 で き な い よ う に す る こ と で あ る 。

fexecve () を 使 用 す る 際 の 理 に か な っ た 方 法 は 、 fd に close-on-exec フ ラ グ を セ ッ ト し 、 実 行 す る プ ロ グ ラ ム を 通 じ て そ の フ ァ イ ル デ ィ ス ク リ プ タ ー が 外 部 に も れ な い よ う に す る こ と で あ る 。 こ の 方 法 は 2 つ の 理 由 か ら 理 に か な っ て い る 。 1 つ 目 は 、 こ れ に よ り 不 必 要 に フ ァ イ ル デ ィ ス ク リ プ タ ー が 消 費 さ れ る の を 防 ぐ こ と が で き る (実 行 さ れ る プ ロ グ ラ ム は 普 通 プ ロ グ ラ ム 自 身 が 参 照 す る フ ァ イ ル を 参 照 す る 必 要 は な い )。 2 つ 目 は 、 fexecve () が 再 帰 的 に 使 用 さ れ た 場 合 、 close-on-exec フ ラ グ を 利 用 す る こ と で 、 再 帰 の 各 ス テ ッ プ で 新 し い プ ロ グ ラ ム に 一 つ 余 計 に フ ァ イ ル デ ィ ス ク リ プ タ ー が 渡 さ れ る こ と に よ る 、 フ ァ イ ル デ ィ ス ク リ プ タ ー の 枯 渇 を 防 ぐ こ と が で き る (た だ し 「 バ グ 」 を 参 照 )。

バ グ

fd が ス ク リ プ ト を 参 照 し て い て (つ ま り 、 最 初 の 行 に 文 字 #! で 始 ま る ス ク リ プ ト イ ン タ ー プ リ タ ー の 指 示 が あ る 実 行 テ キ ス ト フ ァ イ ル で あ る )、 fd に close-on-exec フ ラ グ が セ ッ ト さ れ て い た 場 合 、 fexecve () は エ ラ ー ENOENT で 失 敗 す る 。 こ の エ ラ ー が 起 こ る の は 、 ス ク リ プ ト イ ン タ ー プ リ タ ー が 実 行 さ れ る 時 点 ま で に 、 close-on-exec フ ラ グ に よ り fd が す で に ク ロ ー ズ さ れ て し ま っ て い る か ら で あ る 。 そ の た め 、 ス ク リ プ ト を 参 照 す る 場 合 に は 、 close-on-exec フ ラ グ を fd に セ ッ ト す る こ と は で き ず 、 「 注 意 」 の 節 で 説 明 さ れ て い る 問 題 が 起 こ り 得 る 。

関 連 項 目

execve (2), execveat (2)

こ の 文 書 に つ い て

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