Go to main content
Oracle® Solaris 11.3 での ZFS ファイルシステムの管理

印刷ビューの終了

更新: 2016 年 11 月
 
 

Oracle Solaris ACL モデル

Oracle Solaris ACL モデルは、NFSv4 が提供する UNIX クライアントと UNIX 以外のクライアントとの間の相互運用性を完全にサポートしています。Windows NT スタイルの ACL に似ており、標準のファイルアクセス権を使用する場合よりも、より詳細なアクセス制御が提供されます。chmod コマンドと ls コマンドを使用して ACL を設定および表示します。

ACL モデルには、アクセスチェックに影響する ALLOWDENY の 2 種類のアクセス制御エントリ (ACE) があります。そのため、一連のアクセス権を定義する 1 つの ACE から、その ACE に定義されていないアクセス権が許可されているか拒否されているかを推論することはできません。

ACL およびバックアップ製品については、ほかのバックアップ製品を使用して ZFS データを保存するを参照してください。

ACL 形式

ACL には 2 つの基本的な形式があります。

  • 簡易 ACLowner@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 エントリを構成する要素を理解します。これらの要素は簡易および非簡易 ACL の両方に適用されます。

0:user:bob:read_data/write_data:file_inherit:allow
インデックス

エントリの先頭の番号 (例では数字のゼロ (0))。インデックスは特定のエントリを識別し、ACL 内のその他のエントリと区別します。

ACL エントリタイプ

ユーザーカテゴリ。簡易 ACL では、owner@group@、および everyone@ のエントリのみが設定されます。非簡易 ACL では、user:username および group:groupname が追加されます。この例では、エントリのタイプは user:bob です。

アクセス特権

エントリタイプに許可または拒否されるアクセス権。この例では、ユーザー Bob のアクセス権は read_datawrite_data です。

継承フラグ

アクセス権がディレクトリ構造で伝播する方法を制御する ACL フラグのオプションのリストです。サンプルエントリでは、file_inherit もユーザー Bob に付与されます。

アクセス権の制御

エントリのアクセス権を許可または拒否するかを決定します。この例では、Bob のアクセス権は許可されています。

次の表は、ACL エントリタイプをそれぞれ示しています。

表 7  ACL エントリタイプ
ACL エントリタイプ
説明
owner@
オブジェクトの所有者に許可するアクセス権を指定します。
group@
オブジェクトを所有するグループに許可するアクセス権を指定します。
everyone@
ほかのどの ACL エントリにも一致しないすべてのユーザーまたはグループに許可するアクセス権を指定します。
user
ユーザー名を使って、オブジェクトに追加するユーザーに許可するアクセス権を指定します。ユーザー名またはユーザー ID を含む ACL-entry-ID を含める必要があります。値が有効な数値 UID またはユーザー名でない場合、ACL エントリタイプは無効です。
group
グループ名を使って、オブジェクトに追加するグループに許可するアクセス権を指定します。グループ名またはグループ ID を含む ACL エントリ ID を含める必要があります。値が有効な数値 GID またはグループ名でない場合、ACL エントリタイプは無効です。

次の表は、ACL アクセス特権を示しています。

表 8  ACL アクセス特権
アクセス特権
アクセス特権のコンパクト表現
説明
add_file
w
ディレクトリに新しいファイルを追加するためのアクセス権。
add_subdirectory
p
ディレクトリ上でサブディレクトリを作成するためのアクセス権。
append_data
p
ファイルを変更するアクセス権。ただし、ファイルの終わり (EOF) から始まる場合のみ。
delete
d
ファイルを削除するためのアクセス権。delete アクセス権の特定の動作の詳細については、表 9を参照してください。
delete_child
D
ディレクトリ内のファイルまたはディレクトリを削除するためのアクセス権。delete_child アクセス権の特定の動作の詳細については、表 9を参照してください。
execute
x
ファイルを実行するためのアクセス権またはディレクトリの内容を検索するためのアクセス権。
list_directory
r
ディレクトリの内容を表示するためのアクセス権。
read_acl
c
ACL (ls) を読み取るためのアクセス権。
read_attributes
a
ファイルの基本属性 (ACL 以外) を読み取るアクセス権。これは stat レベル属性に相当します。このアクセスマスクビットを許可したエンティティーは、ls(1) および stat(2) を実行できる状態になります。
read_data
r
ファイルの内容を読み取るためのアクセス権。
read_xattr
R
ファイルの拡張属性を読み取るためのアクセス権。または、ファイルの拡張属性ディレクトリの検索を実行するためのアクセス権。
synchronize
s
読み取り操作と書き込み操作が同期された ZFS サーバーでファイルにローカルアクセスするアクセス権。
write_xattr
W
拡張属性を作成するためのアクセス権。または、拡張属性ディレクトリに書き込みむためのアクセス権。
このアクセス権を許可したユーザーは、ファイルの拡張属性ディレクトリを作成できます。属性ファイルのアクセス権を使って、その属性にユーザーがアクセスできるかどうかを制御します。
write_data
w
ファイルの内容を変更または置き換えるためのアクセス権。
write_attributes
A
ファイルまたはディレクトリに関連付けられた時間を任意の値に変更するためのアクセス権。
write_acl
C
ACL を書き込むためのアクセス権。つまり chmod コマンドを使用して ACL を変更することができます。
write_owner
o
ファイルの所有者またはグループを変更するためのアクセス権。つまり、ファイルに対して chown または chgrp コマンドを実行することができます。
ファイルの所有権を取得するためのアクセス権。または、ファイルのグループ所有権をユーザーが所属するグループに変更するためのアクセス権。ファイルまたはグループの所有権を任意のユーザーまたはグループに変更する場合は、PRIV_FILE_CHOWN 権限が必要です。

