OSDN Git Service

58a45c43c28e62fa907231ea6120cf653bd66424
[linuxjm/LDP_man-pages.git] / release / man2 / access.2
1 .\" Hey Emacs! This file is -*- nroff -*- source.
2 .\"
3 .\" This manpage is Copyright (C) 1992 Drew Eckhardt;
4 .\"                               1993 Michael Haardt, Ian Jackson.
5 .\" and Copyright (C) 2007 Michael Kerrisk <mtk.manpages@gmail.com>
6 .\"
7 .\" Permission is granted to make and distribute verbatim copies of this
8 .\" manual provided the copyright notice and this permission notice are
9 .\" preserved on all copies.
10 .\"
11 .\" Permission is granted to copy and distribute modified versions of this
12 .\" manual under the conditions for verbatim copying, provided that the
13 .\" entire resulting derived work is distributed under the terms of a
14 .\" permission notice identical to this one.
15 .\"
16 .\" Since the Linux kernel and libraries are constantly changing, this
17 .\" manual page may be incorrect or out-of-date.  The author(s) assume no
18 .\" responsibility for errors or omissions, or for damages resulting from
19 .\" the use of the information contained herein.  The author(s) may not
20 .\" have taken the same level of care in the production of this manual,
21 .\" which is licensed free of charge, as they might when working
22 .\" professionally.
23 .\"
24 .\" Formatted or processed versions of this manual, if unaccompanied by
25 .\" the source, must acknowledge the copyright and authors of this work.
26 .\"
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.
42 .\"
43 .\" Japanese Version Copyright (c) 1997-1998 HANATAKA Shinya
44 .\"         all rights reserved.
45 .\" Translated 1997-12-17, HANATAKA Shinya <hanataka@abyss.rim.or.jp>
46 .\" Modified 1998-05-11, HANATAKA Shinya <hanataka@abyss.rim.or.jp>
47 .\" Updated 2001-12-14, Kentaro Shirakata <argrath@ub32.org>
48 .\" Updated 2002-06-17, Kentaro Shirakata <argrath@ub32.org>
49 .\" Updated 2005-02-23, Akihiro MOTOKI <amotoki@dd.iij4u.or.jp>
50 .\" Updated 2007-05-01, Akihiro MOTOKI, LDP v2.46
51 .\" Updated 2007-09-04, Akihiro MOTOKI, LDP v2.64
52 .\"
53 .\"WORD:        permission              アクセス権
54 .\"WORD:        privileges              権限
55 .\"WORD:        user                    ユーザー
56 .\"WORD:        file system             ファイル・システム
57 .\"WORD:        object                  オブジェクト
58 .\"WORD:        symbolic link           シンボリック・リンク
59 .\"WORD:        refer                   参照する
60 .\"WORD:        mask                    マスク
61 .\"WORD:        path                    パス
62 .\"WORD:        effective user-ID       実効ユーザーID
63 .\"WORD:        real user-ID            実ユーザーID
64 .\"WORD:        uid                     ユーザー ID
65 .\"WORD:        gid                     グループ ID
66 .\"WORD:        directory               ディレクトリ
67 .\"WORD:        call                    コール
68 .\"WORD:        kernel                  カーネル
69 .\"WORD:        memory                  メモリ
70 .\"WORD:        dangling                参照先のない
71 .\"
72 .TH ACCESS 2 2007-07-10 "Linux" "Linux Programmer's Manual"
73 .SH 名前
74 access \- ファイルに対する実ユーザーでのアクセス権をチェックする
75 .SH 書式
76 .nf
77 .B #include <unistd.h>
78 .sp
79 .BI "int access(const char *" pathname ", int " mode );
80 .fi
81 .SH 説明
82 .BR access ()
83 は、呼び出し元プロセスがファイル
84 .I pathname
85 にアクセスできるかどうかをチェックする。
86 .I pathname
87 がシンボリック・リンクの場合、シンボリック・リンクは展開される。
88
89 .\" F_OK is defined as 0 on every system that I know of.
90 .I mode
91 はチェックを行うアクセス権を指定するもので、その値は
92 .BR F_OK 、
93 .\" 私が知っているすべてのシステムで F_OK は 0 に定義されている。
94 もしくは
95 .BR R_OK ", " W_OK ", " X_OK
96 の 1個以上のビット単位の論理和から構成されるマスクである。
97 .B F_OK
98 はファイルが存在するかどうかのみを検査する。
99 .BR R_OK ", " W_OK ", " X_OK
100 は、ファイルが存在して、それぞれ読み込み、書き込み、実行の許可があるか
101 を検査する。
102
103 チェックは、実際に操作が行われる際に使用される実効 (effective) ID でなく、
104 呼び出し元プロセスの
105 .I "実 (real)"
106 UID と
107 .I "実 (real)"
108 GID を使って行われる。
109 これにより、set-user-ID プログラムで、プログラムを起動するユーザの権限を
110 簡単に決定することができる。
111
112 呼び出し元プロセスが特権プロセス (つまり、プロセスの実 UID が 0) の場合、
113 通常のファイルに対する
114 .B X_OK
115 のチェックは、そのファイルの所有者、グループ、他人のいずれかの
116 実行許可が有効になっていれば成功する。
117 .SH 返り値
118 成功した場合(全ての要求された許可が得られたら)、ゼロが返される。
119 エラーの場合 (少なくとも一つの
120 .I mode
121 で要求された許可がなかった場合や、他のエラーが起きた場合)、
122 \-1 が返され、
123 .I errno
124 が適切に設定される。
125 .SH エラー
126 .BR access ()
127 は以下の場合に失敗する。
128 .TP
129 .B EACCES
130 要求されたアクセスは
131 そのファイル自身に拒否されたか
132 .I pathname
133 へ至るまでディレクトリのいずれかに対する検索許可
134 (search permission) が得られなかった。
135 .RB ( path_resolution (7)
136 も参照のこと)
137 .TP
138 .B ELOOP
139 .I pathname
140 を解決する際に遭遇したシンボリック・リンクが多過ぎる。
141 .TP
142 .B ENAMETOOLONG
143 .I pathname
144 が長過ぎる。
145 .TP
146 .B ENOENT
147 .I pathname
148 を構成するパスのいずれかが、存在しないか、
149 参照先のない (dangling) シンボリックリンクになっている。
150 .TP
151 .B ENOTDIR
152 .I pathname
153 のディレクトリ部分が、実際にはディレクトリでない。
154 .TP
155 .B EROFS
156 読み込み専用 (read-only) のファイル・システムに対して書き込み許可を
157 要求した。
158 .PP
159 .BR access ()
160 は以下の理由により失敗することがある。
161 .TP
162 .B EFAULT
163 .I pathname
164 がアクセス可能なアドレス空間の外を指している。
165 .TP
166 .B EINVAL
167 .I mode
168 に不正な値が指定された。
169 .TP
170 .B EIO
171 I/O エラーが発生した。
172 .TP
173 .B ENOMEM
174 カーネルに十分なメモリがない。
175 .TP
176 .B ETXTBSY
177 実行中のファイルに対して書き込みを要求した。
178 .SH 準拠
179 SVr4, 4.3BSD, POSIX.1-2001.
180 .SH 注意
181 .PP
182 .BR 警告 :
183 あるユーザが、例えば
184 .BR open (2)
185 によるアクセスが可能かどうかを、(実際に行う前に)
186 .BR access ()
187 を使ってチェックするのは、セキュリティホールの原因になる。
188 なぜならチェックをしてから
189 実際にファイルのオープン操作をする間の短い間隔を悪用できるからである。
190 .BR この理由があるので、このシステムコールを使うのは避けるべきである。
191 .PP
192 .I mode
193 で指定されたアクセス種別のいずれか一つでも拒否されると、
194 たとえ
195 .I mode
196 で指定された他のアクセス種別が許可されたとしても、
197 .BR access ()
198 はエラーを返す。
199 .PP
200 POSIX.1-2001 では、
201 呼び出し元プロセスが適切な特権を持っている場合
202 (つまり、スーパーユーザの場合)、
203 たとえファイルの実行許可ビットが全くセットされていなくても
204 .B X_OK
205 のチェックとして成功を返す実装が認められている。
206 .\" HPU-UX 11 と Tru64 5.1 はこのようになっている。
207 Linux はこのようにはなっていない。
208 .PP
209 .I pathname
210 のプレフィックスを構成するディレクトリの全てに対して
211 検索アクセス (すなわち、実行アクセス) が許可された場合にのみ、
212 ファイルはアクセス可能となる。
213 いずれかのディレクトリがアクセス不可の場合、
214 ファイル自身のアクセス許可に関わらず、
215 .BR access ()
216 は失敗する。
217 .PP
218 アクセス・ビットのみがチェックされ、ファイルの種類や内容はチェックされない。
219 従って、ディレクトリが書き込み可能となった場合は、ディレクトリに
220 ファイルを作成することが可能なことを意味するのであり、ディレクトリに
221 ファイルとして書き込むことができるわけではない。
222 同様に DOS のファイルは「実行可能」と判断されるが、
223 .BR execve (2)
224 コールは失敗するだろう。
225 .PP
226 .BR access ()
227 は、 UID マッピングを使用した NFS ファイル・システムでは正常に
228 機能しないかもしれない。なぜならば UID のマッピングはサーバーで
229 行なわれ、権利のチェックをするクライアントには見えないからである。
230 .SH バグ
231 バージョン 2.4 (とそれ以前) のカーネルには、スーパーユーザでの
232 .B X_OK
233 のチェックの扱いに奇妙な点がある。
234 ディレクトリ以外のファイルで
235 (ユーザ、グループ、他人の) 全てのカテゴリについて
236 実行許可がない場合、
237 .BR access ()
238 のチェックで \-1 が返るのは
239 .I mode
240
241 .B X_OK
242 だけが指定されたときだけであり
243 .I mode
244
245 .B R_OK
246
247 .B W_OK
248 が一緒に指定された場合には
249 .BR access ()
250 は 0 を返す。
251 .\" この挙動は実装時の事故だったようである。
252 (バージョン 2.6.3 以前の) 初期の 2.6 系のカーネルも
253 2.4 系のカーネルと同様の動作をする。
254
255 2.6.20 より前のカーネルでは、
256 ファイルが存在するファイルシステムを
257 .BR mount (2)
258 する際に指定された
259 .B MS_NOEXEC
260 フラグの効果を、
261 .BR access ()
262 は無視していた。
263 カーネル 2.6.20 以降では、
264 .BR access ()
265 はこのフラグを考慮するようになっている。
266 .SH 関連項目
267 .BR chmod (2),
268 .BR chown (2),
269 .BR faccessat (2),
270 .BR open (2),
271 .BR setgid (2),
272 .BR setuid (2),
273 .BR stat (2),
274 .BR eauidaccess (3),
275 .BR credentials (7),
276 .BR path_resolution (7)