lchmod(2) FreeBSD 一般コマンドマニュアル

lchmod

前のページ 上に戻る 次のページ

lchmod




書式

     #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 _POSIX_SOURCE
           #define S_ISTXT 0001000
           #endif

     FreeBSD VM システムは、実行可能モジュールについてスティッキービット
     (ISVTX) を完全に無視します。 UFS をベースとしたファイルシステム (FFS,
     MFS, LFS) では、スティッキービットはディレクトリにだけ設定できます。


     この機能は、ftp、SAMBA または netatalk 経由の PC ユーザへのファイルサービ
     スで使用されるよう設計されています。これはシェルユーザにセキュリティホー
     ルを提供するので、シェルマシン上で使用してはなりません。特に、ホームディ
     レクトリでは使用してはなりません。このオプションが機能するためには、カー
     ネル内に SUIDDIR オプションが必要です。 UFS ファイルシステムだけがこのオ
     プションをサポートします。 suiddir マウントオプションの詳細については、
     mount(8) を参照してください。

     スーパユーザ以外のユーザによる、ファイルの書込みまたはファイルの所有者の
     変更によって set-user-id ビットと set-group-id ビットはオフに切り替えられ
     ます。互換性は犠牲になりますが、 set-user-id (set-group-id) ビットを残し
     たままファイルが変更されるのを防ぐことで、システムはいくらか安全になりま
     す。


戻り値

     成功して終了したときには値 0 を返します。そうでない場合、値 -1 が返され、
     グローバル変数 errno が設定されてエラーを示します。


エラー

     chmod() は次の場合に処理に失敗しファイルモードは変更されません。

     [ENOTDIR]          パスの構成要素中にディレクトリ以外のものが含まれていま
                        す。

     [ENAMETOOLONG]     パス名の構成要素が 255 文字を越えているか、またはパス
                        名全体が 1023 文字を越えています。

     [ENOENT]           指定されたファイルが存在しません。

     [EACCES]           指定されたパスには、検索が許可されていないディレクトリ
                        が含まれています。

     [ELOOP]            パス名を変換するときに検出されたシンボリックリンクが多
                        すぎます。

     [EPERM]            実効ユーザ ID がファイルの所有者と一致せず、実効ユーザ
                        ID がスーパユーザではありません。

     [EROFS]            指定されたファイルは読取り専用ファイルシステム上にあり
                        ます。

     [EFAULT]           path は、プロセスに割り当てられたアドレス空間の範囲外
                        を指しています。

     [EIO]              ファイルシステムに読み書きしている間に入出力エラーが発
                        生しました。

     [EFTYPE]           実行可能モジュール上でスティッキービットを設定しようと
                        しました。

     fchmod() は次の場合に処理を失敗します。


規格

     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 4.4                      June 4, 1993                      FreeBSD 4.4

ABELNET VPSサービス