.\" Copyright (c) 1980, 1991, 1993 .\" The Regents of the University of California. All rights reserved. .\" .\" Redistribution and use in source and binary forms, with or without .\" modification, are permitted provided that the following conditions .\" are met: .\" 1. Redistributions of source code must retain the above copyright .\" notice, this list of conditions and the following disclaimer. .\" 2. Redistributions in binary form must reproduce the above copyright .\" notice, this list of conditions and the following disclaimer in the .\" documentation and/or other materials provided with the distribution. .\" 3. All advertising materials mentioning features or use of this software .\" must display the following acknowledgement: .\" This product includes software developed by the University of .\" California, Berkeley and its contributors. .\" 4. Neither the name of the University nor the names of its contributors .\" may be used to endorse or promote products derived from this software .\" without specific prior written permission. .\" .\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE .\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" .\" @(#)chmod.2 8.1 (Berkeley) 6/4/93 .\" %FreeBSD: src/lib/libc/sys/chmod.2,v 1.31.2.1 2005/01/05 19:20:57 trhodes Exp % .\" .\" $FreeBSD$ .Dd December 29, 2004 .Dt CHMOD 2 .Os .Sh 名称 .Nm chmod , .Nm fchmod , .Nm lchmod .Nd ファイルのモードを変更する .Sh ライブラリ .Lb libc .Sh 書式 .In sys/stat.h .Ft int .Fn chmod "const char *path" "mode_t mode" .Ft int .Fn fchmod "int fd" "mode_t mode" .Ft int .Fn lchmod "const char *path" "mode_t mode" .Sh 解説 .Fa path で指定されるか、またはファイル記述子 .Fa fd で参照されるファイルの ファイル許可ビットを .Fa mode に変更します。 .Fn chmod システムコールは、プロセス所有者 (ユーザ) が .Fa path (または .Fa fd ) で指定されたファイルを所有するか、またはスーパユーザで あるかのどちらかであることを確認します。 .Fn chmod システムコールは、シンボリックリンクをたどり、 リンク自体ではなくリンクのターゲットに作用します。 .Pp .Fn lchmod システムコールは .Fn chmod に類似していますが、シンボリックリンクをたどりません。 .Pp モードは .In sys/stat.h で定義された許可ビットマスクの論理和 .Pf ( Em or ) から作成されます: .Pp .Bd -literal -offset indent -compact #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 .Ed .Pp .Fx VM システムは、実行可能モジュールについてスティッキビット .Pq Dv ISTXT を完全に無視します。 UFS をベースとしたファイルシステム (FFS, LFS) では、 スティッキビットはディレクトリにだけ設定できます。 .Pp .Dv ISTXT (`スティッキビット') が設定されているディレクトリでは、 特権のないユーザは、そのディレクトリ内にある他ユーザのファイルの削除、 名前の変更ができません。 どのユーザでも、そのユーザが所有するか適切な許可のあるディレクトリについて スティッキビットを設定できます。 スティッキビットの性質の詳細については、 .Xr sticky 8 を参照してください。 .Pp あるディレクトリに ISUID (ユーザ ID 設定ビット) が設定されており、 かつファイルシステムをマウントする際に MNT_SUIDDIR オプションが 指定されていた場合、 このディレクトリ内に作成される新しいファイルとサブディレクトリの所有者は、 ディレクトリの所有者に設定されます。 この機能が有効であるとき、新しいディレクトリは親から ISUID ビットを継承します。 実行ビットはファイルから取り除かれ、ファイルは root の所有とはなりません。 この機能は、ファイルへの書込みがユーザに許可される条件を変更しません。 ファイルが作成された後の最終的な所有者の決定に影響するのみです。 グループは継承されません。 .Pp この機能は、ftp、SAMBA または netatalk 経由の PC ユーザへの ファイルサービスで使用されるよう設計されています。 これはシェルユーザにセキュリティホールを提供するので、 特に、ホームディレクトリでは使用してはなりません。 このオプションが機能するためには、 カーネル内に SUIDDIR オプションが必要です。 UFS ファイルシステムだけがこのオプションをサポートします。 suiddir マウントオプションの詳細については、 .Xr mount 8 を参照してください。 .Pp スーパユーザ以外のユーザによる、 ファイルの書込みまたはファイルの所有者の変更によってユーザ ID 設定ビットと グループ ID 設定ビットはオフに切り替えられます。 互換性は犠牲になりますが、 ユーザ ID 設定 (グループ ID 設定) ビットを残したまま ファイルが変更されるのを防ぐことで、 システムはいくらか安全になります。 .Sh 戻り値 .Rv -std .Sh エラー .Fn chmod システムコールは、次の場合に処理に失敗しファイルモードは変更されません: .Bl -tag -width Er .It Bq Er ENOTDIR パスの構成要素中にディレクトリ以外のものが含まれています。 .It Bq Er ENAMETOOLONG パス名の構成要素が 255 文字を越えているか、 またはパス名全体が 1023 文字を越えています。 .It Bq Er ENOENT 指定されたファイルが存在しません。 .It Bq Er EACCES 指定されたパスには、検索が許可されていないディレクトリが含まれています。 .It Bq Er ELOOP パス名を変換するときに検出されたシンボリックリンクが多すぎます。 .It Bq Er EPERM 実効ユーザ ID がファイルの所有者と一致せず、 実効ユーザ ID がスーパユーザではありません。 .It Bq Er EROFS 指定されたファイルは読取り専用ファイルシステム上にあります。 .It Bq Er EFAULT .Fa path 引数が、プロセスに割り当てられたアドレス空間の範囲外を指しています。 .It Bq Er EIO ファイルシステムに読み書きしている間に入出力エラーが発生しました。 .It Bq Er EFTYPE 実行可能モジュール上でスティッキビットを設定しようとしました。 .El .Pp .Fn fchmod システムコールは、次の場合に処理を失敗します: .Bl -tag -width Er .It Bq Er EBADF 記述子が有効ではありません。 .It Bq Er EINVAL .Fa fd 引数がファイルではなくソケットを参照しています。 .It Bq Er EROFS ファイルが読取り専用のファイルシステム上に置かれています。 .It Bq Er EIO ファイルシステムに読み書きしている間に入出力エラーが発生しました。 .El .Sh 関連項目 .Xr chmod 1 , .Xr chown 2 , .Xr open 2 , .Xr stat 2 , .Xr sticky 8 .Sh 規格 .Fn chmod システムコールは .Er EFTYPE が返されることと .Dv S_ISTXT の使用法を除けば .St -p1003.1-90 に適合しています。 .Sh 歴史 .Fn chmod システムコールは .At v7 で登場しました。 .Fn fchmod システムコールは .Bx 4.2 で登場しました。 .Fn lchmod システムコールは .Fx 3.0 で登場しました。