名前
chmod, fchmod - ファイルのモードを変更する
書式
#include <sys/types.h> #include <sys/stat.h>
int chmod(const char *path, mode_t mode); int fchmod(int fildes, mode_t mode);
説明
path で与えられたファイル、 または fildes で参照されるファイルのモードを変更する。
モードは、次の各モードの or をとったもので指定する:
S_ISUID | 04000 実行時のセット・ユーザー・ID (set user ID) |
S_ISGID | 02000 実行時のセット・グループ・ID (set group ID) |
S_ISVTX | 01000 スティッキー (sticky) ビット |
S_IRUSR | 00400 所有者 (owner) による読み取り (read) |
S_IWUSR | 00200 所有者による書き込み (write) |
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 | ファイル・ディスクリプター fildes が有効でない。 |
EIO | 上記を参照。 |
EPERM | 上記を参照。 |
EROFS | 上記を参照。 |
準拠
4.4BSD, SVr4, POSIX.1-2001.
関連項目
chown(2), execve(2), fchmodat(2), open(2), stat(2), path_resolution(7)