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

印刷ビューの終了

更新: 2016 年 11 月
 
 

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

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

  • ZFS では、ACL に指定されている順序に従って、上から順番に ACL エントリが処理されます。

  • 指定したユーザーがアクセスを要求したユーザーと一致する ACL エントリのみが処理されます。

  • いったん付与した許可アクセス権は、その ACL アクセス権セットの後続の ACL 拒否エントリで拒否することはできません。

  • ファイルの所有者には write_acl アクセス権が無条件で付与されます。そのアクセス権を明示的に拒否した場合でも付与されます。それ以外の場合は、指定していないアクセス権はすべて拒否されます。

    拒否アクセス権が設定されている場合、またはアクセス権が失われている場合、ファイルの所有者またはスーパーユーザーに付与されるアクセス要求は、特権サブシステムによって決められます。このメカニズムによって、ファイルの所有者が所有しているファイルから拒否されることがなくなり、スーパーユーザーがファイルを回復するために変更できるようになります。

ACL の設定に関するコマンド構文

ACL を設定または変更するには、chmod コマンドを使用します。このコマンドの構文は、演算子 (+=、または -) を入力する前に A を指定する点以外は、ファイルのアクセス権ビットを設定する構文に似ています。

  • 簡易 ACL のコマンド構文

    chmod [options] A[index]{+|=}owner@ |group@ |everyone@: \
      access-permissions/...[:inheritance-flags]:deny | allow file
    chmod [options] A-owner@, group@, everyone@: \
      access-permissions/...[:inheritance-flags]:deny | allow file ...
    chmod [options] A[index]- file
  • 非簡易 ACL のコマンド構文

    chmod [options] A[index]{+|=}user|group:name: \
    access-permissions/...[:inheritance-flags]:deny | allow file
    chmod [options] A-user|group:name: \
    access-permissions/...[:inheritance-flags]:deny | allow file ...
    chmod [options] A[index]- file

    chmod コマンドは次の演算子を使用します。

  • A+ は ACL エントリを追加します。

  • A= は ACL エントリを置き換えます。

    ファイルの ACL 全体を置き換えるには、インデックス ID を指定せずにこの演算子を使用します。次の例では、file.1 の ACL エントリが削除され、everyone@ の単一エントリに置き換えられます。

    % chmod A=everyone@:read_data:allow file.1
  • A- は ACL エントリを削除します。

    ファイルのすべての非簡易 ACL エントリを例外なく削除するには、この演算子を使用して削除する各エントリをリストせずにファイル名を指定します。

    % chmod A- filename

    このコマンド構文を使用して、ファイルに簡易 ACL を復元します。コマンドを発行すると、簡易 ACL を構成する owner@group@、および everyone@ のエントリのみが残ります。


Caution

注意  -  既存の ACL の変更には注意が必要です。インデックスなしで演算子を使用するのと、インデックスを使用して演算子を使用するのとでは効果が異なります。たとえば、chmod A= は ACL 全体を置き換えますが、chmod A3= はインデックス番号 3 を持つ既存のエントリのみを置き換えます。


アクセス権と継承のフラグは、表 8および表 10に掲載されている一意の文字で表現されます。ZFS ACL を設定すると、それらのアクセス権に対応する文字を使用する (コンパクトモード) か、完全なアクセス権を入力する (冗長モード) ことができます。

この例では、両方のコマンドでユーザー Joe に file.1 での読み取りと実行のアクセス権を付与しています。

  • chmod A+user:joe:rx:allow file.1

  • chmod A+user:joe:read_data/execute:allow file.1

同様に、ユーザー John に新しく作成した dir.2 とそのファイルに対する継承可能な読み取り、書き込み、および実行のアクセス権を付与するには、次のいずれかのコマンドを使用できます。

  • chmod A+user:john:rwx:fd:allow dir.2

  • chmod A+user:john:read_data/write_data/execute:file_inherit/dir_inherit:allow dir.2

ACL 情報を表示する

ls コマンドでは、2 つの形式のいずれかで ACL 情報を表示できます。–v オプションを使用すると、全体または詳細形式でアクセス権が表示されます。–V オプションは、アクセス権とフラグを表す文字を使用してコンパクトな出力を生成します。

