[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

13.1 chown: ファイルの所有者やグループを変更する

chown は、指定された各 file の所有者や所有グループを new-owner に変更する。所有者とグループを、存在する参照用ファイル (reference file) のそれと同じものに変更することもできる。

書式:

 
chown [option]… {new-owner | --reference=ref_file} file

new-owner では、新しい所有者やグループを以下のような形で指定する (‘:’ の前後に空白を入れてはいけない)。

 
[owner] [ : [group] ]

細かく説明しよう。

owner

owner (ユーザ名、またはユーザ ID 番号) だけが指定されている場合は、 そのユーザが指定された各ファイルの所有者になる。ファイルのグループは変化しない。

owner‘:’group

owner の後に、コロンと group (グループ名、またはグループ ID 番号) が、間に空白をはさまずに続く場合は、ファイルの所有グループも (group に) 変更される。

owner‘:

owner の後ろにコロンがあるのみで、グループ名が続かない場合は、 そのユーザがファイルの所有者になり、ファイルのグループは、owner のログイン・グループに変更される。

:’group

コロンとそれに続く group のみが指定され、所有者が省略されている場合は、 ファイルのグループだけが変更される。この場合、chown は、chgrp と同じ動作をするわけだ。

:

コロンのみが指定されている場合や、new-owner に何も指定されていない場合は、 所有者もグループも変更されない。

ownergroup にユーザ ID 番号やグループ ID 番号を使用する場合は、 番号の頭に ‘+’ を付ければ、ID 番号だと明示することができる。 See section chown, chgrp, chroot, id: ユーザ名かユーザ ID かを明確にする.

古めのスクリプトの中には、区切りの印として ‘:’ ではなく、‘.’ を今だに使っているものがあるかもしれない。POSIX 1003.1-2001 (see section 規格への準拠) では、これに対するサポートを要求していないが、 後方互換のために、GNU の chown では、曖昧さが生じないかぎり、‘.’ の使用をサポートしている。とは言え、新しく書くスクリプトでは、‘.’ の使用を避けるべきである。他のシステムでも使えるとはかぎらないし、 また、owner‘.’group という全体が、名前に ‘.’ を含むユーザを指していたりすると、不都合が生じるからだ。

ユーザがグループを任意のものに変更できるか、それとも、 グループの設定はユーザがその一員であるグループにのみ制限されるという、 より可搬性のある動作になっているかは、システム次第である。

chown コマンドを実行すると、set-user-ID ビットや set-group-ID ビットが消えてしまうことがある。そうしたことが起きるかどうかは、 裏で動いている chown システムコールのポリシーや機能次第であり、 従って、システムによるファイルモードの変更が、chown コマンドのコントロール外になることがあるのだ。 しかるべき特権を持ったユーザが実行した場合や、問題のビットが実行権とは関係のない何か別の機能 (たとえば、強制ロック) を表している場合などでは、chown コマンドを実行しても、そうしたビットが変わらないかもしれない。 どうなるかよくわからない場合は、裏で動いているシステムの動作を調べるとよい。

このプログラムでは以下のオプションが使用できる。参照: 共通オプション.

-c
--changes

所有者の変更が実際に行われた各 file について、何を実行したかを詳しく表示する。

-f
--silent
--quiet

所有者を変更できないファイルがあっても、エラーメッセージを出さない。

--from=old-owner

fileold-owner で指定された属性を現在持っているときにのみ、 その所有者を変更する。old-owner の書式は、上記の new-owner と同じである。 このオプションは、ファイルの不正使用が可能になる時間を大幅に狭めるという点で、 主としてセキュリティの見地から役に立つ。 一例を挙げると、この種のオプションを使わない場合、ユーザの ID 番号の変更を、そのユーザのファイルに反映させるために、root は次のようなコマンドを実行するかもしれない。

 
find / -user OLDUSER -print0 | xargs -0 chown -h NEWUSER

しかし、これは危険なことである。なぜなら、find が存在するファイルの所有者を検査するときと、chown が実際に実行されるときとの間に時間差があり、それはかなり大きいかもしれないからだ。 この時間差を小さくする方法の一つは、ファイルが見つかるごとに、chown を実行することだろう。

 
find / -user OLDUSER -exec chown -h NEWUSER {} \;

しかし、動作の対象になるファイルがたくさんあると、この方法は非常に時間がかかる。 ‘--from=old-owner’ オプションを使う方が、 万全とまでは言えないにしても、より安全である (時間差がさらに小さくなるので)。

 
chown -h -R --from=OLDUSER NEWUSER /
--dereference

シンボリックリンクそのものを動作の対象とせず、リンクが指しているものを動作の対象にする。 これがデフォルトである。

-h
--no-dereference

シンボリックリンクが指しているものではなく、シンボリックリンクそのものを動作の対象にする。 このモードは、システムコール lchown に依存している。 システムコール lchown を提供していないシステムでは、 コマンドラインで指定されたファイルがシンボリックリンクだと、chown は実行に失敗する。 なお、再帰的にディレクトリ階層をたどっている際にシンボリックリンクに出会っても、 デフォルトでは診断メッセージを表示しない。ただし、‘--verbose’ を指定している場合は別なので、そちらの説明も参照していただきたい。

--preserve-root

ルートディレクトリ (‘/’) を再帰的に変更しようとした時点で、実行に失敗する。 ‘--recursive’ オプションを指定していない場合、このオプションは効果がない。 See section /’ (ルート) を特別扱いする.

--no-preserve-root

--preserve-root’ オプションが前にあれば、その効果を無効にする。 See section /’ (ルート) を特別扱いする.

--reference=ref_file

file の所有者とグループを ref_file のそれと同じものに変更する。 ref_file がシンボリックリンクの場合は、シンボリックリンクの所有者とグループではなく、 リンクが指しているファイルの所有者とグループを使用する。

-v
--verbose

処理したすべてのファイルについてメッセージを表示する。システムコール lchown を持っていないシステムで、再帰的にディレクトリ階層をたどっている際にシンボリックリンクに出会った場合、 ‘--no-dereference’ が有効になっていれば、 「シンボリックリンクもその参照先も変更しない」というメッセージを出す。

-R
--recursive

ディレクトリとその中身の所有者を再帰的に変更する。

-H

--recursive’ (‘-R’) オプションが指定されている場合に、 コマンドラインで指定された引数がディレクトリへのシンボリックリンクならば、それをたどる。 See section シンボリックリンクをたどる.

-L

ディレクトリ階層を再帰的にたどっている際に、 ディレクトリへのシンボリックリンクに出会ったら、必ずそれをたどる。 See section シンボリックリンクをたどる.

-P

シンボリックリンクを一切たどらない。これが、‘-H’, ‘-L’, ‘-P’ のどれも指定されていないときの、デフォルトである。 See section シンボリックリンクをたどる.

終了ステータス 0 は成功を示し、0 以外の値は失敗を示す。

用例:

 
# /u の所有者を "root" に変更する。
chown root /u

# 同様だが、グループも "staff" に変更する。
chown root:staff /u

# /u 及び、それ以下にあるファイルの所有者を "root" に変更する。
chown -hR root /u

[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

This document was generated on June 7, 2022 using texi2html 1.82.