CHMOD(2) FreeBSD システムコールマニュアル CHMOD(2)
名称
chmod, fchmod, lchmod − ファイルのモードを変更する |
ライブラリ
標準 C ライブラリ (libc, −lc) |
書式
#include <sys/stat.h> int |
chmod(const char *path, mode_t mode); int |
fchmod(int fd, mode_t mode); int |
lchmod(const char *path, mode_t mode); |
解説 |
path で指定されるか、またはファイル記述子 fd で参照されるファイルのファイ ル許可ビットを mode に変更します。 chmod() システムコールは、プロセス所有 者 (ユーザ) が path (または fd) で指定されたファイルを所有するか、または スーパユーザであるかのどちらかであることを確認します。 chmod() システム コールは、シンボリックリンクをたどり、リンク自体ではなくリンクのターゲッ トに作用します。 lchmod() システムコールは chmod() に類似していますが、シンボリックリンク をたどりません。 モードは <sys/stat.h> で定義された許可ビットマスクの論理和 (or) から作成 されます: #define S_IRWXU 0000700 /* 所有者用の RWX マスク */ #define S_IRUSR 0000400 /* 所有者用の R */ #define S_IWUSR 0000200 /* 所有者用の W */ #define S_IXUSR 0000100 /* 所有者用の X */ #define S_IRWXG 0000070 /* グループ用の RWX マスク */ #define S_IRGRP 0000040 /* グループ用の R */ #define S_IWGRP 0000020 /* グループ用の W */ #define S_IXGRP 0000010 /* グループ用の X */ #define S_IRWXO 0000007 /* その他用の RWX マスク */ #define S_IROTH 0000004 /* その他用の R */ #define S_IWOTH 0000002 /* その他用の W */ #define S_IXOTH 0000001 /* その他用の X */ #define S_ISUID 0004000 /* 実行時にユーザ ID を設定 */ #define S_ISGID 0002000 /* 実行時にグループ ID を設定 */ #define S_ISVTX 0001000 /* スティッキビット */ #ifndef __BSD_VISIBLE #define S_ISTXT 0001000 /* スティッキビット */ #endif FreeBSD VM システムは、実行可能モジュールについてスティッキビット (ISTXT) を完全に無視します。 UFS をベースとしたファイルシステム (FFS, LFS) では、 スティッキビットはディレクトリにだけ設定できます。 ISTXT (‘スティッキビット’) が設定されているディレクトリでは、特権のない ユーザは、そのディレクトリ内にある他ユーザのファイルの削除、名前の変更が できません。どのユーザでも、そのユーザが所有するか適切な許可のあるディレ クトリについてスティッキビットを設定できます。スティッキビットの性質の詳 細については、 sticky(8) を参照してください。 あるディレクトリに ISUID (ユーザ ID 設定ビット) が設定されており、かつ ファイルシステムをマウントする際に MNT_SUIDDIR オプションが指定されていた 場合、このディレクトリ内に作成される新しいファイルとサブディレクトリの所 有者は、ディレクトリの所有者に設定されます。この機能が有効であるとき、新 しいディレクトリは親から ISUID ビットを継承します。実行ビットはファイルか ら取り除かれ、ファイルは root の所有とはなりません。この機能は、ファイル への書込みがユーザに許可される条件を変更しません。ファイルが作成された後 の最終的な所有者の決定に影響するのみです。グループは継承されません。 この機能は、ftp、SAMBA または netatalk 経由の PC ユーザへのファイルサービ スで使用されるよう設計されています。これはシェルユーザにセキュリティホー ルを提供するので、特に、ホームディレクトリでは使用してはなりません。この オプションが機能するためには、カーネル内に SUIDDIR オプションが必要です。 UFS ファイルシステムだけがこのオプションをサポートします。 suiddir マウン トオプションの詳細については、 mount(8) を参照してください。 スーパユーザ以外のユーザによる、ファイルの書込みまたはファイルの所有者の 変更によってユーザ ID 設定ビットとグループ ID 設定ビットはオフに切り替え られます。互換性は犠牲になりますが、ユーザ ID 設定 (グループ ID 設定) ビットを残したままファイルが変更されるのを防ぐことで、システムはいくらか 安全になります。 |
戻り値
成功して終了したときには値 0 を返します。そうでない場合、値 -1 が返され、 グローバル変数 errno が設定されてエラーを示します。 |
エラー
chmod() システムコールは、次の場合に処理に失敗しファイルモードは変更され ません: |
[ENOTDIR]
パスの構成要素中にディレクトリ以外のものが含まれていま す。 [ENAMETOOLONG] [ENOENT] [EACCES] [ELOOP] [EPERM] [EROFS] [EFAULT] [EIO] [EFTYPE] fchmod() システムコールは、次の場合に処理を失敗します: [EBADF] [EINVAL] [EROFS] [EIO] 関連項目 |
規格
chmod() システムコールは EFTYPE が返されることと S_ISTXT の使用法を除けば ISO/IEC 9945-1:1990 (‘‘POSIX.1’’) に適合しています。 |
歴史
chmod() システムコールは Version 7 AT&T UNIX で登場しました。 fchmod() シ ステムコールは 4.2BSD で登場しました。 lchmod() システムコールは FreeBSD 3.0 で登場しました。 FreeBSD 10.0 December 29, 2004 FreeBSD 10.0 |