次の例は、同じ ACL 情報が冗長とコンパクトの両方の形式でどのように表示されるかを示しています。

ls -v file.1
-rw-r--r--   1 root     root      206695 Jul 20 14:27 file.1
0:owner@:read_data/write_data/append_data/read_attributes
/write_xattr/read_xattr/write_attributes/read_acl/write_acl
/write_owner/synchronize:allow
1:group@:read_data/read_attributes/read_xattr/read_acl
/synchronize:allow
2:everyone@:read_data/append_data/read_xattr/read_acl
/synchronize:allow

# ls -V file.1
-rw-r--r--   1 root     root      206695 Jul 20 14:27 file.1
owner@:rw-p--aARWcCos:-------:allow
group@:r-----a-R-c--s:-------:allow
everyone@:r-----a-R-c--s:-------:allow

各ユーザーカテゴリのアクセス権についての説明は、表 8を参照してください。

ZFS ファイルの ACL を変更する

このセクションでは、ACL を設定および表示するサンプルコマンドを示します。

次の例では、write_data アクセス権が group@ に付与されます。group@ のインデックスは 1 です。

# chmod A1=group@:read_data/write_data:allow file.1
# ls -v file.1
-rw-rw-r--   1 root     root      206695 Jul 20 13:43 file.1
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/write_data:allow
2:everyone@:read_data/read_xattr/read_attributes/read_acl/synchronize
:allow

次の例では、test.dir ディレクトリでの read_data/execute アクセス権が、ユーザー Joe に追加されます。

# chmod A0+user:joe:read_data/execute:allow test.dir
# ls -dv test.dir
drwxr-xr-x+  2 root     root           2 Jul 20 14:23 test.dir
0:user:joe:list_directory/read_data/execute:allow
1: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
2:group@:list_directory/read_data/read_xattr/execute/read_attributes
/read_acl/synchronize:allow
3:everyone@:list_directory/read_data/read_xattr/execute/read_attributes
/read_acl/synchronize:allow

次の例では、ユーザー Joe のアクセス権が削除されます。

# chmod A0- test.dir
# ls -dv test.dir
drwxr-xr-x   2 root     root           2 Jul 20 14:23 test.dir
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 の関連

ZFS ファイルでは、UNIX アクセス権ビットは ACL エントリに対応しますが、キャッシュに格納されます。ファイルのアクセス権ビットを変更すると、ファイルの ACL がそれに応じて更新されます。同様に、ファイルの ACL を変更すると、アクセス権ビットも変更されます。

アクセス権ビットの詳細は、chmod(1)を参照してください。

次の例は、ファイルまたはディレクトリの ACL とアクセス権ビットの間の関係、および一方のアクセス権が変更されると他方にどのような影響を与えるかを示しています。

使用例 45  ACL およびアクセス権ビット

最初の例は、file.2 の次の ACL で始まります。このアクセス権ビットは 644 に設定されています。

# ls -v file.2
-rw-r--r--   1 root     root        2693 Jul 20 14:26 file.2アクセス権ビットは 644。
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

chmod コマンドは、everyone@ の ACL エントリを削除します。その結果、everyone の読み取りアクセス権ビットも削除され 640 に変更されます。

# chmod A2- file.2everyone@ のアクセス権が削除される
# ls -v file.2
-rw-r-----   1 root     root        2693 Jul 20 14:26 file.2アクセス権ビットは 640 になる。
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
everyone@ エントリが削除される。

次に、ACL は everyone@read_data/write_data アクセス権に置き換えられます。ownergroup のアクセス権をオーバーライドする owner@ または group@ の ACL エントリはありません。そのため、アクセス権ビットは 666 になります。

# chmod A=everyone@:rw:allow file.2
# ls -v file.2
-rw-rw-rw-   1 root     root        2440 Jul 20 14:28 file.3アクセス権ビットは 666 になる。
0:everyone@:read_data/write_data:allow
その他すべての ACL エントリが削除される。

