1 .\" This manpage is Copyright (C) 1992 Drew Eckhardt;
2 .\" and Copyright (C) 1993 Michael Haardt, Ian Jackson.
3 .\" and Copyright (C) 2004, 2006, 2007, 2014 Michael Kerrisk <mtk.manpages@gmail.com>
5 .\" %%%LICENSE_START(VERBATIM)
6 .\" Permission is granted to make and distribute verbatim copies of this
7 .\" manual provided the copyright notice and this permission notice are
8 .\" preserved on all copies.
10 .\" Permission is granted to copy and distribute modified versions of this
11 .\" manual under the conditions for verbatim copying, provided that the
12 .\" entire resulting derived work is distributed under the terms of a
13 .\" permission notice identical to this one.
15 .\" Since the Linux kernel and libraries are constantly changing, this
16 .\" manual page may be incorrect or out-of-date. The author(s) assume no
17 .\" responsibility for errors or omissions, or for damages resulting from
18 .\" the use of the information contained herein. The author(s) may not
19 .\" have taken the same level of care in the production of this manual,
20 .\" which is licensed free of charge, as they might when working
23 .\" Formatted or processed versions of this manual, if unaccompanied by
24 .\" the source, must acknowledge the copyright and authors of this work.
27 .\" Modified 1993-07-21 Rik Faith (faith@cs.unc.edu)
28 .\" Modified 1994-08-21 by Michael Chastain (mec@shell.portal.com):
29 .\" Removed note about old kernel (pre-1.1.44) using wrong id on path.
30 .\" Modified 1996-03-18 by Martin Schulze (joey@infodrom.north.de):
31 .\" Stated more clearly how it behaves with symbolic links.
32 .\" Added correction due to Nick Duffek (nsd@bbc.com), aeb, 960426
33 .\" Modified 1996-09-07 by Michael Haardt:
34 .\" Restrictions for NFS
35 .\" Modified 1997-09-09 by Joseph S. Myers <jsm28@cam.ac.uk>
36 .\" Modified 1998-01-13 by Michael Haardt:
37 .\" Using access is often insecure
38 .\" Modified 2001-10-16 by aeb
39 .\" Modified 2002-04-23 by Roger Luethi <rl@hellgate.ch>
40 .\" Modified 2004-06-23 by Michael Kerrisk
41 .\" 2007-06-10, mtk, various parts rewritten, and added BUGS section.
43 .\"*******************************************************************
45 .\" This file was generated with po4a. Translate the source file.
47 .\"*******************************************************************
49 .\" Japanese Version Copyright (c) 1997-1998 HANATAKA Shinya
50 .\" all rights reserved.
51 .\" Translated 1997-12-17, HANATAKA Shinya <hanataka@abyss.rim.or.jp>
52 .\" Modified 1998-05-11, HANATAKA Shinya <hanataka@abyss.rim.or.jp>
53 .\" Updated 2001-12-14, Kentaro Shirakata <argrath@ub32.org>
54 .\" Updated 2002-06-17, Kentaro Shirakata <argrath@ub32.org>
55 .\" Updated 2005-02-23, Akihiro MOTOKI <amotoki@dd.iij4u.or.jp>
56 .\" Updated 2007-05-01, Akihiro MOTOKI, LDP v2.46
57 .\" Updated 2007-09-04, Akihiro MOTOKI, LDP v2.64
58 .\" Updated 2012-04-30, Akihiro MOTOKI <amotoki@gmail.com>
59 .\" Updated 2013-05-01, Akihiro MOTOKI <amotoki@gmail.com>
61 .TH ACCESS 2 2014\-08\-19 Linux "Linux Programmer's Manual"
63 access, faccessat \- ユーザのファイルへのアクセス権をチェックする
66 \fB#include <unistd.h>\fP
68 \fBint access(const char *\fP\fIpathname\fP\fB, int \fP\fImode\fP\fB);\fP
70 \fB#include <fcntl.h> \fP/* AT_* 定数の定義 */
71 \fB#include <unistd.h>\fP
73 \fBint faccessat(int \fP\fIdirfd\fP\fB, const char *\fP\fIpathname\fP\fB, int \fP\fImode\fP\fB, int \fP\fIflags\fP\fB);\fP
77 glibc 向けの機能検査マクロの要件 (\fBfeature_test_macros\fP(7) 参照):
86 _XOPEN_SOURCE\ >=\ 700 || _POSIX_C_SOURCE\ >=\ 200809L
95 \fBaccess\fP() は、呼び出し元プロセスがファイル \fIpathname\fP にアクセスできるかどうかをチェックする。 \fIpathname\fP
96 がシンボリックリンクの場合、シンボリックリンクは展開される。
98 .\" F_OK is defined as 0 on every system that I know of.
99 \fImode\fP はチェックを行うアクセス権を指定するもので、その値は \fBF_OK\fP、 もしくは \fBR_OK\fP, \fBW_OK\fP, \fBX_OK\fP の
100 1個以上のビット単位の論理和から構成されるマスクである。 \fBF_OK\fP はファイルが存在するかどうかのみを検査する。 \fBR_OK\fP,
101 \fBW_OK\fP, \fBX_OK\fP は、ファイルが存在して、それぞれ読み込み、書き込み、実行の許可があるか を検査する。
103 チェックは、実際に操作が行われる際に使用される実効 (effective) ID でなく、 呼び出し元プロセスの \fI実 (real)\fP UID と
104 \fI実 (real)\fP GID を使って行われる。 これにより、set\-user\-ID プログラムで、プログラムを起動するユーザの権限を
107 呼び出し元プロセスが特権プロセス (つまり、プロセスの実 UID が 0) の場合、 通常のファイルに対する \fBX_OK\fP
108 のチェックは、そのファイルの所有者、グループ、他人のいずれかの 実行許可が有効になっていれば成功する。
110 \fBfaccessat\fP() システムコールは \fBaccess\fP() と全く同様に動作するが、以下で説明する点が異なる。
112 \fIpathname\fP で指定されたパス名が相対パスの場合、このパス名はファイルディスクリプター \fIdirfd\fP
113 が参照するディレクトリに対する相対パスと解釈される (\fBaccess\fP()
114 に相対パス名を渡した場合のように、呼び出したプロセスのカレントワーキングディレクトリに対する相対パスではない)。
116 \fIpathname\fP で指定されたパス名が相対パスで、 \fIdirfd\fP が特別な値 \fBAT_FDCWD\fP の場合、 (\fBaccess\fP()
117 と同様に) \fIpathname\fP は呼び出したプロセスのカレントワーキングディレクトリに対する相対パスと解釈される。
119 \fIpathname\fP で指定されたパス名が絶対パスの場合、 \fIdirfd\fP は無視される。
121 \fIflags\fP は以下に示す値の 0 個以上の OR (論理和) をとって作成される。
124 アクセスチェックを実行ユーザー/グループ ID を使って行う。デフォルトでは、\fBfaccessat\fP() は (\fBaccess\fP() と同様に) 実
127 \fBAT_SYMLINK_NOFOLLOW\fP
128 \fIpathname\fP がシンボリックリンクの場合、リンクの展開を行わない。代わりに、リンク自身の情報を返す。
130 \fBfaccessat\fP() の必要性についての説明については \fBopenat\fP(2) を参照。
132 成功した場合 (要求した全てについて許可が得られたか、 \fImode\fP が \fBF_OK\fP でファイルが存在した場合)、ゼロが返される。 エラーの場合
133 (\fImode\fP の少なくとも一つのビットで要求した許可がなかった場合、 \fImode\fP が \fBF_OK\fP
134 でファイルが存在しなかった場合、他のエラーが起こった場合)、\-1 が返され、 \fIerrno\fP が適切に設定される。
136 \fBaccess\fP() と \fBfaccessat\fP() は以下の場合に失敗する。
139 要求されたアクセスは そのファイル自身に拒否されたか \fIpathname\fP へ至るまでディレクトリのいずれかに対する検索許可 (search
140 permission) が得られなかった。 (\fBpath_resolution\fP(7) も参照のこと)
143 \fIpathname\fP を解決するときに、解決すべきシンボリックリンクが多すぎた。
146 \fIpathname\fP が長過ぎる。
149 \fIpathname\fP を構成するパスのいずれかが、存在しないか、 参照先のない (dangling) シンボリックリンクになっている。
152 \fIpathname\fP のディレクトリ部分が実際にはディレクトリでない。
155 読み込み専用 (read\-only) のファイルシステムに対して書き込み許可を 要求した。
157 \fBaccess\fP() と \fBfaccessat\fP() は以下の理由により失敗することがある。
160 \fIpathname\fP がアクセス可能なアドレス空間の外を指している。
163 \fImode\fP に不正な値が指定された。
172 実行中のファイルに対して書き込みを要求した。
174 \fBfaccessat\fP() では以下のエラーも発生する。
177 \fIdirfd\fP が適切なファイルディスクリプタでない。
180 \fIflags\fP に無効なフラグが指定された。
183 \fIpathname\fP が相対パスで、 \fIdirfd\fP がディレクトリ以外のファイルを参照しているファイルディスクリプタである。
185 \fBfaccessat\fP() はバージョン 2.6.16 で Linux に追加された。 ライブラリによるサポートは glibc バージョン 2.4
188 \fBaccess\fP(): SVr4, 4.3BSD, POSIX.1\-2001, POSIX.1\-2008.
190 \fBfaccessat\fP(): POSIX.1\-2008.
193 \fB警告\fP: あるユーザが、例えば \fBopen\fP(2) によるアクセスが可能かどうかを、 (実際に行う前に)
194 これらのシステムコールを使ってチェックするのは、セキュリティホールの原因になる。なぜならチェックをしてから
195 実際にファイルのオープン操作をする間の短い間隔を悪用できるからである。 \fBこの理由があるので、このシステムコールを使うのは避けるべきである。\fP
196 (ここで説明した例の場合には、より安全な方法としては、 そのプロセスの実効ユーザ ID を実ユーザ ID に一時的に切り替えてから \fBopen\fP(2)
199 \fBaccess\fP() は常にシンボリックリンクの展開を行う。
200 シンボリックリンクのアクセス許可を確認する必要がある場合は、
201 \fBAT_SYMLINK_NOFOLLOW\fP フラグ付きで \fBfaccessat\fP(2) を使うこと。
203 \fImode\fP で指定されたアクセス種別のいずれか一つでも拒否されると、 たとえ \fImode\fP で指定された他のアクセス種別が許可されたとしても、
206 .\" HPU-UX 11 and Tru64 5.1 do this.
207 POSIX.1\-2001 では、 呼び出し元プロセスが適切な特権を持っている場合 (つまり、スーパーユーザの場合)、
208 たとえファイルの実行許可ビットが全くセットされていなくても \fBX_OK\fP のチェックとして成功を返す実装が認められている。 Linux
211 \fIpathname\fP のプレフィックスを構成するディレクトリの全てに対して 検索アクセス (すなわち、実行アクセス) が許可された場合にのみ、
212 ファイルはアクセス可能となる。 いずれかのディレクトリがアクセス不可の場合、 ファイル自身のアクセス許可に関わらず、 \fBaccess\fP()
215 アクセスビットのみがチェックされ、ファイルの種類や内容はチェックされない。 従って、ディレクトリが書き込み可能となった場合は、ディレクトリに
216 ファイルを作成することが可能なことを意味するのであり、ディレクトリに ファイルとして書き込むことができるわけではない。 同様に DOS
217 のファイルは「実行可能」と判断されるが、 \fBexecve\fP(2) コールは失敗するだろう。
221 これらのシステムコールは、 UID マッピングを使用した NFSv2 ファイルシステムでは正常に機能しないかもしれない。なぜならば UID
222 のマッピングはサーバーで 行なわれ、権利のチェックをするクライアントには見えないからである。 (NFS バージョン 3
223 以降ではサーバー側でチェックが実行される。) 同様の問題は FUSE マウントでも起こり得る。
224 .SS "C ライブラリとカーネル ABI の違い"
225 生の \fBfaccessat\fP() システムコールは、最初の 3 つの引き数だけを取る。フラグ \fBAT_EACCESS\fP と
226 \fBAT_SYMLINK_NOFOLLOW\fP は実際には \fBfaccessat\fP() の glibc
227 のラッパー関数内で実装されている。これらのフラグのいずれかが指定された場合、ラッパー関数は \fBfstatat\fP(2)
230 \fBfaccessat\fP() が利用できない古いカーネルでは、(フラグ \fBAT_EACCESS\fP と \fBAT_SYMLINK_NOFOLLOW\fP
231 が指定されていない場合) glibc ラッパー関数は \fBaccess\fP() を使用するモードにフォールバックする。 \fIpathname\fP
232 が相対パスの場合、 glibc は \fIdirfd\fP 引き数に対応する \fI/proc/self/fd\fP
233 のシンボリックリンクに基づいてパス名を構成する。
235 .\" This behavior appears to have been an implementation accident.
236 バージョン 2.4 (とそれ以前) のカーネルには、スーパーユーザでの \fBX_OK\fP のチェックの扱いに奇妙な点がある。 ディレクトリ以外のファイルで
237 (ユーザ、グループ、他人の) 全てのカテゴリについて 実行許可がない場合、 \fBaccess\fP() のチェックで \-1 が返るのは \fImode\fP に
238 \fBX_OK\fP だけが指定されたときだけであり \fImode\fP に \fBR_OK\fP や \fBW_OK\fP が一緒に指定された場合には
239 \fBaccess\fP() は 0 を返す。 (バージョン 2.6.3 以前の) 初期の 2.6 系のカーネルも 2.4 系のカーネルと同様の動作をする。
241 2.6.20 より前のカーネルでは、 これらのシステムコールはファイルが存在するファイルシステムを \fBmount\fP(2) する際に指定された
242 \fBMS_NOEXEC\fP フラグの効果を無視していた。 カーネル 2.6.20 以降では、 \fBMS_NOEXEC\fP
245 \fBchmod\fP(2), \fBchown\fP(2), \fBopen\fP(2), \fBsetgid\fP(2), \fBsetuid\fP(2),
246 \fBstat\fP(2), \fBeuidaccess\fP(3), \fBcredentials\fP(7), \fBpath_resolution\fP(7),
249 この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.76 の一部
250 である。プロジェクトの説明とバグ報告に関する情報は
251 http://www.kernel.org/doc/man\-pages/ に書かれている。