.\" This manpage is Copyright (C) 1992 Drew Eckhardt;
.\" and Copyright (C) 1993 Michael Haardt, Ian Jackson.
-.\" and Copyright (C) 2007 Michael Kerrisk <mtk.manpages@gmail.com>
+.\" and Copyright (C) 2004, 2006, 2007, 2014 Michael Kerrisk <mtk.manpages@gmail.com>
.\"
.\" %%%LICENSE_START(VERBATIM)
.\" Permission is granted to make and distribute verbatim copies of this
.\" Updated 2012-04-30, Akihiro MOTOKI <amotoki@gmail.com>
.\" Updated 2013-05-01, Akihiro MOTOKI <amotoki@gmail.com>
.\"
-.TH ACCESS 2 2013\-09\-13 Linux "Linux Programmer's Manual"
+.TH ACCESS 2 2014\-02\-21 Linux "Linux Programmer's Manual"
.SH 名前
-access \- ファイルに対する実ユーザーでのアクセス権をチェックする
+access, faccessat \- ユーザのファイルへのアクセス権をチェックする
.SH 書式
.nf
\fB#include <unistd.h>\fP
.sp
\fBint access(const char *\fP\fIpathname\fP\fB, int \fP\fImode\fP\fB);\fP
+
+\fB#include <fcntl.h> \fP/* AT_* 定数の定義 */
+\fB#include <unistd.h>\fP
+.sp
+\fBint faccessat(int \fP\fIdirfd\fP\fB, const char *\fP\fIpathname\fP\fB, int \fP\fImode\fP\fB, int \fP\fIflags\fP\fB);\fP
+.fi
+.sp
+.in -4n
+glibc 向けの機能検査マクロの要件 (\fBfeature_test_macros\fP(7) 参照):
+.in
+.sp
+\fBfaccessat\fP():
+.PD 0
+.ad l
+.RS 4
+.TP 4
+glibc 2.10 以降:
+_XOPEN_SOURCE\ >=\ 700 || _POSIX_C_SOURCE\ >=\ 200809L
+.TP
+glibc 2.10 より前:
+_ATFILE_SOURCE
+.RE
+.ad
+.PD
.fi
.SH 説明
\fBaccess\fP() は、呼び出し元プロセスがファイル \fIpathname\fP にアクセスできるかどうかをチェックする。 \fIpathname\fP
呼び出し元プロセスが特権プロセス (つまり、プロセスの実 UID が 0) の場合、 通常のファイルに対する \fBX_OK\fP
のチェックは、そのファイルの所有者、グループ、他人のいずれかの 実行許可が有効になっていれば成功する。
+.SS faccessat()
+\fBfaccessat\fP() システムコールは \fBaccess\fP() と全く同様に動作するが、以下で説明する点が異なる。
+
+\fIpathname\fP で指定されたパス名が相対パスの場合、このパス名はファイルディスクリプター \fIdirfd\fP
+が参照するディレクトリに対する相対パスと解釈される (\fBaccess\fP()
+に相対パス名を渡した場合のように、呼び出したプロセスのカレントワーキングディレクトリに対する相対パスではない)。
+
+\fIpathname\fP で指定されたパス名が相対パスで、 \fIdirfd\fP が特別な値 \fBAT_FDCWD\fP の場合、 (\fBaccess\fP()
+と同様に) \fIpathname\fP は呼び出したプロセスのカレントワーキングディレクトリに対する相対パスと解釈される。
+
+\fIpathname\fP で指定されたパス名が絶対パスの場合、 \fIdirfd\fP は無視される。
+
+\fIflags\fP は以下に示す値の 0 個以上の OR (論理和) をとって作成される。
+.TP
+\fBAT_EACCESS\fP
+アクセスチェックを実行ユーザー/グループ ID を使って行う。デフォルトでは、\fBfaccessat\fP() は (\fBaccess\fP() と同様に) 実
+ID を使用する。
+.TP
+\fBAT_SYMLINK_NOFOLLOW\fP
+\fIpathname\fP がシンボリックリンクの場合、リンクの展開を行わない。代わりに、リンク自身の情報を返す。
+.PP
+\fBfaccessat\fP() の必要性についての説明については \fBopenat\fP(2) を参照。
.SH 返り値
成功した場合 (要求した全てについて許可が得られたか、 \fImode\fP が \fBF_OK\fP でファイルが存在した場合)、ゼロが返される。 エラーの場合
(\fImode\fP の少なくとも一つのビットで要求した許可がなかった場合、 \fImode\fP が \fBF_OK\fP
でファイルが存在しなかった場合、他のエラーが起こった場合)、\-1 が返され、 \fIerrno\fP が適切に設定される。
.SH エラー
-\fBaccess\fP() は以下の場合に失敗する。
+\fBaccess\fP() と \fBfaccessat\fP() は以下の場合に失敗する。
.TP
\fBEACCES\fP
要求されたアクセスは そのファイル自身に拒否されたか \fIpathname\fP へ至るまでディレクトリのいずれかに対する検索許可 (search
\fBEROFS\fP
読み込み専用 (read\-only) のファイルシステムに対して書き込み許可を 要求した。
.PP
-\fBaccess\fP() は以下の理由により失敗することがある。
+\fBaccess\fP() と \fBfaccessat\fP() は以下の理由により失敗することがある。
.TP
\fBEFAULT\fP
\fIpathname\fP がアクセス可能なアドレス空間の外を指している。
.TP
\fBETXTBSY\fP
実行中のファイルに対して書き込みを要求した。
+.PP
+\fBfaccessat\fP() では以下のエラーも発生する。
+.TP
+\fBEBADF\fP
+\fIdirfd\fP が適切なファイルディスクリプタでない。
+.TP
+\fBEINVAL\fP
+\fIflags\fP に無効なフラグが指定された。
+.TP
+\fBENOTDIR\fP
+\fIpathname\fP が相対パスで、 \fIdirfd\fP がディレクトリ以外のファイルを参照しているファイルディスクリプタである。
+.SH バージョン
+\fBfaccessat\fP() はバージョン 2.6.16 で Linux に追加された。 ライブラリによるサポートは glibc バージョン 2.4
+で追加された。
.SH 準拠
-SVr4, 4.3BSD, POSIX.1\-2001.
+\fBaccess\fP(): SVr4, 4.3BSD, POSIX.1\-2001, POSIX.1\-2008.
+
+\fBfaccessat\fP(): POSIX.1\-2008.
.SH 注意
.PP
-\fB警告\fP: あるユーザが、例えば \fBopen\fP(2) によるアクセスが可能かどうかを、
-(実際に行う前に) \fBaccess\fP() を使ってチェックするのは、セキュリティホール
-の原因になる。なぜならチェックをしてから 実際にファイルのオープン操作を
-する間の短い間隔を悪用できるからである。 \fBこの理由があるので、この
-システムコールを使うのは避けるべきである。\fP
-(ここで説明した例の場合には、より安全な方法としては、
-そのプロセスの実効ユーザ ID を実ユーザ ID に一時的に切り替えてから
-\fBopen\fP(2) を呼び出す方法がある。)
+\fB警告\fP: あるユーザが、例えば \fBopen\fP(2) によるアクセスが可能かどうかを、 (実際に行う前に)
+これらのシステムコールを使ってチェックするのは、セキュリティホールの原因になる。なぜならチェックをしてから
+実際にファイルのオープン操作をする間の短い間隔を悪用できるからである。 \fBこの理由があるので、このシステムコールを使うのは避けるべきである。\fP
+(ここで説明した例の場合には、より安全な方法としては、 そのプロセスの実効ユーザ ID を実ユーザ ID に一時的に切り替えてから \fBopen\fP(2)
+を呼び出す方法がある。)
.PP
\fBaccess\fP() は常にシンボリックリンクの展開を行う。
シンボリックリンクのアクセス許可を確認する必要がある場合は、
\fBAT_SYMLINK_NOFOLLOW\fP フラグ付きで \fBfaccessat\fP(2) を使うこと。
.PP
\fImode\fP で指定されたアクセス種別のいずれか一つでも拒否されると、 たとえ \fImode\fP で指定された他のアクセス種別が許可されたとしても、
-\fBaccess\fP() はエラーを返す。
+これらのシステムコールはエラーを返す。
.PP
.\" HPU-UX 11 and Tru64 5.1 do this.
POSIX.1\-2001 では、 呼び出し元プロセスが適切な特権を持っている場合 (つまり、スーパーユーザの場合)、
ファイルを作成することが可能なことを意味するのであり、ディレクトリに ファイルとして書き込むことができるわけではない。 同様に DOS
のファイルは「実行可能」と判断されるが、 \fBexecve\fP(2) コールは失敗するだろう。
.PP
-\fBaccess\fP() は、 UID マッピングを使用した NFSv2 ファイルシステムでは正常に機能しないかもしれない。なぜならば UID
+.\"
+.\"
+これらのシステムコールは、 UID マッピングを使用した NFSv2 ファイルシステムでは正常に機能しないかもしれない。なぜならば UID
のマッピングはサーバーで 行なわれ、権利のチェックをするクライアントには見えないからである。 (NFS バージョン 3
以降ではサーバー側でチェックが実行される。) 同様の問題は FUSE マウントでも起こり得る。
+.SS "faccessat ()"
+生の \fBfaccessat\fP() システムコールは、最初の 3 つの引き数だけを取る。フラグ \fBAT_EACCESS\fP と
+\fBAT_SYMLINK_NOFOLLOW\fP は実際には \fBfaccessat\fP() の glibc
+のラッパー関数内で実装されている。これらのフラグのいずれかが指定された場合、ラッパー関数は \fBfstatat\fP(2)
+を使ってアクセス許可の判定を行う。
.SH バグ
.\" This behavior appears to have been an implementation accident.
バージョン 2.4 (とそれ以前) のカーネルには、スーパーユーザでの \fBX_OK\fP のチェックの扱いに奇妙な点がある。 ディレクトリ以外のファイルで
\fBX_OK\fP だけが指定されたときだけであり \fImode\fP に \fBR_OK\fP や \fBW_OK\fP が一緒に指定された場合には
\fBaccess\fP() は 0 を返す。 (バージョン 2.6.3 以前の) 初期の 2.6 系のカーネルも 2.4 系のカーネルと同様の動作をする。
-2.6.20 ã\82\88ã\82\8aå\89\8dã\81®ã\82«ã\83¼ã\83\8dã\83«ã\81§ã\81¯ã\80\81 ã\83\95ã\82¡ã\82¤ã\83«ã\81\8cå\98å\9c¨ã\81\99ã\82\8bã\83\95ã\82¡ã\82¤ã\83«ã\82·ã\82¹ã\83\86ã\83 ã\82\92 \fBmount\fP(2) ã\81\99ã\82\8bé\9a\9bã\81«æ\8c\87å®\9aã\81\95ã\82\8cã\81\9f \fBMS_NOEXEC\fP
-フラグの効果を、 \fBaccess\fP() は無視していた。 カーネル 2.6.20 以降では、 \fBaccess\fP()
-ã\81¯ã\81\93ã\81®ã\83\95ã\83©ã\82°ã\82\92è\80\83æ\85®ã\81\99るようになっている。
+2.6.20 ã\82\88ã\82\8aå\89\8dã\81®ã\82«ã\83¼ã\83\8dã\83«ã\81§ã\81¯ã\80\81 ã\81\93ã\82\8cã\82\89ã\81®ã\82·ã\82¹ã\83\86ã\83 ã\82³ã\83¼ã\83«ã\81¯ã\83\95ã\82¡ã\82¤ã\83«ã\81\8cå\98å\9c¨ã\81\99ã\82\8bã\83\95ã\82¡ã\82¤ã\83«ã\82·ã\82¹ã\83\86ã\83 ã\82\92 \fBmount\fP(2) ã\81\99ã\82\8bé\9a\9bã\81«æ\8c\87å®\9aã\81\95ã\82\8cã\81\9f
+\fBMS_NOEXEC\fP フラグの効果を無視していた。 カーネル 2.6.20 以降では、 \fBMS_NOEXEC\fP
+ã\83\95ã\83©ã\82°ã\81¯è\80\83æ\85®ã\81\95ã\82\8cるようになっている。
.SH 関連項目
-\fBchmod\fP(2), \fBchown\fP(2), \fBfaccessat\fP(2), \fBopen\fP(2), \fBsetgid\fP(2),
-\fBsetuid\fP(2), \fBstat\fP(2), \fBeauidaccess\fP(3), \fBcredentials\fP(7),
-\fBpath_resolution\fP(7)
+\fBchmod\fP(2), \fBchown\fP(2), \fBopen\fP(2), \fBsetgid\fP(2), \fBsetuid\fP(2),
+\fBstat\fP(2), \fBeuidaccess\fP(3), \fBcredentials\fP(7), \fBpath_resolution\fP(7),
+\fBsymlink\fP(7)
.SH この文書について
-この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.54 の一部
+この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.67 の一部
である。プロジェクトの説明とバグ報告に関する情報は
http://www.kernel.org/doc/man\-pages/ に書かれている。