ナビゲーションリンクをスキップ | |
印刷ビューの終了 | |
![]() |
マニュアルページセクション 1: ユーザーコマンド Oracle Solaris 11 Information Library (日本語) |
- ファイルのアクセス権モードの変更
chmod [-fR] absolute-mode file...
chmod [-fR] symbolic-mode-list file...
chmod [-fR] acl_operation file...
chmod [-fR] [-@ named_attribute]...attribute_specification_list file...
chmod ユーティリティーはファイルモードの変更や割り当てを行います。
chmod を使用すると、ファイルやディレクトリのアクセス制御リスト (ACL) の変更や、通常のファイル、ディレクトリ、および不透明な拡張属性ファイルのブール型読み書きシステム属性の変更も行えます。
絶対モードのコマンド行は、次の形式で指定します。
chmod [options] absolute-mode file . . .
ここで、absolute-mode は、以下のように定義されている 8 進数 nnnn を使用して指定します。
0 から 7 の数字を表します。絶対モードは、以下のモードのいくつかの論理和をとったものです。
実行時にユーザー ID を設定します。
# が 7、5、3 または 1 のとき、実行時にグループ ID を設定します。
# が 6、4、2 または 0 のとき、強制ロックを許可します。
ディレクトリに対して使用されると、グループ ID の継承については BSD のセマンティクスに基づいてファイルが作成されます。このオプションを使用すると、そのディレクトリ中に作成されるファイルやサブディレクトリは、カレントプロセスのグループ ID ではなく、ディレクトリのグループ ID を引き継ぎます。ディレクトリの場合、set-gid ビットをセットまたはクリアできるのはシンボリックモードを使用する場合だけです。
スティッキビットをオンにします。chmod(2) 参照。
所有者による読み取りを許可します。
所有者による書き込みを許可します。
所有者による実行 (ディレクトリ内での検索) を許可します。
所有者による読み取り、書き込み、実行 (検索) を許可します。
グループによる読み取りを許可します。
グループによる書き込みを許可します。
グループによる実行 (ディレクトリ内での検索) を許可します。
グループによる読み取り、書き込み、実行 (検索) を許可します。
その他のユーザーによる読み取りを許可します。
その他のユーザーによる書き込みを許可します。
その他のユーザーによる実行 (ディレクトリ内での検索) を許可します。
その他のユーザーによる読み取り、書き込み、実行 (検索) を許可します。
ディレクトリに対して、絶対モードでは setgid のセットやクリアは行えません。シンボリックモードで g+s (または g–s) を使って行う必要があります。
シンボリックモードのコマンド行は、次の書式で指定します。
chmod [options] symbolic-mode-list file . . .
ここで、symbolic-mode-list は、次の形式のシンボリックモードの式をコンマで区切ったリスト (スペースを含めない) です。
[who] operator [permissions]
処理は、記述された順序で実行されます。1 つの演算子 (operator) のあとに permissions として複数のアクセス権文字を指定すると、その演算子で示された処理が同時に行われます。
u、g、o、a の文字の 1 つ以上の組み合わせ (または省略) で、誰のアクセス権が変更または割り当てられるのかを指定します。
ユーザーのアクセス権
グループのアクセス権
その他のアクセス権
全アクセス権 (ユーザー、グループ、その他)
who が省略されると、デフォルトとして a と解釈されますが、ファイルモード作成マスク (詳細は sh(1) または csh(1) の umask の項を参照) の設定値は考慮されます。who が省略されると、chmod はユーザーマスクの制限を置き換えません。
アクセス権をどのように変更するかを指定する演算子で、+、-、= のいずれかです。
アクセス権を付加します。
permissions を省略すると、何も付加されません。
who が省略されると、対応するビットがファイルモード生成マスク中にセットされている場合を除き、permissions が示すファイルモードビットが付加されます。
who が指定されていれば、permissions が示すファイルモードビットが付加されます。
アクセス権を除去します。
permissions を省略すると、何も行われません。
who が省略されると、対応するビットがファイルモード生成マスク中にセットされている場合を除き、permissions が示すファイルモードビットをクリアします。
who が指定されていれば、permissions が示すファイルモードビットをクリアします。
指定されたアクセス権をそのまま割り当てます。
who が省略されると、すべてのファイルモードビットをクリアします。who が指定されていれば、who が示すファイルモードビットをクリアします。
permissions を省略すると、他には何も行われません。
who が省略されると、対応するビットがファイルモード生成マスク中にセットされている場合を除き、permissions が示すファイルモードビットが付加されます。
who が指定されていれば、permissions が示すファイルモードビットが付加されます。
= は、他のシンボリック演算子と違って、who が示す他のすべてのビットをリセットしてしまうという絶対的な効果があります。 permission の省略は、= を使用してすべてのアクセス権を除去するときのみ便利です。
以下の文字の適切な組み合わせで指定します。
強制ロッキング
読み取り権
ユーザーまたはセットグループ ID
スティッキビット
書き込み権
実行権
実行権 (ファイルがディレクトリの場合、または他のユーザークラスのいずれかに実行権がある場合)
permission がそれぞれ現在のユーザー、グループ、 またはその他のモードから除去されることを意味します。
ファイルへのアクセス権は、ユーザー ID 番号 (UID) およびグループ ID 番号 (GID) によって異なります。アクセス権は、 3 つのユーザーモードがそれぞれ 3 つの文字を持つように記述されます。
|
この例 (ユーザー、グループ、その他が、当該ファイルの読み取り、書き込み、 実行権を持っている) は、アクセス権を与える際の 2 つのカテゴリを示しています。1 つはアクセスクラス、もう 1 つはアクセス権そのものです。
文字 s は、u または g と一緒に指定したときのみ有効です。また、t は u とのみ指定できます。
強制的なファイルおよびレコードのロック (l) は、プログラムがアクセスしている間、そのファイルの読み込み、書き込み権がロックされることを意味します。
セットグループ ID ビットがオンになっているディレクトリは、'ls –ld' で -----s--- または -----l--- が出力されることで判定できますが、このようなディレクトリ中で ファイルやサブディレクトリを生成する際には、その親ディレクトリのセットグループ ID が与えられます。カレントプロセスのセットグループ ID ではありません。
グループ実行権を与えて、同時に実行時にファイルをロックすることはできません。さらに、セットグループ ID ビットをオンにして同時に実行時にファイルをロックすることはできません。したがって、以下の例は無効であり、エラーメッセージが出力されます。
chmod g+x,+l file chmod g+s,+l file
ファイルまたはディレクトリの所有者 (またはスーパーユーザー) だけがそのファイルまたはディレクトリのモードを変更できます。スーパーユーザーだけがディレクトリでないファイルのスティッキビットを設定できます。スーパーユーザーでなければ、chmod はスティッキビットをマスクしますが、エラーは返しません。ファイルのセットグループ ID ビットをオンにするには、自分自身のグループ ID がファイルのそれと一致していて、さらにグループ実行権が設定されていなければなりません。
ACL 操作のコマンド行は、次の形式で指定します。
chmod [options] A[number]- file ... chmod [options] A-acl_specification file ... chmod [options] A[index]{+|=}acl_specification file ...
ここで、acl_specification は、次の形式の ACL 指定をコンマで区切ったリスト (スペースを含めない) です。
acl_specification に指定されたアクセス制御エントリ (ACE) を、ファイルの ACL の先頭に追加します。ファイルシステムによっては、ファイルへの適用時に ACL が並べ替えられることがあります。「省略可能」な番号が指定された場合、指定された番号の前に新しい ACE が挿入されます。
ファイル上の現在の ACL に対するすべての ACE を削除し、そのファイルの現在のモードだけを表現した新しい ACL で現在の ACL を置き換えます。
index の番号で指定された ACE を削除します。
acl_specification で指定された ACE が現在のファイルの ACL 内に存在している場合、そのエントリを削除します。
ファイルの ACL 全体を acl_specification で置き換えます。
ファイル上の現在の ACL 内で、特定のインデックス番号以降の ACE を置き換えます。ACE が複数指定された場合、acl_specification 内の後続の各 ACE によって、現在の ACL 内の対応する ACE が置き換えられます。
POSIX ドラフト ACL 指定 (UFS でサポート)
UFS でサポートされる POSIX ドラフト ACL は、次のようにコロン (:) で区切られたフィールドとして指定されます。
所有者のアクセス権。
特定のユーザーのアクセス権。
ファイルのグループ所有者のアクセス権。
特定のグループのアクセス権。
ファイルの所有者やグループ所有者のメンバー以外のユーザーのアクセス権。
ACL マスク。マスクエントリは、ユーザー (所有者以外) とグループに許可される最大のアクセス権を示します。
所有者のデフォルトアクセス権。
特定のユーザーのデフォルトアクセス権。
ファイルのグループ所有者のデフォルトアクセス権。
特定のグループのデフォルトアクセス権。
ファイルの所有者やグループ所有者のメンバー以外のユーザーのデフォルトアクセス権。
デフォルトの ACL マスク。
前述の指定方法を使えば、ACL を次のように指定できます。
user:tom:rw-,mask:rwx,group:staff:r-x
NFSv4 ACL 指定 (NFSv4 と ZFS でサポート)
NFSv4 ACL は、より豊富な ACL セマンティックを提供します。この ACL は、許可エントリと拒否エントリの両方を提供するほか、より細粒度の高いアクセス権と拡張された継承制御を提供します。
NFSv4 ACL は、次のようにコロン (:) で区切られたフィールドとして指定されます。
ファイルの所有者のアクセス権。
ファイルのグループ所有者のアクセス権。
ファイルの所有者とグループ所有者を含むすべてのユーザーに対するアクセス権。
特定のユーザーのアクセス権。
特定のユーザーのアクセス権。ただし、ユーザーは SID で指定されます。
特定のグループのアクセス権。
特定のグループのアクセス権。ただし、グループは SID で指定されます。
特定の SID のアクセス権。ただし、この SID はユーザーまたはグループのどちらでもかまいません。
アクセス権を指定する際には、異なる 3 つの chmod ACL 形式を使用できます。 冗長、コンパクト、定位置です。冗長形式では、単語を使ってアクセス権を指定し、複数のアクセス権はスラッシュ (/) 文字で区切ります。コンパクト形式ではアクセス権文字を使用し、定位置形式ではアクセス権文字とハイフン (-) を使用します。ハイフンはアクセス権がないことを示します。
冗長モード用のアクセス権とコンパクトモードおよび定位置モード用の短縮形について、次に説明します。短縮形は括弧内に示しています。
ファイルのデータを読み取る権限。
ディレクトリの内容を表示するためのアクセス権。
ファイルのデータを変更する権限。ファイルのオフセット範囲内の任意の場所。
ディレクトリに新しいファイルを追加するためのアクセス権。
ファイルのデータを変更する機能。ただし、変更できるのは EOF 以降のみです。
現在、この権限はサポートされていません。
ディレクトリにサブディレクトリを作成する権限。
ファイルの拡張属性を読み取る機能。
拡張属性を作成したり拡張属性ディレクトリに書き込んだりする機能。
ファイルを実行する権限。
ファイルの基本属性 (ACL 以外) を読み取る機能。
ファイルまたはディレクトリに関連付けられた時刻を任意の値に変更するためのアクセス権。
ファイルを削除するためのアクセス権。
削除アクセス権の動作については、『Oracle Solaris の管理: ZFS ファイルシステム』を参照してください。
ディレクトリ内のファイルを削除する権限。
削除アクセス権の動作については、『Oracle Solaris の管理: ZFS ファイルシステム』を参照してください。
ファイルの ACL を読み取る権限。
ファイルの ACL を書き込む権限。
ファイルの所有者を変更する権限。
同期付きの読み取り権と書き込み権を使ってサーバー上のファイルにローカルアクセスする権限。
現在、この権限はサポートされていません。
コンパクト ACL 形式では、14 個の一意の文字を使ってアクセス権を指定します。
定位置 ACL 形式では、ls -V の形式に似た定位置引数として、アクセス権を指定します。ハイフン (-) は、その位置のアクセス権が許可されていないことを示しますが、このハイフンは省略可能であり、指定する必要があるのは必須文字だけです。
前述の文字は、定位置表記で指定する順番に並んでいます。
これらの文字を使えば、アクセス権を次のように指定できます。
rwx--D--------
ハイフンを削除すれば、文字列が次のようにコンパクトになります。
rwxD
いくつかの特殊アクセス権セットや別名もサポートされています。次のアクセス権セットの使用方法は、冗長アクセス権を指定する方法と同じです。
すべてのアクセス権。
write_acl と write_owner を除くすべてのアクセス権。
read_data、read_acl、read_attributes、および read_xattr。
write_data、append_data、write_attributes、および write_xattr
省略可能な継承フラグの指定形式は 3 つあります。最初の形式では、単語を使ってさまざまな継承フラグを指定します。複数の継承フラグはスラッシュ (/) 文字で区切ります。
新たに作成されたすべてのファイルに継承します。
新たに作成されたすべてのディレクトリに継承します。
ディレクトリに対して指定された場合、そのディレクトリには適用せず、新たに作成されたファイルやディレクトリだけに適用します。このフラグを使用する際には、file_inherit または dir_inherit、あるいはその両方も指定する必要があります。
ディレクトリ内のオブジェクトには ACL エントリを継承しますが、レベルが 1 つ下がった時点でその継承を停止すべきであることを示します。このフラグを使用する際には、file_inherit または dir_inherit、あるいはその両方も指定する必要があります。
前述の継承フラグは、コンパクト形式で指定することもでき、また、ls -V の形式に似た定位置引数として指定することもできます。定位置 ACL 形式でのハイフン文字は、その位置の継承フラグが指定されていないことを示します。
これらの文字を使って継承フラグを指定する場合、次のいずれの同等の方法を使ってもかまいません。
file_inherit/dir_inherit/no_propagate
fd-n--
fdn
この継承モデルを使えば、ACL エントリを次のように指定できます。
user:tom:read_data/write_data/read_attributes:file_inherit:allow user:fred:read_data:file_inherit/dir_inherit:deny user:bob:read_data:allow
属性操作のコマンド行は、次の形式で指定します。
chmod [options] attribute_specification_list file ...
attribute_specification_list は、文字 S とそれに続く 1 つ以上の attribute_specifications のコンマ区切りのリストです。各 attribute_specification の形式を次に示します。
[operator]attribute_specifier
operator は次のいずれかです。
関連する attribute_specifier で指定された各属性は、attribute_specifier で指定された値に一致するように調整されます。
関連する attribute_specifier で指定された各属性は、attribute_specifier で指定された値の逆に一致するように調整されます。
関連する attribute_specifier で指定された各属性は、attribute_specifier で指定された値に一致するように調整されます。attribute_specifier で指定されていない、現在のファイルに関連付けられたブール型の読み書き拡張システム属性は、クリアされます。
attribute_specification で operator が指定されていない場合、chmod は + が指定されているかのように動作します。
attribute_specifier は、次のいずれかの形式になります。
現在のファイルに関連付けられているすべてのブール型読み書き拡張システム属性を設定します。
compact_attribute_list で識別される各ブール型読み書き拡張システム属性を設定します。
verbose_attribute_setting で識別される各ブール型読み書き拡張システム属性を設定します。
compact_attribute_list は、このセクションで後述する属性名と略字のリストに記載されている、隣接するゼロ個以上の属性の略語のリストです。 compact_attribute_list には、任意の数のハイフン (-) を含めることができます。これらは無視されます。
verbose_attribute_setting は、このセクションで後述する属性名と略字のリストに記載されている属性名です。必要に応じて、その直前に no を指定することもできます。属性名を no なしで指定する場合は、その属性が設定されます。それ以外の場合は、属性がクリアされます。
verbose_attribute_setting_list は、ゼロ個以上の verbose_attribute_setting のコンマ区切りのリストです。
1 つのファイルに指定された複数の操作は累積され、そのすべてがファイルオペランドに対して 1 つの属性設定操作として設定されます。属性が attribute_specification_list 内で複数回指定されている場合、最後に指定された操作が適用されます。
次に属性名と略字のリストを示します。
略字
H
s
S
R
A
u
i
a
d
q
m
次のオプションがサポートされています。
強制。chmod はファイルモードの変更に失敗しても何もしません。
ディレクトリ引数を再帰的に検索して、各ファイルのモードを設定します。シンボリックリンクに出合うと、対象のファイルのモードが変更されます。しかし、再帰は発生しません。
ファイルオペランド自体ではなく、各ファイルオペランドの名前付き拡張属性ファイルに対して属性操作を実行します。複数の -@ 操作が指定されている場合、名前付き属性ファイルのそれぞれに属性指定モードが適用されます。
名前付き属性 * は、chmod に伝えられると、ファイルオペランドに関連付けられたすべての拡張属性ファイルを意味すると見なされます。これには次は含まれません。特殊ファイル . および ...
.. の名前付き属性は、 chmod に伝えられると、ファイルオペランド自体を意味すると見なされます。これにより、 chmod を 1 回呼び出して、ファイルオペランドの指定された名前付き属性ファイルおよびファイルオペランド自体に属性指定モードを適用することが可能になります。
次のオペランドがサポートされています。
file オペランドのいずれかで指定された各ファイルのファイルモードビットに加えられる変更を示します。詳細は、このマニュアルページの「機能説明」の項の「絶対モード」および「シンボリックモード」を参照してください。
ファイルの ACL で実行される変更内容を表現します。詳細は、「機能説明」の項の「AOL 操作」を参照してください。
acl_operation は次のいずれかです。
A[number] - A-acl_specification A[index]{+|=}acl_specification
ファイルの属性に対して実行される変更内容を表現します。詳細は、このマニュアルページの「機能説明」の項の「属性操作」を参照してください。
ファイルモードビットを変更するファイルのパス名
ファイルが 2 ギガバイト (231 バイト) 以上ある場合の chmod の動作については、largefile(5) を参照してください。
例 1 実行権を拒否する
次の例では、すべてのユーザーに対して実行権を拒否しています。
% chmod a-x file
例 2 読み取り専用アクセス権を許可する
次の例では、すべてのユーザーに対して読み取り権だけを許可しています。
% chmod 444 file
例 3 ファイルを読み取り可能かつ書き込み可能にする
次の例では、グループおよびその他のユーザーがファイルを読み書きできるようにしています。
% chmod go+rw file % chmod 066 file
例 4 ファイルをロックしてアクセスできないようにする
次の例では、ファイルをロックしてアクセスできないようにしています。
$ chmod +l file
例 5 ファイルの読み取り、書き込み、実行、セットグループ ID の各アクセス権を許可する
次の例では、ファイルの読み取り権、書き込み権、および実行権をすべてのユーザーに対して許可するとともに、セットグループ ID をオンにしています。
$ chmod a=rwx,g+s file $ chmod 2777 file
例 6 ZFS ファイル上で新しい ACL エントリを先頭に追加する
次の例では、ZFS ファイル上で新しい ACL エントリを先頭に追加しています。
まず、現在の ACL を表示します。
$ ls -v file.3 -rw-r--r-- 1 marks staff 0 Oct 9 15:49 file.3 0:owner@:execute:deny 1:owner@:read_data/write_data/append_data/write_xattr/ write_attributes/write_acl/write_owner:allow 2:group@:write_data/append_data/execute:deny 3:group@:read_data:allow 4:everyone@:write_data/append_data/write_xattr/execute/ write_attributes/write_acl/write_owner:deny 5:everyone@:read_data/read_xattr/read_attributes/read_acl/ synchronize:allow
次のコマンドを入力します。
$ chmod A+user:lp:read_data:deny file.3
新しい ACL を表示します。
$ ls -v file.3 -rw-r--r--+ 1 marks staff 0 Oct 9 15:49 file.3 0:user:lp:read_data:deny 1:owner@:execute:deny 2:owner@:read_data/write_data/append_data/write_xattr/ write_attributes/write_acl/write_owner:allow 3:group@:write_data/append_data/execute:deny 4:group@:read_data:allow 5:everyone@:write_data/append_data/write_xattr/execute/ write_attributes/write_acl/write_owner:deny 6:everyone@:read_data/read_xattr/read_attributes/read_acl/ synchronize:allow
例 7 UFS ファイル上で新しい POSIX ドラフト ACL エントリを先頭に追加する
次の例では、UFS ファイル上で新しい POSIX ドラフト ACL エントリを先頭に追加しています。
まず、現在の ACL を表示します。
$ ls -v file.2 -rw-r--r-- 1 marks staff 0 Oct 9 15:52 file.2 0:user::rw- 1:group::r-- #effective:r-- 2:mask:r-- 3:other:r--
次のコマンドを入力します。
$ chmod A+user:lp:-wx file.2
新しい ACL を表示します。
$ ls -v file.2 -rw-r--r--+ 1 marks staff 0 Oct 9 15:52 file.2 0:user::rw- 1:user:lp:-wx #effective:--- 2:group::r-- #effective:r-- 3:mask:r-- 4:other:r--
例 8 ZFS ファイル上で ACL エントリを特定の位置に挿入する
次の例では、ZFS ファイルシステム上で ACL エントリを特定の位置に挿入しています。また、コンパクト ACL 形式の使い方も示しています。
まず、ACL を表示し、新しい ACE の挿入位置を確認します。
% ls -V file.1 -rw-r--r--+ 1 root root 0 Oct 6 12:16 file.1 user:lp:rw------------:------:allow owner@:--x-----------:------:deny owner@:rw-p---A-W-Co-:------:allow group@:-wxp----------:------:deny group@:r-------------:------:allow everyone@:-wxp---A-W-Co-:------:deny everyone@:r-----a-R-c--s:------:allow
次に、新しいエントリを位置 3 に挿入します。これにより、位置 3 から 6 に現在存在しているエントリが、下方に移動します。
次のコマンドを入力します。
$ chmod A3+user:marks:r:deny file.1
新しい ACL を表示します。
$ ls -V file.1 -rw-r--r--+ 1 root staff 0 Feb 3 14:13 file.1 user:lp:rw------------:------:allow owner@:--x-----------:------:deny owner@:rw-p---A-W-Co-:------:allow user:marks:r-------------:------:deny group@:-wxp----------:------:deny group@:r-------------:------:allow everyone@:-wxp---A-W-Co-:------:deny everyone@:r-----a-R-c--s:------:allow
例 9 UFS ファイル上で POSIX ドラフト ACL を特定の位置に挿入する
このファイルシステムは、ACL をファイルシステム内に格納する際にその ACL を並べ替えます。次の例は、この動作を説明したものです。
$ ls -v file.1 -rw-r--r--+ 1 root root 0 Sep 29 16:10 file.1 0:user::rw- 1:user:lp:rw- #effective:r-- 2:group::r-- #effective:r-- 3:mask:r-- 4:other:r--
ここで、インデックス位置 3 にエントリを挿入します。コマンドは機能しますが、ファイルシステムによって ACL が並べ替えられます。
$ chmod A3+user:marks:rw- file.1 $ ls -v file.1 -rw-r--r--+ 1 root root 0 Sep 29 16:10 file.1 0:user::rw- 1:user:lp:rw- #effective:r-- 2:user:marks:rw- #effective:r-- 3:group::r-- #effective:r-- 4:mask:r-- 5:other:r--
ACL エントリは、要求された位置 3 に実際には挿入されず、最終的に位置 2 に挿入されています。
例 10 ZFS ファイル上の ACL エントリを削除する
次の例では、ACL から lp エントリを削除しています。
$ ls -v file.3 -rw-r--r--+ 1 marks staff 0 Oct 9 15:49 file.3 0:user:lp:read_data:deny 1:owner@:execute:deny 2:owner@:read_data/write_data/append_data/write_xattr/ write_attributes/write_acl/write_owner:allow 3:group@:write_data/append_data/execute:deny 4:group@:read_data:allow 5:everyone@:write_data/append_data/write_xattr/execute/ write_attributes/write_acl/write_owner:deny 6:everyone@:read_data/read_xattr/read_attributes/read_acl/ synchronize:allow
$ chmod A-user:lp:read_data:deny file.3 $ ls -v file.3 -rw-r--r-- 1 marks staff 0 Oct 9 15:49 file.3 0:owner@:execute:deny 1:owner@:read_data/write_data/append_data/write_xattr/ write_attributes/write_acl/write_owner:allow 2:group@:write_data/append_data/execute:deny 3:group@:read_data:allow 4:everyone@:write_data/append_data/write_xattr/execute/ write_attributes/write_acl/write_owner:deny 5:everyone@:read_data/read_xattr/read_attributes/read_acl/ synchronize:allow
例 11 UFS ファイル上の POSIX ドラフト ACL エントリを削除する
次の例では、ACL から lp エントリを削除しています。
$ ls -v file.2 -rw-r--r--+ 1 marks staff 0 Oct 9 15:52 file.2 0:user::rw- 1:user:lp:-wx #effective:--- 2:group::r-- #effective:r-- 3:mask:r-- 4:other:r--
$ chmod A-user:lp:-wx file.2 $ ls -v file.2 -rw-r--r-- 1 marks staff 0 Oct 9 15:52 file.2 0:user::rw- 1:group::r-- #effective:r-- 2:mask:r-- 3:other:r--
例 12 ZFS ファイル上の特定の ACL エントリをインデックス番号を指定して削除する
次のような ACL があるとします。
$ ls -v file 0:group:staff:read_data/write_data/execute/read_acl:allow 1:user:bin:read_data:deny 2:user:bin:read_data:allow 3:owner@:write_data/append_data:deny 4:owner@:read_data/write_xattr/execute/write_attributes/write_acl /write_owner:allow 5:group@:write_data/append_data:deny 6:group@:read_data/execute:allow 7:everyone@:write_data/append_data/write_xattr/write_attributes /write_acl/write_owner:deny 8:everyone@:read_data/read_xattr/execute/read_attributes/read_acl /synchronize:allow
bin に対する 2 つめのユーザーエントリを削除します。
$ chmod A2- file $ ls -v file 0:group:staff:read_data/write_data/execute/read_acl:allow 1:user:bin:read_data:deny 2:owner@:write_data/append_data:deny 3:owner@:read_data/write_xattr/execute/write_attributes/write_acl /write_owner:allow 4:group@:write_data/append_data:deny 5:group@:read_data/execute:allow 6:everyone@:write_data/append_data/write_xattr/write_attributes /write_acl/write_owner:deny 7:everyone@:read_data/read_xattr/execute/read_attributes/read_acl /synchronize:allow
例 13 UFS ファイル上の特定の POSIX ドラフト ACL エントリを削除する
次の例では、次の ACL から lp エントリをインデックス番号を指定して削除しています。
$ ls -v file.1 -rw-r--r--+ 1 root root 0 Sep 29 16:10 file.1 0:user::rw- 1:user:lp:rw- #effective:r-- 2:group::r-- #effective:r-- 3:mask:r-- 4:other:r-- $ chmod A1- file.1 $ ls -v -rw-r--r--+ 1 root root 0 Sep 29 16:10 file.1 0:user::rw- 1:group::r-- #effective:r-- 2:mask:r-- 3:other:r--
例 14 ファイルから ACL をすべて削除する
次のコマンドは、NFSv4/ZFS ACL、POSIX ドラフト ACL のどちらでも動作します。
次のような ACL があるとします。
$ ls -v file.3 -rw-r--r--+ 1 marks staff 0 Oct 9 15:49 file.3 0:user:lp:read_data/write_data:allow 1:user:marks:read_acl:allow 2:owner@:execute:deny 3:owner@:read_data/write_data/append_data/write_xattr/ write_attributes/write_acl/write_owner:allow 4:group@:write_data/append_data/execute:deny 5:group@:read_data:allow 6:everyone@:write_data/append_data/write_xattr/execute/ write_attributes/write_acl/write_owner:deny 7:everyone@:read_data/read_xattr/read_attributes/read_acl/ synchronize:allow
既存の ACL は実質的に削除され、ファイルのアクセス権ビットを表現した ACL で置き換えられます。
$ chmod A- file.3 $ ls -v file.3 -rw-r--r-- 1 marks staff 0 Oct 9 15:49 file.3 0:owner@:execute:deny 1:owner@:read_data/write_data/append_data/write_xattr/ write_attributes/write_acl/write_owner:allow 2:group@:write_data/append_data/execute:deny 3:group@:read_data:allow 4:everyone@:write_data/append_data/write_xattr/execute/ write_attributes/write_acl/write_owner:deny 5:everyone@:read_data/read_xattr/read_attributes/read_acl/ synchronize:allow
例 15 ZFS ファイル上の ACL エントリ全体を置き換える
ACL の全体を置き換えるには、次の chmod 構文を使用します。
$ chmod A=owner@:read_data/write_data:allow,group@:read_data/ write_data:allow,user:lp:read_data:allow file.4 $ ls -v file.4 -rw-rw----+ 1 marks staff 0 Oct 9 16:12 file.4 0:owner@:read_data/write_data:allow 1:group@:read_data/write_data:allow 2:user:lp:read_data:allow
例 16 UFS ファイル上の POSIX ドラフト ACL 全体を置き換える
この操作のほうが多少複雑になっています。置換 ACL には、ファイルの所有者、グループ所有者、その他のユーザー、およびマスクを表現するために必要なエントリと、ほかに設定する必要のあるすべてのエントリを含める必要があります。
$ chmod A=user::rw-,group::rw-,other::---,mask:r--, user:lp:r-- file.3 $ ls -v file.3 -rw-r-----+ 1 root root 0 Oct 9 16:14 file.3 0:user::rw- 1:user:lp:r-- #effective:r-- 2:group::rw- #effective:r-- 3:mask:r-- 4:other:---
例 17 ZFS ファイル上の特定のエントリを置き換える
次のような ACL があるとします。
$ ls -v file.5 -rw-r--r--+ 1 marks staff 0 Oct 9 16:18 file.5 0:user:marks:read_data:allow 1:owner@:execute:deny 2:owner@:read_data/write_data/append_data/write_xattr/ write_attributes/write_acl/write_owner:allow 3:group@:write_data/append_data/execute:deny 4:group@:read_data:allow 5:everyone@:write_data/append_data/write_xattr/execute/ write_attributes/write_acl/write_owner:deny 6:everyone@:read_data/read_xattr/read_attributes/read_acl/ synchronize:allow
ここで、ユーザー marks のアクセスタイプを、許可から拒否に変更します。
$ chmod A0=user:marks:read_data:deny file.5 $ ls -v file.5 -rw-r--r--+ 1 marks staff 0 Aug 23 09:11 file.5 0:user:marks:read_data:deny 1:owner@:read_data/write_data/append_data/write_xattr/write_attributes /write_acl/write_owner:allow 2:group@:write_data/append_data/execute:deny 3:group@:read_data:allow 4:everyone@:write_data/append_data/write_xattr/execute/write_attributes /write_acl/write_owner:deny 5:everyone@:read_data/read_xattr/read_attributes/read_acl/synchronize :allow
例 18 UFS ファイル上の特定の POSIX ドラフト ACL エントリを置き換える
次のような ACL があるとします。
$ ls -v file.4 -rw-r--r--+ 1 marks staff 0 Oct 9 16:21 file.4 0:user::rw- 1:user:lp:rwx #effective:r-- 2:group::r-- #effective:r-- 3:mask:r-- 4:other:r--
ここで、lp のアクセス権を、rwx から r-- に変更します。
$ chmod A1=user:lp:r-- file.4 $ ls -v file -rw-r--r--+ 1 marks staff 0 Oct 9 16:21 file.4 0:user::rw- 1:user:lp:r-- #effective:r-- 2:group::r-- #effective:r-- 3:mask:r-- 4:other:r--
例 19 ZFS ファイル上で ACL 継承フラグを設定する
継承フラグを設定できるのは、ZFS ファイルの場合だけです。ACL をディレクトリに対して設定する場合には、いくつかの継承フラグがオプションで設定できます。
ユーザー lp に対するある ACL エントリを、ディレクトリ内で新たに作成されたファイルに継承する必要があると想定します。まず、継承可能な ACL エントリをディレクトリ上に作成する必要があります。
$ chmod A+user:lp:read_data:file_inherit:allow test.dir $ ls -dv test.dir drwxr-xr-x+ 2 marks staff 2 Aug 23 09:08 test.dir/ 0:user:lp:read_data:file_inherit:allow 1:owner@::deny 2:owner@:list_directory/read_data/add_file/write_data/add_subdirectory /append_data/write_xattr/execute/write_attributes/write_acl /write_owner:allow 3:group@:add_file/write_data/add_subdirectory/append_data:deny 4:group@:list_directory/read_data/execute:allow 5:everyone@:add_file/write_data/add_subdirectory/append_data/write_xattr /write_attributes/write_acl/write_owner:deny 6:everyone@:list_directory/read_data/read_xattr/execute/read_attributes /read_acl/synchronize:allow
この lp エントリは、ディレクトリ test.dir 内で新たに作成されたファイルに継承されます。
$ touch test.dir/file.test $ ls -v test.dir/file.test -rw-r--r--+ 1 marks staff 0 Oct 9 16:29 test.dir/file.test 0:user:lp::deny 1:user:lp:read_data:allow 2:owner@:execute:deny 3:owner@:read_data/write_data/append_data/write_xattr/ write_attributes/write_acl/write_owner:allow 4:group@:write_data/append_data/execute:deny 5:group@:read_data:allow 6:everyone@:write_data/append_data/write_xattr/execute/ write_attributes/write_acl/write_owner:deny 7:everyone@:read_data/read_xattr/read_attributes/read_acl/ synchronize:allow
ユーザー lp のエントリが、新たに作成されたファイルに継承されています。複数の継承フラグの組み合わせを指定することが可能です。たとえば、lp エントリがディレクトリにも継承されるようにするには、次のようなコマンドを使用します。
$ chmod A+user:lp:read_data:file_inherit/\ dir_inherit:allow test.dir
例 20 ZFS ファイルのシステム属性を置換する
次の例では、ZFS ファイルのシステム属性を置換します。
$ chmod S=v{archive,hidden,readonly,system,appendonly,\ nonodump,immutable,noav_modified,noav_quarantined,\ nounlink} file1
または
$ chmod S=c{AHRSaiu} file1
または
$ chmod S=c{AHRSa-i--u} file1
または
$ chmod S=cAHRSaiu file1
または
$ chmod -@ '..' S=cAHRSaiu file1
適切な特権を前提として、file1 のシステム属性 archive、hidden、readonly、system、appendonly、immutable、および nounlink が設定されます。適切な特権を前提として、file1 のシステム属性 nodump、av_modified、および av_quarantined がクリアされます。
例 21 ZFS ファイルのすべてのシステム属性をクリアする
次の例では、ZFS ファイルのシステム属性をすべてクリアします。
$ chmod S-a file1
または
$ chmod -@ '..' S-a file1
適切な特権を前提として、file1 のブール型読み書きシステム属性がすべてクリアされます。
例 22 ZFS ファイルの名前付き属性ファイルのシステム属性を設定する
次の例では、ZFS ファイル自体ではなく、ZFS ファイルの名前付き属性ファイルのシステム属性を設定します。
$ chmod -@ myattr S+vhidden file1
これにより、隠しシステム属性が、ファイル file1 自体ではなく、その名前付き属性ファイル myattr に設定されます。
例 23 ZFS ファイルのすべての名前付き属性ファイルのシステム属性を設定する
次の例では、ZFS ファイル自体ではなく、ZFS ファイルのすべての名前付き属性ファイルのシステム属性を設定します。
$ chmod -@ '*' S+a file1
例 24 ZFS ファイルのすべての名前付き属性ファイルのシステム属性を設定する
次の例では、ZFS ファイルのすべての名前付き属性ファイル、および ZFS ファイル自体のシステム属性を設定します。
$ chmod -@ '..' -@ '*' S+vhidden file1
これにより、file1 のすべての名前付き属性ファイル、およびそのファイル自体に対して隠しシステム属性が設定されます。
例 25 ディレクトリ階層を再帰的に検索する
次の例では、ディレクトリ階層を再帰的に検索して、すべての名前付き属性ファイル、ZFS ファイルオペランド、およびディレクトリ自体のシステム属性をすべて設定します。
$ chmod -R -@ '..' -@ '*' S+a directory1
これにより、directory1 のディレクトリ階層内にあるすべての通常ファイルおよびディレクトリの名前付き属性ファイルすべて、および directory1 自体に対し、隠しシステム属性が設定されます。
例 26 ZFS ファイルの hidden および system システム属性を設定する
次の例では、ZFS ファイルの hidden および system システム属性を設定します。
$ chmod S+cHS file1
または
$ chmod S+vhidden,+vsystem file1
または
$ chmod S+v{hidden,system} file1
または
$ chmod S+c{-HS--------} file1
または
$ chmod S-v{nohidden,nosystem} file1
または
$ chmod S-v{hidden,system},+v{hidden,system} file1
例 27 ZFS ファイルのすべてのシステム属性をクリアする
次の例では、ZFS ファイルのシステム属性をすべてクリアします。
$ chmod S-a file1
または
$ chmod S=v{} file1
次の 2 つの例では、指定された最後の属性操作が優先されます。
この例では、置換属性名リスト ({}) により file1 のシステム属性がすべてクリアされます。
$ chmod S+cHS,=v{} file1
この例では、クリア属性操作 (-a) により file1 のシステム属性がすべてクリアされます。
$ chmod S+vhidden,+vsystem,-a file1
例 28 ファイルのすべてのブール型読み書きシステム属性の値を設定する
次の例では、あるファイルのすべてのブール型読み書きシステム属性の値を、別のファイルのブール型読み書きシステム属性と同じに設定します。
$ chmod S=v`ls -/v file1|sed -n '2s/.*{/{/p'` file2
適切な特権および file1 と file2 がサポートされる同じシステム属性を保持しているという前提で、file1 に設定されたすべてのシステム属性が file2 に対しても設定されます。クリアされた file1 のすべてのシステム属性が、file2 でもクリアされます。
chmod の実行に影響を与える次の環境変数についての詳細は、environ(5) を参照してください。LANG、LC_ALL、LC_CTYPE、LC_MESSAGES、および NLSPATH。
次の終了値が返されます。
正常終了。
エラーが発生した。
属性についての詳細は、マニュアルページの attributes(5) を参照してください。
|
getfacl(1), ls(1), setfacl(1), chmod(2), fgetattr(3C), acl(5), attributes(5), environ(5), fsattr(5), largefile(5), standards(5)
『Oracle Solaris の管理: ZFS ファイルシステム』
ディレクトリのセットグループ ID ビットをそっくり置き換えることはできません。 g+s または g–s を使用してください。
chmod は規定に反しないかぎり、無意味なモード作成でも許可します (たとえば、テキストファイルを実行可能にする)。chmod は強制ロックが意味をなすか否かを見るために、ファイルのタイプをチェックすることはありません。
ファイルシステムが nosuid オプションでマウントされている場合、setuid の実行は許可されません。
chmod を使用して ACL エントリを持つファイル上のファイルグループ所有者のアクセス権を変更すると、ファイルグループ所有者のアクセス権と ACL マスクの両方が、新しいアクセス権に変わります。新しい ACL マスクのアクセス権は、そのファイル上に ACL エントリを持つ追加ユーザーおよびグループの実効アクセス権を変更する場合があるので注意が必要です。getfacl(1) または ls(1) コマンドを使用して、すべての ACL エントリに適切なアクセス権が設定されていることを確認してください。