Man page - chmod(2)

Packages contains this manual

Available languages:

en fr pl nl ja ru de

Manual

CHMOD

名 前
書 式
説 明
fchmodat()
返 り 値
エ ラ ー
バ ー ジ ョ ン
準 拠
注 意
C ラ イ ブ ラ リ と カ ー ネ ル の 違 い
glibc で の 注 意
関 連 項 目
こ の 文 書 に つ い て

名 前

chmod, fchmod, fchmodat - フ ァ イ ル の モ ー ド を 変 更 す る

書 式

#include <sys/stat.h>

int chmod(const char * pathname , mode_t mode );
int fchmod(int
fd , mode_t mode );

#include <fcntl.h> /* AT_* 定 数 の 定 義 */
#include <sys/stat.h>

int fchmodat(int dirfd , const char * pathname , mode_t mode , int flags );

glibc 向 け の 機 能 検 査 マ ク ロ の 要 件 ( feature_test_macros (7) 参 照 ):

fchmod ():

glibc 2.24 以 降 :
_POSIX_C_SOURCE >= 199309L
glibc 2.19 か ら 2.23 ま で
_POSIX_C_SOURCE
glibc 2.16 か ら 2.19 ま で :
_BSD_SOURCE || _POSIX_C_SOURCE
glibc 2.12 か ら 2.16 ま で :
_BSD_SOURCE || _XOPEN_SOURCE >= 500 ||
_POSIX_C_SOURCE >= 200809L
glibc 2.11 以 前 :
_BSD_SOURCE || _XOPEN_SOURCE >= 500

fchmodat ():

glibc 2.10 以 降 :

_POSIX_C_SOURCE >= 200809L

glibc 2.10 よ り 前 :

_ATFILE_SOURCE

説 明

The chmod () and fchmod () system calls change a files mode bits. (The file mode consists of the file permission bits plus the set-user-ID, set-group-ID, and sticky bits.) These system calls differ only in how the file is specified:

*

chmod () は 、 pathname で 指 定 さ れ た パ ス 名 を 持 つ フ ァ イ ル の モ ー ド を 変 更 す る 。 pathname が シ ン ボ リ ッ ク リ ン ク の 場 合 は 、 リ ン ク の 展 開 が 行 わ れ る 。

*

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 ビ ッ ト は オ フ に さ れ る が 、 こ れ に よ っ て エ ラ ー が 返 さ れ る こ と は な い 。

安 全 の た め の 処 置 と し て 、 フ ァ イ ル シ ス テ ム に よ っ て は 、 フ ァ イ ル の 書 き 込 み を 行 う 時 に set-user-ID と set-group-ID ビ ッ ト と 実 行 ビ ッ ト が オ フ に さ れ る こ と が あ る 。 (Linux で は 、 書 き 込 み プ ロ セ ス が CAP_FSETID ケ ー パ ビ リ テ ィ を 持 っ て い な い 場 合 に 、 こ れ が 起 こ る 。 ) フ ァ イ ル シ ス テ ム の 中 に は 、 ス ー パ ー ユ ー ザ ー だ け が 特 別 の 意 味 を 持 つ ス テ ィ ッ キ ー ビ ッ ト を 設 定 で き る も の が あ る 。 ス テ ィ ッ キ ー ビ ッ ト と デ ィ レ ク ト リ に 対 す る set-user-ID (set-group-ID) ビ ッ ト に つ い て は 、 inode (7) を 見 よ 。

NFS フ ァ イ ル シ ス テ ム 上 で は 、 パ ー ミ ッ シ ョ ン を 制 限 す る と 、 既 に オ ー プ ン さ れ て い る フ ァ イ ル に 対 し て す ぐ に 影 響 が 及 ぶ 。 こ れ は ア ク セ ス 制 御 が サ ー バ ー 上 で 行 わ れ て い る が 、 オ ー プ ン さ れ て い る フ ァ イ ル は ク ラ イ ア ン ト 側 で 管 理 さ れ て い る た め で あ る 。 ク ラ イ ア ン ト 側 で フ ァ イ ル 属 性 の キ ャ ッ シ ュ が 有 効 に な っ て い る 場 合 に 、 パ ー ミ ッ シ ョ ン の 制 限 を 緩 く す る と 、 他 の ク ラ イ ア ン ト に 情 報 が 伝 わ る の が 遅 れ る か も し れ な い 。

fchmodat()

fchmodat () シ ス テ ム コ ー ル は chmod () と 全 く 同 様 に 動 作 す る が 、 以 下 で 説 明 す る 点 が 異 な る 。

pathname で 指 定 さ れ た パ ス 名 が 相 対 パ ス の 場 合 、 こ の パ ス 名 は フ ァ イ ル デ ィ ス ク リ プ タ ー dirfd が 参 照 す る デ ィ レ ク ト リ に 対 す る 相 対 パ ス と 解 釈 さ れ る ( chmod () に 相 対 パ ス 名 を 渡 し た 場 合 の よ う に 、 呼 び 出 し た プ ロ セ ス の カ レ ン ト ワ ー キ ン グ デ ィ レ ク ト リ に 対 す る 相 対 パ ス で は な い )。

pathname で 指 定 さ れ た パ ス 名 が 相 対 パ ス で 、 dirfd が 特 別 な 値 AT_FDCWD の 場 合 、 ( chmod () と 同 様 に ) pathname は 呼 び 出 し た プ ロ セ ス の カ レ ン ト ワ ー キ ン グ デ ィ レ ク ト リ に 対 す る 相 対 パ ス と 解 釈 さ れ る 。

pathname で 指 定 さ れ た パ ス 名 が 絶 対 パ ス の 場 合 、 dirfd は 無 視 さ れ る 。

