CHMOD
Section: Linux Programmer's Manual (2)
Updated: 2008-05-26
Index
JM Home Page
roff page
名前
chmod, fchmod - ファイルのモードを変更する
書式
#include <sys/stat.h>
int chmod(const char *path, mode_t mode);
int fchmod(int fd, mode_t mode);
glibc 向けの機能検査マクロの要件
(feature_test_macros(7)
参照):
fchmod():
_BSD_SOURCE || _XOPEN_SOURCE >= 500
説明
これらのシステムコールはファイルのアクセス許可 (permission) を変更する。
システムコール間の違いは、ファイルの指定の仕方だけである。
- *
-
chmod()
は、
path
で指定されたパス名を持つファイルの許可を変更する。
path
がシンボリック・リンクの場合は、リンクの展開が行われる。
- *
-
fchmod()
は、オープンされたファイルディスクリプタ
fd
により参照されるファイルの許可を変更する。
新しいファイル許可は
mode
で指定される。
mode
は、以下に示す値の 0 個以上の OR (論理和) をとって作成される
ビットマスクである。
- S_ISUID (04000)
-
set-user-ID
(execve(2)
時にプロセスの実効ユーザ ID にセットされる)
- S_ISGID (02000)
-
set-group-ID
(以下の場合に
(execve(2)
実行時にプロセスの実効グループ ID にセットされる、
強制ロック (mandatory locking) を行う
(fcntl(2)
の説明を参照)、
新しいファイルのグループとして親ディレクトリと同じものを使う
(chown(2)
と
(mkdir(2)
の説明を参照)
- S_ISVTX (01000)
-
スティッキー・ビット (sticky bit) (削除制限フラグ、
unlink(2)
の説明を参照)
- S_IRUSR (00400)
-
所有者による読み取り
- S_IWUSR (00200)
-
所有者による書き込み
- S_IXUSR (00100)
-
所有者による実行 (execute) / 検索 (search)
(「検索」はディレクトリに対して適用されるもので、
そのディレクトリ内のエントリーへアクセスできるかを意味する)
- S_IRGRP (00040)
-
グループによる読み取り
- S_IWGRP (00020)
-
グループによる書き込み
- S_IXGRP (00010)
-
グループによる実行 / 検索
- S_IROTH (00004)
-
他人 (others) による読み取り
- S_IWOTH (00002)
-
他人による書き込み
- S_IXOTH (00001)
-
他人による実行 / 検索
呼び出したプロセスの実効 (effective) UID がファイルの所有者と一致するか、
そのプロセスが特権を持たなければならない
(Linux では
CAP_FOWNER
ケーパビリティ (capability) を持たなければならない)。
呼び出したプロセスに特権がなく (Linux では
CAP_FSETID
ケーパビリティがなく)、かつファイルのグループ ID が
プロセスの実効グループ ID または補助的なグループ ID にマッチしない場合、
S_ISGID
ビットはオフにされるが、これによってエラーが返されることはない。
安全のための処置として、
ファイル・システムによっては、ファイルの書き込みを行う時に
セット・ユーザー ID とセット・グループ ID ビットと実行ビットが
オフにされることがある。
(Linux では、書き込みプロセスが
CAP_FSETID
ケーパビリティを持っていない場合に、これが起こる。)
ファイル・システムの中には、スーパー・ユーザーだけが
特別の意味を持つスティッキー・ビットを設定できるものがある。
スティッキー・ビットとディレクトリに対する
セット・ユーザー (グループ)・ID ビットについては、
stat(2)
を見よ。
NFS ファイルシステム上では、パーミッションを制限すると、
既にオープンされているファイルに対してすぐに影響が及ぶ。
これはアクセス制御がサーバー上で行われているが、
オープンされているファイルはクライアント側で管理されているためである。
クライアント側でファイル属性のキャッシュが有効になっている場合に、
パーミッションの制限を緩くすると、
他のクライアントに情報が伝わるのが遅れるかもしれない。
返り値
成功すると、0 を返す。失敗すると、-1を返し、
errno
に適切な値を設定する。
エラー
ファイル・システムによっては他のエラーを返す場合がある。
chmod()
で一般的なエラーを以下に挙げる。
- EACCES
-
パス名の構成要素に検索許可がない
(path_resolution(7)
も見よ)。
- EFAULT
-
path
が割り当てられたアドレス空間外を指している。
- EIO
-
I/O エラーが発生した。
- ELOOP
-
path
を解決する際に遭遇したシンボリック・リンクが多過ぎる。
- ENAMETOOLONG
-
path
が長過ぎる。
- ENOENT
-
ファイルが存在しない。
- ENOMEM
-
カーネルに十分なメモリがない。
- ENOTDIR
-
パス名の構成要素がディレクトリではない。
- EPERM
-
実効 UID がファイルの所有者と一致せず、プロセスに特権がない
(Linux では
CAP_FOWNER
ケーパビリティを持たない)。
- EROFS
-
ファイルが読み込み専用 (read only) のファイル・システム上にある。
fchmod()
で一般的なエラーを挙げる:
- EBADF
-
ファイル・ディスクリプター
fd
が有効でない。
- EIO
-
上記を参照。
- EPERM
-
上記を参照。
- EROFS
-
上記を参照。
準拠
4.4BSD, SVr4, POSIX.1-2001.
関連項目
chown(2),
execve(2),
fchmodat(2),
open(2),
stat(2),
path_resolution(7)
Index
- 名前
-
- 書式
-
- 説明
-
- 返り値
-
- エラー
-
- 準拠
-
- 関連項目
-
This document was created by
man2html,
using the manual pages.
Time: 03:26:38 GMT, April 25, 2010