CHOWN(2)

名前
chown, fchown, lchown - ファイルの所有者を変更する

書式
#include <sys/types.h>
#include <unistd.h>

int chown(const char *path, uid_t owner, gid_t group);
int fchown(int fd, uid_t owner, gid_t group);
int lchown(const char *path, uid_t owner, gid_t group);

説明
path または、 fd で指定されたファイルの所有者(owner)を変更する。 スーパー・ユーザーだけがファイルの所有者を変更できる。 ファイルの所有者は、その所有者が属しているグループのいずれかに ファイルのグループを変更することができる。 スーパー・ユーザーは、任意のグループに変更できる。 もし、 owner または group に -1 が指定された場合、それらのIDは変更されない。 When the owner or group of an executable file are changed by a non-super-user, the S_ISUID and S_ISGID mode bits are cleared. POSIX does not specify whether this also should happen when root does the chown; the Linux behaviour depends on the kernel version. スーパーユーザー以外によって実行ファイルの所有者またはグループが 変更された場合は S_ISUID と ISGID モードビットはクリアされる。 POSIX はこの動作やルートが chown を行なった場合については特に指定されていない。 非グループ実行ファイル(S_IXGRP ビットが設定されていない)の場合には S_ISGID ビットは強制ロック(mandatory locking)を意味している。 そしてそれは chown ではクリアできない。

返り値
成功すると、0を返す。 失敗すると、-1を返し、 errno に適切な値を設定する。

エラー
ファイルシステムによっては他のエラーが返される事がある。 chmod で一般的なエラーを以下に挙げる:

EPERM
    実効/(effective)UIDがファイルの所有者と一致せず、 ゼロでもない。 または、 owner 、または group が正しく指定されていない。

EROFS
    指定したファイルが読み込み専用(read-only)のファイル・システム上にある。

EFAULT
    path が割り当てられたアドレス空間外を指している。

ENAMETOOLONG
    path が長過ぎる。

ENOENT
    ファイルが存在しない。

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

ENOTDIR
    path の構成要素がディレクトリでない。

EACCES
    path の構成要素に検索許可(search permission)がない。

ELOOP
    path を解決する際に遭遇したシンボリック・リンクが多過ぎる。

fchown で一般的なエラーを以下に挙げる:

EBADF
    ディスクリプターが有効でない。

ENOENT
    上記を参照。

EPERM
    上記を参照。

EROFS
    上記を参照。

EIO iノード(inode)を修正する際に低レベル I/O エラーが発生した。

注意
Linux の 2.1.81 より前のバージョン (特に 2.1.46以前) では、 chown はシンボリック・リンクを追跡しない。 Linux 2.1.81 以降では chown はシンボリック・リンクを追跡し、新たなシステム・コール lchown はシンボリック・リンクを追跡しない。 Linux 2.1.86 以降ではこの新しいコール(古い chown と全く同じ動作を行なう)は同じシステムコール番号を持ち
 .B chown は新しく導入された番号を持つ。

fchown は __USE_BSD が定義さている場合のみ利用できる。

準拠
chown は SVr4, SVID, POSIX, X/OPEN と互換性がある。4.4BSD 版では スーパー・ユーザーのみが使用できる。 SVr4 には EINVAL, EINTR, ENOLINK, EMULTIHOP を返すと記述されているが、 ENOMEM はない。POSIX.1 には ENOMEM, ELOOP について記述はない。

fchown は 4.4BSD, SVr4 と互換性がある。 SVr4 には他に EINVAL, EIO, EINTR, ENOLINK エラー状態についての記述がある。

制限
chown() 方式は UID マッピングを使用した NFS ファイル・システムと 侵害する。さらにファイルの内容にアクセスする全てのシステム・コールを 侵害する。これは chown() が既にオープンされたファイルに対する アクセスをただちに取り消すことによる。クライアント側のキャッシュにより 所有権が変更されてユーザーのアクセスが許した時点と、実際に他の クライアントでユーザーによってファイルにアクセスできる時点との間に 時間差があるかもしれない。

関連項目
chmod(2), flock(2)