Oracle Solaris ACL モデルは、NFSv4 が提供する UNIX クライアントと UNIX 以外のクライアントとの間の相互運用性を完全にサポートしています。Windows NT スタイルの ACL に似ており、標準のファイルアクセス権を使用する場合よりも、より詳細なアクセス制御が提供されます。chmod コマンドと ls コマンドを使用して ACL を設定および表示します。
ACL モデルには、アクセスチェックに影響する ALLOW と DENY の 2 種類のアクセス制御エントリ (ACE) があります。そのため、一連のアクセス権を定義する 1 つの ACE から、その ACE に定義されていないアクセス権が許可されているか拒否されているかを推論することはできません。
ACL およびバックアップ製品については、ほかのバックアップ製品を使用して ZFS データを保存するを参照してください。
ACL には 2 つの基本的な形式があります。
簡易 ACL – owner@、group@、および everyone@ として表される従来の UNIX ユーザーカテゴリのエントリのみを含みます。
新しく作成したファイルの場合、デフォルトの ACL には次のエントリがあります。
0:owner@:read_data/write_data/append_data/read_xattr/write_xattr /read_attributes/write_attributes/read_acl/write_acl/write_owner /synchronize:allow 1:group@:read_data/read_xattr/read_attributes/read_acl/synchronize:allow 2:everyone@:read_data/read_xattr/read_attributes/read_acl/synchronize :allow
新しく作成したディレクトリの場合、デフォルトの ACL には次のエントリがあります。
0:owner@:list_directory/read_data/add_file/write_data/add_subdirectory /append_data/read_xattr/write_xattr/execute/delete_child /read_attributes/write_attributes/read_acl/write_acl/write_owner /synchronize:allow 1:group@:list_directory/read_data/read_xattr/execute/read_attributes /read_acl/synchronize:allow 2:everyone@:list_directory/read_data/read_xattr/execute/read_attributes /read_acl/synchronize:allow
非簡易 ACL - 追加したユーザーカテゴリのエントリが含まれます。エントリには継承フラグも含まれる場合があります。または、従来とは異なる方法で順序付けられます。
非簡易エントリは、次の例のようになります。ここで、アクセス権はユーザー Bob に付与されています。
0:user:bob:read_data/write_data:file_inherit:allow
参照として次のサンプルエントリを使用して ACL エントリを構成する要素を理解します。これらの要素は簡易および非簡易 ACL の両方に適用されます。
0:user:bob:read_data/write_data:file_inherit:allow
エントリの先頭の番号 (例では数字のゼロ (0))。インデックスは特定のエントリを識別し、ACL 内のその他のエントリと区別します。
ユーザーカテゴリ。簡易 ACL では、owner@、group@、および everyone@ のエントリのみが設定されます。非簡易 ACL では、user:username および group:groupname が追加されます。この例では、エントリのタイプは user:bob です。
エントリタイプに許可または拒否されるアクセス権。この例では、ユーザー Bob のアクセス権は read_data と write_data です。
アクセス権がディレクトリ構造で伝播する方法を制御する ACL フラグのオプションのリストです。サンプルエントリでは、file_inherit もユーザー Bob に付与されます。
エントリのアクセス権を許可または拒否するかを決定します。この例では、Bob のアクセス権は許可されています。
次の表は、ACL エントリタイプをそれぞれ示しています。
次の表は、ACL アクセス特権を示しています。
|
次の表に、ACL delete および delete_child の動作の追加詳細を示します。
|
ACL セットは ACL アクセス権の組み合わせで構成されます。これらの ACL セットは事前に定義されたものであり、変更することはできません。
|
個々のアクセス権を個別に設定せずに ACL セットを適用できます。たとえば、read_set ACL セットを Bob に付与すると、ACL だけでなく、ファイルコンテンツやそれらの基本属性と拡張された属性を読み取るアクセス権が付与されます。
# chmod A+user:bob:read_set:allow file.1 # ls -v file.1 -r--r--r--+ 1 root root 206695 Jul 20 13:43 file.1 0:user:bob:read_data/read_xattr/read_attributes/read_acl:allow ...
ACL 継承では、新しく作成されたファイルまたはディレクトリで、親ディレクトリに対する既存のアクセス権を無視せずに継承することを意図された ACL を継承できます。
デフォルトでは、ACL は伝達されません。ディレクトリに非簡易 ACL を設定した場合でも、その ACL はそれ以降に作成されるディレクトリには継承されません。ACL を継承する場合は、ファイルまたはディレクトリにそのことを 指定する必要があります。
|
また、aclinherit ファイルシステムプロパティーを使用して、デフォルトの ACL 継承ポリシーをファイルシステムに設定することもできます。ポリシーの厳密度はプロパティーによって異なります。このプロパティーの詳細は、ACL プロパティーを参照してください。
ZFS ファイルの ACL 継承の設定の詳細は、ZFS ファイルで ACL 継承を設定するを参照してください。
ZFS ファイルシステムには、ACL 継承の特定の動作と、chmod 操作との ACL の関連を判定する ACL プロパティーが含まれています。これらのプロパティーは次のとおりです。
aclinherit – ACL 継承の動作を判定します。次の値を使用できます。
discard – 新しいオブジェクトの場合に、ファイルまたはディレクトリを作成するときに ACL エントリは継承されません。ファイルまたはディレクトリの ACL は、そのファイルまたはディレクトリのアクセス権モードと等価です。
noallow – 新しいオブジェクトの場合に、継承可能な ACL エントリのうち、アクセスタイプが deny のエントリだけが継承されます。
restricted - 新しいオブジェクトの場合に、ACL エントリが継承されるときに、write_owner および write_acl アクセス権が取り除かれます。
passthrough – プロパティーの値が passthrough に設定されている場合、ファイルは継承可能な ACE によって決定されるモードで作成されます。モードに影響を与える継承可能な ACE が存在しない場合、モードはアプリケーションから要求されたモードに従って設定されます。
passthrough-x – セマンティクスは次の点を除き passthrough と同じです。passthrough-x を有効にした場合、ファイル作成モードおよびモードに影響を与える継承可能な ACE で実行アクセス権が設定されている場合に限りファイルが実行 (x) アクセス権付きで作成されます。
aclinherit のデフォルトモードは、restricted です。
aclinherit モードの詳細は、ACL 継承モードを使用した ACL 継承を変更するを参照してください。
aclmode – ファイルが最初に作成されたとき、または chmod の操作中に ACL をどのように変更するかを制御するときに ACL の動作を変更します。次の値を使用できます。
discard – ファイルのモードを表さない ACL エントリをすべて削除します。これがデフォルト値です。
mask – ユーザーまたはグループのアクセス権を減らします。アクセス権は、それがファイルまたはディレクトリの所有者と同じ UID を持つユーザーエントリである場合を除いて、グループアクセス権ビットと同程度にまで低下します。この場合、ACL アクセス権は、所有者のアクセス権ビットと同程度にまで削減されます。また、明示的な ACL セット操作が実行されていない場合、マスク値はモードが変更しても ACL を保持します。
passthrough – ファイルまたはディレクトリの新しいモードを表す必要な ACL エントリを生成する以外、ACL が変更されないことを示します。
aclmode のデフォルトモードは、discard です。
aclmode プロパティーの使用に関する詳細は、使用例 46を参照してください。