OSDN Git Service

長音記号の修正を release に反映
[linuxjm/LDP_man-pages.git] / release / man3 / fexecve.3
index 442803f..17a2ba0 100644 (file)
@@ -1,7 +1,6 @@
-.\" Hey Emacs! This file is -*- nroff -*- source.
-.\"
-.\" Copyright (c) 2006, Michael Kerrisk
+.\" Copyright (c) 2006, 2014, Michael Kerrisk
 .\"
+.\" %%%LICENSE_START(VERBATIM)
 .\" Permission is granted to make and distribute verbatim copies of this
 .\" manual provided the copyright notice and this permission notice are
 .\" preserved on all copies.
 .\"
 .\" Formatted or processed versions of this manual, if unaccompanied by
 .\" the source, must acknowledge the copyright and authors of this work.
+.\" %%%LICENSE_END
 .\"
 .\"*******************************************************************
 .\"
 .\" This file was generated with po4a. Translate the source file.
 .\"
 .\"*******************************************************************
-.TH FEXECVE 3 2010\-09\-15 Linux "Linux Programmer's Manual"
+.\"
+.\" Japanese Version Copyright (c) 2006 Akihiro MOTOKI all rights reserved.
+.\" Translated 2006-07-31, Akihiro MOTOKI <amotoki@dd.iij4u.or.jp>
+.\" Updated 2009-02-23, Akihiro MOTOKI <amotoki@dd.iij4u.or.jp>, LDP v3.18
+.\"
+.TH FEXECVE 3 2015\-01\-22 Linux "Linux Programmer's Manual"
 .SH 名前
-fexecve \- ファイルディスクリプタで指定されたプログラムを実行する
+fexecve \- ã\83\95ã\82¡ã\82¤ã\83«ã\83\87ã\82£ã\82¹ã\82¯ã\83ªã\83\97ã\82¿ã\83¼ã\81§æ\8c\87å®\9aã\81\95ã\82\8cã\81\9fã\83\97ã\83­ã\82°ã\83©ã\83 ã\82\92å®\9fè¡\8cã\81\99ã\82\8b
 .SH 書式
 .nf
 \fB#include <unistd.h>\fP
@@ -57,17 +62,17 @@ _GNU_SOURCE
 .SH 説明
 .\" POSIX.1-2008 specifies the O_EXEC flag for open as an alternative,
 .\" but Linux doesn't support this flag yet.
-\fBfexecve\fP()  は \fBexecve\fP(2)  と同じ作業を行う。違うのは、 実行するファイルを、パス名ではなく、 ファイルディスクリプタ
-\fIfd\fP を用いて指定する点である。 ファイルディスクリプタ \fIfd\fP は、読み込み専用でオープンされていなければならず、
-呼び出し元はファイルディスクリプタが参照するファイルに対する 実行許可を持っていなければならない。
+\fBfexecve\fP()  は \fBexecve\fP(2)  と同じ作業を行う。違うのは、 実行するファイルを、パス名ではなく、 ファイルディスクリプタ
+\fIfd\fP を用いて指定する点である。 ファイルディスクリプタ \fIfd\fP は、読み込み専用でオープンされていなければならず、
\91¼ã\81³å\87ºã\81\97å\85\83ã\81¯ã\83\95ã\82¡ã\82¤ã\83«ã\83\87ã\82£ã\82¹ã\82¯ã\83ªã\83\97ã\82¿ã\83¼ã\81\8cå\8f\82ç\85§ã\81\99ã\82\8bã\83\95ã\82¡ã\82¤ã\83«ã\81«å¯¾ã\81\99ã\82\8b å®\9fè¡\8c許å\8f¯ã\82\92æ\8c\81ã\81£ã\81¦ã\81\84ã\81ªã\81\91ã\82\8cã\81°ã\81ªã\82\89ã\81ªã\81\84ã\80\82
 .SH 返り値
-\fBfexecve\fP()  は呼び出しに成功した場合、戻ることはない。 エラーの場合、返り値として \-1 が返され、 \fIerrno\fP
+\fBfexecve\fP()  は呼び出しに成功した場合、戻ることはない。 エラーの場合、返り値 \-1 で関数が返り、 \fIerrno\fP
 が適切に設定される。
 .SH エラー
 エラーは \fBexecve\fP(2)  と同じだが、以下のエラーが追加になっている:
 .TP 
 \fBEINVAL\fP
