Oracle Solaris ZFS 管理ガイド

ZFS ファイルに ACL を設定する

ZFS と一緒に実装される ACL は、ACL エントリで構成されます。ZFS の ACL モデルは「純粋」です。つまり、すべてのファイルに ACL が含まれます。この ACL は、従来の UNIX の owner/group/other エントリを表現しているだけという点で、全体的に見れば簡易な ACLです。

ファイルのアクセス権を変更した場合には、それに応じてファイルの ACL が更新されます。また、ファイルまたはディレクトリへのアクセスをユーザーに許可するための非簡易 ACL を削除しても、グループまたは全員にアクセスを許可するファイルまたはディレクトリのアクセス権ビットが設定されている場合には、そのユーザーはそのファイルまたはディレクトリに引き続きアクセスできます。アクセス制御に関するすべての決定は、ファイルまたはディレクトリの ACL に表現されているアクセス権によって制御されます。

ZFS ファイルの ACL アクセス権に関する主な規則は、次のとおりです。

ディレクトリに非簡易 ACL を設定しても、その ACL はそのディレクトリの子に自動的に継承されることはありません。非簡易 ACL を設定し、それがそのディレクトリの子に継承されるようにする場合は、ACL 継承フラグを使用する必要があります。詳細については、表 8–3 および 「ZFS ファイルの ACL 継承を冗長形式で設定する」を参照してください。

新しいファイルを作成すると、umask の値に応じて、次のようなデフォルトの簡易 ACL が適用されます。


$ ls -v file.1
-rw-r--r--   1 root     root      206663 May 20 14:09 file.1
     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

この例では、ACL エントリがユーザーカテゴリ (owner@group@everyone@) ごとに 2 つずつ存在しています。1 つは deny アクセス権のエントリ、もう 1 つは allow アクセス権のエントリです。

このファイル ACL について説明します。

0:owner@

この所有者は、このファイルでの実行権を拒否されます (execute:deny)。

1:owner@

この所有者は、このファイルの内容を読み取って変更することができます (read_data/write_data/append_data)。この所有者は、タイムスタンプ、拡張属性、ACL などのファイル属性を変更することもできます (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)。synchronize の許可アクセス権は、現在のところ実装されていません。

新しいディレクトリを作成すると、umask の値に応じて、次のようなデフォルトのディレクトリ ACL が適用されます。


$ ls -dv dir.1
drwxr-xr-x   2 root     root           2 May 20 14:11 dir.1
     0:owner@::deny
     1:owner@:list_directory/read_data/add_file/write_data/add_subdirectory
         /append_data/write_xattr/execute/write_attributes/write_acl
         /write_owner:allow
     2:group@:add_file/write_data/add_subdirectory/append_data:deny
     3:group@:list_directory/read_data/execute:allow
     4:everyone@:add_file/write_data/add_subdirectory/append_data/write_xattr
         /write_attributes/write_acl/write_owner:deny
     5:everyone@:list_directory/read_data/read_xattr/execute/read_attributes
         /read_acl/synchronize:allow

このディレクトリ ACL について説明します。

0:owner@

この所有者の deny リストは、このディレクトリについて空です (::deny)。

1:owner@

この所有者は、ディレクトリの内容を読み取って変更すること (list_directory/read_data/add_file/write_data/add_subdirectory/append_data)、内容を検索すること (execute)、およびタイムスタンプ、拡張属性、ACL などのディレクトリ属性を変更すること (write_xattr/write_attributes/write_acl) が許可されます。また、この所有者はディレクトリの所有権を変更できます (write_owner:allow)。

2:group@

このグループは、ディレクトリの内容を追加または変更できません (add_file/write_data/add_subdirectory/append_data:deny)。

3:group@

このグループは、ディレクトリの内容を表示して読み取ることができます。また、このグループには、ディレクトリの内容を検索するアクセス権が許可されます (list_directory/read_data/execute:allow)。

4:everyone@

ファイルの所有者でもファイルの所有グループのメンバーでもないユーザーはすべて、ディレクトリの内容の追加または変更を行うアクセス権を拒否されます (add_file/write_data/add_subdirectory/append_data)。さらに、ディレクトリの任意の属性を変更するアクセス権も拒否されます (write_xattr/write_attributes/write_acl/write_owner:deny)。

5:everyone@

ファイルの所有者でもファイルの所有グループのメンバーでもないユーザーはすべて、ディレクトリの内容と属性に対する読み取りアクセス権と実行権を付与されます (list_directory/read_data/read_xattr/execute/read_attributes/read_acl/synchronize:allow)。synchronize の許可アクセス権は、現在のところ実装されていません。