次に、ACL はユーザー Joe の読み取りアクセス権で置き換えられます。ただし、コマンドは簡易 ACL エントリを残しません。その結果、アクセス権ビットは 000 に設定され、file.2 への Joe のアクセスは拒否されます。ファイルは事実上、アクセス不能になります。

# chmod A=user:joe:r:allow file.2
# ls -v file.2
----------+  1 root     root        2440 Jul 20 14:28 file.3アクセス権ビットは 000 になる。
0:user:joe:read_data:allow
簡易 ACL エントリは存在しない。

最後に、アクセス権ビットを設定すると、どのように ACL が更新されるかを示します。file.2 のビットは 655 に設定されます。デフォルトの簡易 ACL アクセス権が自動的に設定されます。

# chmod 655 file.2
# ls -v file.3
-rw-r-xr-x   1 root     root        2440 Jul 20 14:28 file.3アクセス権ビットは 655 に設定される。
0:user:joe:read_data:allow
1:owner@:execute:deny655 ビットに基づき、ACL 実行アクセス権は拒否される。
2:owner@:read_data/write_data/append_data/read_xattr/write_xattrデフォルト ACL エントリが復元される。
/read_attributes/write_attributes/read_acl/write_acl/write_owner
/synchronize:allow
3:group@:read_data/read_xattr/execute/read_attributes/read_acl
/synchronize:allow
4:everyone@:read_data/read_xattr/execute/read_attributes/read_acl
/synchronize:allow
使用例 46  ACL プロパティーと変更された ACL アクセス権

次の例は、aclmodeaclinherit の特定のプロパティー値が ACL 動作にどのような影響を与えるかを示しています。これらのプロパティーが設定されている場合は、ファイルまたはディレクトリの ACL アクセス権は、所有グループに一致して縮小または拡張されます。

aclmode プロパティーは mask に設定され、aclinherit プロパティーはプールの restricted に設定されていると仮定します。また、元のファイルとグループ所有権および ACL 権限は次のようであるとします。

# zfs set aclmode=mask system1/data
# zfs set aclinherit=restricted system1/data

# ls -lV file.1
-rwxrwx---+  1 root     root      206695 Aug 30 16:03 file.1
user:amy:r-----a-R-c---:-------:allow
user:rory:r-----a-R-c---:-------:allow
group:sysadmin:rw-p--aARWc---:-------:allow
group:staff:rw-p--aARWc---:-------:allow
owner@:rwxp--aARWcCos:-------:allow
group@:rwxp--aARWc--s:-------:allow
everyone@:------a-R-c--s:-------:allow

これら 2 つのプロパティーに設定されている値の意味を理解するには、ACL プロパティーを参照してください。

chown 操作は、file.1 の所有権を Amy とグループ Staff に変更します。

# chown amy:staff file.1

Amy は、file.1 のアクセス権ビットを 640 に変更します。以前に設定された ACL プロパティーのため、ACL 内のグループに対するアクセス権は所有する Staff のアクセス権を超えないように削減されます。

# su - amy
$ chmod 640 file.1
$ ls -lV file.1
-rw-r-----+  1 amy      staff     206695 Aug 30 16:03 file.1
user:amy:r-----a-R-c---:-------:allow
user:rory:r-----a-R-c---:-------:allow
group:sysadmin:r-----a-R-c---:-------:allow
group:staff:r-----a-R-c---:-------:allow
owner@:rw-p--aARWcCos:-------:allow
group@:r-----a-R-c--s:-------:allow
everyone@:------a-R-c--s:-------:allow

Amy はアクセス権ビットを 770 に変更します。その結果、ACL 内のグループのアクセス権も所有グループ Staff のアクセス権に一致するように変更されます。

$ chmod 770 file.1
$ ls -lV file.1
-rwxrwx---+  1 amy      staff     206695 Aug 30 16:03 file.1
user:amy:r-----a-R-c---:-------:allow
user:rory:r-----a-R-c---:-------:allow
group:sysadmin:rw-p--aARWc---:-------:allow
group:staff:rw-p--aARWc---:-------:allow
owner@:rwxp--aARWcCos:-------:allow
group@:rwxp--aARWc--s:-------:allow
everyone@:------a-R-c--s:-------:allow