次の表に、ACL delete および delete_child の動作の追加詳細を示します。

表 9  ACL delete および delete_child アクセス権の動作
親ディレクトリのアクセス権
ターゲットオブジェクトのアクセス権
" " (空)
ACL は delete を許可
ACL は delete を拒否
未指定のアクセス権を削除
ACL は delete_child を許可
パーミット
パーミット
パーミット
ACL は delete_child を拒否
パーミット
拒否
拒否
ACL は writeexecute だけを許可
パーミット
パーミット
パーミット
ACL は writeexecute を拒否
パーミット
拒否
拒否

ZFS ACL セット

ACL セットは ACL アクセス権の組み合わせで構成されます。これらの ACL セットは事前に定義されたものであり、変更することはできません。

ACL セット名
含まれる ACL アクセス権
full_set
すべてのアクセス権
modify_set
write_aclwrite_owner を除くすべてのアクセス権
read_set
read_dataread_attributes read_xattr、および read_acl
write_set
write_dataappend_datawrite_attributes 、および write_xattr

個々のアクセス権を個別に設定せずに 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 はそれ以降に作成されるディレクトリには継承されません。ACL を継承する場合は、ファイルまたはディレクトリにそのことを 指定する必要があります。


注 -  現在、successful_accessfailed_access、および inherited フラグは SMB サーバーにのみ適用されます。

次の表は、オプションの継承フラグを示しています。

表 10  ACL 継承フラグ
継承フラグ
継承フラグのコンパクト表現
説明
file_inherit
f
親ディレクトリの ACL をそのディレクトリのファイルにのみ継承します。
dir_inherit
d
親ディレクトリの ACL をそのディレクトリのサブディレクトリにのみ継承します。
inherit_only
i
親ディレクトリから ACL を継承します。新しく作成したファイルまたはサブディレクトリだけに適用され、ディレクトリ自体には適用されません。このフラグを使用する場合は、何を継承するかを指定するために、file_inherit フラグまたは dir_inherit フラグ、あるいはその両方を指定する必要があります。
no_propagate
n
親ディレクトリの ACL をそのディレクトリの第 1 レベルの内容にのみ継承します。第 2 レベル以降の内容には継承しません。このフラグを使用する場合は、何を継承するかを指定するために、file_inherit フラグまたは dir_inherit フラグ、あるいはその両方を指定する必要があります。
-
N/A
アクセス権は付与されていません。
successful_access
S
正常にアクセスしたときに、アラームまたは監査記録を開始するかどうかを指定します。このフラグは監査またはアラームの ACE タイプで使用されます。
failed_access
F
アクセスに失敗したときに、アラームまたは監査記録を開始するかどうかを指定します。このフラグは監査またはアラームの ACE タイプで使用されます。
inherited
I
ACE が継承されたことを示します。

また、aclinherit ファイルシステムプロパティーを使用して、デフォルトの ACL 継承ポリシーをファイルシステムに設定することもできます。ポリシーの厳密度はプロパティーによって異なります。このプロパティーの詳細は、ACL プロパティーを参照してください。

ZFS ファイルの ACL 継承の設定の詳細は、ZFS ファイルで ACL 継承を設定するを参照してください。

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を参照してください。