flags に は 0 か 、 以 下 の フ ラ グ を 指 定 す る こ と が で き る 。
AT_SYMLINK_NOFOLLOW

pathname が シ ン ボ リ ッ ク リ ン ク の 場 合 、 リ ン ク の 展 開 を 行 わ な い 。 代 わ り に 、 リ ン ク 自 身 に 対 し て 操 作 を 行 う 。 こ の フ ラ グ は 現 在 の と こ ろ 実 装 さ れ て い な い 。

fchmodat () の 必 要 性 に つ い て の 説 明 に つ い て は openat (2) を 参 照 。

返 り 値

成 功 し た 場 合 は 0 が 返 さ れ る 。 エ ラ ー の 場 合 は -1 が 返 さ れ 、 errno が 適 切 に 設 定 さ れ る 。

エ ラ ー

フ ァ イ ル シ ス テ ム に よ っ て は 、 下 記 の 一 覧 に な い 他 の エ ラ ー が 返 さ れ る こ と も あ る 。

chmod () の ご く 一 般 的 な エ ラ ー を 挙 げ る :

EACCES

パ ス 名 の 構 成 要 素 に 検 索 許 可 が な い ( path_resolution (7) も 見 よ )。

EFAULT

pathname が ア ク セ ス 可 能 な ア ド レ ス 空 間 の 外 を 指 し て い る 。

EIO

I/O エ ラ ー が 発 生 し た 。

ELOOP

pathname を 解 決 す る と き に 、 解 決 す べ き シ ン ボ リ ッ ク リ ン ク が 多 す ぎ た 。

ENAMETOOLONG

pathname が 長 過 ぎ る 。

ENOENT

フ ァ イ ル が 存 在 し な い 。

ENOMEM

カ ー ネ ル に 十 分 な メ モ リ ー が な い 。

ENOTDIR

パ ス 名 の 構 成 要 素 が デ ィ レ ク ト リ で は な い 。

EPERM

実 効 UID が フ ァ イ ル の 所 有 者 と 一 致 せ ず 、 プ ロ セ ス に 特 権 が な い (Linux で は CAP_FOWNER ケ ー パ ビ リ テ ィ を 持 た な い )。

EPERM

The file is marked immutable or append-only. (See ioctl_iflags (2).)

EROFS

フ ァ イ ル が 読 み 込 み 専 用 (read only) の フ ァ イ ル シ ス テ ム 上 に あ る 。

fchmod () で 一 般 的 な エ ラ ー を 挙 げ る :

EBADF

フ ァ イ ル デ ィ ス ク リ プ タ ー fd が 有 効 で な い 。

EIO

上 記 を 参 照 。

EPERM

上 記 を 参 照 。

EROFS

上 記 を 参 照 。

chmod () で 発 生 す る の と 同 じ エ ラ ー が fchmodat () で も 起 こ る 。 fchmodat () で は 以 下 の エ ラ ー も 発 生 す る 。

EBADF

dirfd が 適 切 な フ ァ イ ル デ ィ ス ク リ プ タ ー で な い 。

EINVAL

flags に 無 効 な フ ラ グ が 指 定 さ れ た 。

ENOTDIR

pathname が 相 対 パ ス で 、 dirfd が デ ィ レ ク ト リ 以 外 の フ ァ イ ル を 参 照 し て い る フ ァ イ ル デ ィ ス ク リ プ タ ー で あ る 。

ENOTSUP

flags に 対 応 し て い な い フ ラ グ AT_SYMLINK_NOFOLLOW が 指 定 さ れ た 。

バ ー ジ ョ ン

fchmodat () は カ ー ネ ル 2.6.16 で Linux に 追 加 さ れ た 。 ラ イ ブ ラ リ に よ る サ ポ ー ト は バ ー ジ ョ ン 2.4 以 降 の glibc で 利 用 で き る 。

準 拠

chmod (), fchmod (): 4.4BSD, SVr4, POSIX.1-2001i, POSIX.1-2008.

fchmodat (): POSIX.1-2008.

注 意

C ラ イ ブ ラ リ と カ ー ネ ル の 違 い

GNU C ラ イ ブ ラ リ の fchmodat () ラ ッ パ ー 関 数 は 、 こ の ペ ー ジ で 説 明 し て い る POSIX で 規 定 さ れ た イ ン タ ー フ ェ ー ス を 実 装 し て い る 。 こ の イ ン タ ー フ ェ ー ス は 、 内 部 で 呼 ば れ る Linux の シ ス テ ム コ ー ル と は 異 な る 。 シ ス テ ム コ ー ル は flags 引 数 を 持 た な い

glibc で の 注 意

fchmodat () が 利 用 で き な い 古 い カ ー ネ ル で は 、 glibc ラ ッ パ ー 関 数 は chmod () を 使 用 す る モ ー ド に フ ォ ー ル バ ッ ク す る 。 pathname が 相 対 パ ス の 場 合 、 glibc は dirfd 引 数 に 対 応 す る /proc/self/fd の シ ン ボ リ ッ ク リ ン ク に 基 づ い て パ ス 名 を 構 成 す る 。

関 連 項 目

chmod (1), chown (2), execve (2), open (2), stat (2), inode (7), path_resolution (7), symlink (7)

こ の 文 書 に つ い て

こ の man ペ ー ジ は Linux man-pages プ ロ ジ ェ ク ト の リ リ ー ス 5.10 の 一 部 で あ る 。 プ ロ ジ ェ ク ト の 説 明 と バ グ 報 告 に 関 す る 情 報 は https://www.kernel.org/doc/man-pages/ に 書 か れ て い る 。