-\fIfd\fP が有効なファイルディスクリプタでない。または \fIargv\fP が NULL である。または \fIenvp\fP が NULL である。
+\fIfd\fP ã\81\8cæ\9c\89å\8a¹ã\81ªã\83\95ã\82¡ã\82¤ã\83«ã\83\87ã\82£ã\82¹ã\82¯ã\83ªã\83\97ã\82¿ã\83¼ã\81§ã\81ªã\81\84ã\80\82ã\81¾ã\81\9fã\81¯ \fIargv\fP ã\81\8c NULL ã\81§ã\81\82ã\82\8bã\80\82ã\81¾ã\81\9fã\81¯ \fIenvp\fP ã\81\8c NULL ã\81§ã\81\82ã\82\8bã\80\82
 .TP 
 \fBENOSYS\fP
 \fI/proc\fP ファイルシステムにアクセスできなかった。
@@ -75,12 +80,36 @@ _GNU_SOURCE
 \fBfexecve\fP()  は glibc 2.3.2 以降で実装されている。
 .SH 準拠
 POSIX.1\-2008.  この関数は POSIX.1\-2001 では規定されておらず、 他のシステムで広く利用できるわけではない。
+POSIX.1\-2008 で規定されている。
 .SH 注意
+.\" FIXME .
+.\" With the addition of the execveat(2), fexecve() can be implemented
+.\" even where /proc is unavailable. Review future glibc releases to
+.\" see if the implementation is changed to use execveat(2).
 Linux では、 \fBfexecve\fP()  は \fBproc\fP(5)  ファイルシステムを使って実装されている。
 そのため、この関数を呼び出す時点では \fI/proc\fP がマウントされて利用可能となっている必要がある。
+
+\fBfexecve\fP() の裏にある考えは、呼び出し元が、ファイルを実行する前に実行ファイルの内容を検査 (チェックサムを確認)
+できるようにすることである。単に、ファイルをオープンして内容のチェックサムを検査し、それから \fBexecve\fP(2)
+を行うのは十分ではない。なぜなら、2 つのステップの間で、ファイル名や、パス名のディレクトリの前の方が入れ換えられる可能性があるからだ
+(例えば、シンボリックリンクのリンク先を変更するなど)。\fBfexecve\fP() は、チェックサムの検査と \fBfexecve\fP()
+の呼び出しの間で、ファイルの\fI内容\fPを変更できる可能性があるという問題への対策にはならない。この問題に対する対応策は、確実に、ファイルのアクセス許可を設定し、悪意のあるユーザーがファイルを変更できないようにすることである。
+
+\fBfexecve\fP() を使用する際の理にかなった方法は、 \fIfd\fP に close\-on\-exec フラグをセットし、
+実行するプログラムを通じてそのファイルディスクリプターが外部にもれないようにすることである。 この方法は 2 つの理由から理にかなっている。 1
+つ目は、 これにより不必要にファイルディスクリプターが消費されるのを防ぐことができる
+(実行されるプログラムは普通プログラム自身が参照するファイルを参照する必要はない)。 2 つ目は、 \fBfexecve\fP() が再帰的に使用された場合、
+close\-on\-exec フラグを利用することで、 再帰の各ステップで新しいプログラムに一つ余計にファイルディスクリプターが渡されることによる、
+ファイルディスクリプターの枯渇を防ぐことができる (ただし「バグ」を参照)。
+.SH バグ
+\fIfd\fP がスクリプトを参照していて (つまり、 最初の行に文字 \fI#!\fP
+で始まるスクリプトインタープリターの指示がある実行テキストファイルである)、 \fIfd\fP に close\-on\-exec フラグがセットされていた場合、
+\fBfexecve\fP() はエラー \fBENOENT\fP で失敗する。 このエラーが起こるのは、 スクリプトインタープリターが実行される時点までに、
+close\-on\-exec フラグにより \fIfd\fP がすでにクローズされてしまっているからである。 そのため、 スクリプトを参照する場合には、
+close\-on\-exec フラグを \fIfd\fP にセットすることはできず、 「注意」の節で説明されている問題が起こり得る。
 .SH 関連項目
-\fBexecve\fP(2)
+\fBexecve\fP(2), \fBexecveat\fP(2)
 .SH この文書について
-この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.40 の一部
+この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.78 の一部
 である。プロジェクトの説明とバグ報告に関する情報は
 http://www.kernel.org/doc/man\-pages/ に書かれている。