ZFS と一緒に実装される ACL は、ACL エントリで構成されます。ZFS の ACL モデルは「純粋」です。つまり、すべてのファイルに ACL が含まれます。この ACL は、従来の UNIX の owner/group/other エントリを表現しているだけという点で、全体的に見れば簡易な ACLです。
ファイルのアクセス権を変更した場合には、それに応じてファイルの ACL が更新されます。また、ファイルまたはディレクトリへのアクセスをユーザーに許可するための非簡易 ACL を削除しても、グループまたは全員にアクセスを許可するファイルまたはディレクトリのアクセス権ビットが設定されている場合には、そのユーザーはそのファイルまたはディレクトリに引き続きアクセスできます。アクセス制御に関するすべての決定は、ファイルまたはディレクトリの ACL に表現されているアクセス権によって制御されます。
ZFS ファイルの ACL アクセス権に関する主な規則は、次のとおりです。
ZFS では、ACL に指定されている順序に従って、上から順番に ACL エントリが処理されます。
ACL エントリが処理されるのは、アクセスを要求したユーザーが ACL エントリに設定されているユーザーと一致した場合だけです。
いったん付与した allow アクセス権は、その ACL アクセス権セットの後続の ACL deny エントリで拒否することはできません。
ファイルの所有者には write_acl アクセス権が無条件で付与されます。そのアクセス権を明示的に拒否した場合でも付与されます。それ以外のユーザーの場合は、指定していないアクセス権はすべて拒否されます。
deny アクセス権が設定されている場合、またはファイルのアクセス権が失われている場合でも、ファイルの所有者またはスーパーユーザーに許可されるアクセス要求は、特権サブシステムによって決められます。この機構によって、ファイルの所有者が所有しているファイルから拒否されることがなくなり、スーパーユーザーがファイルを回復するために変更できるようになります。
ディレクトリに非簡易 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 について説明します。
この所有者は、このファイルでの実行権を拒否されます (execute:deny)。
この所有者は、このファイルの内容を読み取って変更することができます (read_data/write_data/append_data)。この所有者は、タイムスタンプ、拡張属性、ACL などのファイル属性を変更することもできます (write_xattr/write_attributes /write_acl)。さらに、この所有者はファイルの所有権を変更できます (write_owner:allow)。
このグループは、このファイルを変更および実行するアクセス権を拒否されます (write_data/append_data/execute:deny)。
このグループには、ファイルの読み取りアクセス権が付与されます (read_data:allow)。
ファイルの所有者でもファイルの所有グループのメンバーでもないユーザーはすべて、このファイルの内容を実行および変更するアクセス権、およびこのファイルの属性を変更するアクセス権を拒否されます (write_data/append_data/write_xattr/execute/write_attributes/write_acl/write_owner:deny)。
ファイルの所有者でもファイルの所有グループのメンバーでもないユーザーはすべて、このファイルおよびこのファイルの属性の読み取りアクセス権を付与されます (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 |
この所有者の deny リストは、このディレクトリについて空です (::deny)。
この所有者は、ディレクトリの内容を読み取って変更すること (list_directory/read_data/add_file/write_data/add_subdirectory/append_data)、内容を検索すること (execute)、およびタイムスタンプ、拡張属性、ACL などのディレクトリ属性を変更すること (write_xattr/write_attributes/write_acl) が許可されます。また、この所有者はディレクトリの所有権を変更できます (write_owner:allow)。
このグループは、ディレクトリの内容を追加または変更できません (add_file/write_data/add_subdirectory/append_data:deny)。
このグループは、ディレクトリの内容を表示して読み取ることができます。また、このグループには、ディレクトリの内容を検索するアクセス権が許可されます (list_directory/read_data/execute:allow)。
ファイルの所有者でもファイルの所有グループのメンバーでもないユーザーはすべて、ディレクトリの内容の追加または変更を行うアクセス権を拒否されます (add_file/write_data/add_subdirectory/append_data)。さらに、ディレクトリの任意の属性を変更するアクセス権も拒否されます (write_xattr/write_attributes/write_acl/write_owner:deny)。
ファイルの所有者でもファイルの所有グループのメンバーでもないユーザーはすべて、ディレクトリの内容と属性に対する読み取りアクセス権と実行権を付与されます (list_directory/read_data/read_xattr/execute/read_attributes/read_acl/synchronize:allow)。synchronize の許可アクセス権は、現在のところ実装されていません。