ZFS ファイルのアクセス権をコンパクト形式で設定および表示できます。コンパクト形式では、一意の 14 個の文字を使ってアクセス権を表現します。コンパクトなアクセス権を表現する文字の一覧は、Table 7–2 およびTable 7–4 に記載されています。
ファイルとディレクトリのコンパクト形式の ACL リストは、ls –V コマンドを使用して表示できます。例:
# 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
コンパクト形式の ACL 出力について説明します。
この所有者は、このファイルの内容を読み取って変更することができます (rw=read_data/write_data)、(p=append_data)。この所有者は、タイムスタンプ、拡張属性、ACL などのファイル属性を変更することもできます (a=read_attributes、 W=write_xattr、 R=read_xattr、 A=write_attributes、 c=read_acl、 C=write_acl)。さらに、この所有者はファイルの所有権を変更することもできます (o=write_owner)。
synchronize (s) アクセス権は、現在のところ実装されていません。
グループには、ファイルへの読み取りアクセス権 (r= read_data) およびファイルの属性への読み取りアクセス権 (a=read_attributes 、R=read_xattr、c= read_acl) が付与されます。
synchronize (s) アクセス権は、現在のところ実装されていません。
ユーザーやグループ以外の全員には、このファイルおよびこのファイルの属性を読み取るアクセス権が付与されます (r=read_data、a=append_data、R=read_xattr、c=read_acl、s=synchronize)。
synchronize (s) アクセス権は、現在のところ実装されていません。
コンパクト形式の ACL には、冗長形式の ACL と比べて次の利点があります。
アクセス権を chmod コマンドに指定するときに、順対応引数として指定できます。
アクセス権がないことを表すハイフン (-) 文字は、省略してもかまいません。必要な文字だけを指定する必要があります。
アクセス権と継承フラグは、同じ方法で設定します。
冗長形式の ACL の使用方法については、ZFS ファイルの ACL を冗長形式で設定および表示するを参照してください。
使用例 7-11 コンパクト形式で ACL を設定および表示する次の例では、簡易 ACL が file.1 にあります。
# 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
次の例では、ユーザー joe に file.1 の read_data/execute アクセス権が追加されます。
# chmod A+user:joe:rx:allow file.1 # ls -V file.1 -rw-r--r--+ 1 root root 206695 Jul 20 14:27 file.1 user:joe:r-x-----------:-------:allow owner@:rw-p--aARWcCos:-------:allow group@:r-----a-R-c--s:-------:allow everyone@:r-----a-R-c--s:-------:allow
次の例では、コンパクト形式を使ってユーザー joe に読み取り、書き込み、および実行アクセス権を付与します。これらのアクセス権は、新しく作成されたファイルとディレクトリに継承されます。
# chmod A+user:joe:rwx:fd:allow dir.2 # ls -dV dir.2 drwxr-xr-x+ 2 root root 2 Jul 20 14:33 dir.2 user:joe:rwx-----------:fd-----:allow owner@:rwxp-DaARWcCos:-------:allow group@:r-x---a-R-c--s:-------:allow everyone@:r-x---a-R-c--s:-------:allow
ls –V の出力にあるアクセス権と継承フラグをコンパクト形式の chmod にカット & ペーストすることもできます。たとえば、ユーザー joe についての dir.2 のアクセス権と継承フラグを dir.2 上のユーザー cindy に複製するには、アクセス権と継承フラグ (rwx-----------:fd-----:allow) を chmod コマンドにコピー & ペーストします。例:
# chmod A+user:cindy:rwx-----------:fd-----:allow dir.2 # ls -dV dir.2 drwxr-xr-x+ 2 root root 2 Jul 20 14:33 dir.2 user:cindy:rwx-----------:fd-----:allow user:joe:rwx-----------:fd-----:allow owner@:rwxp-DaARWcCos:-------:allow group@:r-x---a-R-c--s:-------:allow everyone@:r-x---a-R-c--s:-------:allow使用例 7-12 ACL 継承モードが passthrough に設定された ACL 継承
aclinherit プロパティーが passthrough に設定されているファイルシステムは、継承時に ACL エントリに加えられた変更を除く、継承可能なすべての ACL エントリを継承します。このプロパティーが passthrough に設定されている場合、作成されるファイルのアクセス権モードは継承可能な ACL によって決定されます。アクセス権モードに影響を与える継承可能な ACL が存在しない場合、アクセス権モードはアプリケーションから要求されたモードに従って設定されます。
次の例では、コンパクト形式の ACL 構文を使用して、aclinherit モードを passthrough に設定することによってアクセス権ビットを継承する方法を示します。
次の例では、ACL を test1.dir に設定して継承を強制します。この構文によって新しく作成されたファイルには、owner@、group@、および everyone@ ACL エントリが作成されます。新しく作成されたディレクトリには、owner@、group@、および everyone@ ACL エントリが継承されます。
# zfs set aclinherit=passthrough tank/cindy # pwd /tank/cindy # mkdir test1.dir
# chmod A=owner@:rwxpcCosRrWaAdD:fd:allow,group@:rwxp:fd:allow, everyone@::fd:allow test1.dir # ls -Vd test1.dir drwxrwx---+ 2 root root 2 Jul 20 14:42 test1.dir owner@:rwxpdDaARWcCos:fd-----:allow group@:rwxp----------:fd-----:allow everyone@:--------------:fd-----:allow
次の例では、新しく作成されるファイルに継承されるように指定されていた ACL が、新しく作成されたファイルに継承されます。
# cd test1.dir # touch file.1 # ls -V file.1 -rwxrwx---+ 1 root root 0 Jul 20 14:44 file.1 owner@:rwxpdDaARWcCos:------I:allow group@:rwxp----------:------I:allow everyone@:--------------:------I:allow
次の例では、新しく作成されたディレクトリに、このディレクトリへのアクセスを制御する ACE と、この新しく作成されたディレクトリの子にあとで伝達するための ACE が継承されます。
# mkdir subdir.1 # ls -dV subdir.1 drwxrwx---+ 2 root root 2 Jul 20 14:45 subdir.1 owner@:rwxpdDaARWcCos:fd----I:allow group@:rwxp----------:fd----I:allow everyone@:--------------:fd----I:allow
fd----I エントリは継承の伝達に関するもので、アクセス制御時には考慮されません。
次の例では、簡易 ACL を持つファイルが、継承される ACE が存在しない別のディレクトリに作成されます。
# cd /tank/cindy # mkdir test2.dir # cd test2.dir # touch file.2 # ls -V file.2 -rw-r--r-- 1 root root 0 Jul 20 14:48 file.2 owner@:rw-p--aARWcCos:-------:allow group@:r-----a-R-c--s:-------:allow everyone@:r-----a-R-c--s:-------:allow使用例 7-13 ACL 継承モードが passthrough-x に設定された ACL 継承
aclinherit=passthrough-x を有効にすると、ファイル作成モードおよびファイル作成モードに影響する継承可能な ACE モードで実行権が設定されている場合にのみ、owner@、group@、または everyone@ の実行 (x) 権を使用してファイルが作成されます。
次の例では、aclinherit モードを passthrough-x に設定して実行権を継承する方法を示します。
# zfs set aclinherit=passthrough-x tank/cindy
次の ACL は /tank/cindy/test1.dir で設定されており、owner@ のファイルに対する実行可能 ACL 継承を提供します。
# chmod A=owner@:rwxpcCosRrWaAdD:fd:allow,group@:rwxp:fd:allow, everyone@::fd:allow test1.dir # ls -Vd test1.dir drwxrwx---+ 2 root root 2 Jul 20 14:50 test1.dir owner@:rwxpdDaARWcCos:fd-----:allow group@:rwxp----------:fd-----:allow everyone@:--------------:fd-----:allow
要求されたアクセス権 0666 を使用してファイル (file1) が作成されます。この結果、アクセス権 0660 が設定されます。作成モードで要求していないため、実行権は継承されません。
# touch test1.dir/file1 # ls -V test1.dir/file1 -rw-rw----+ 1 root root 0 Jul 20 14:52 test1.dir/file1 owner@:rw-pdDaARWcCos:------I:allow group@:rw-p----------:------I:allow everyone@:--------------:------I:allow
次に、t という実行可能ファイルが、cc コンパイラを使用して testdir ディレクトリーに作成されます。
# cc -o t t.c # ls -V t -rwxrwx---+ 1 root root 7396 Dec 3 15:19 t owner@:rwxpdDaARWcCos:------I:allow group@:rwxp----------:------I:allow everyone@:--------------:------I:allow
cc が要求したアクセス権は 0777 であるため、アクセス権は 0770 になります。その結果、owner@、group@、および everyone@ エントリから実行権が継承されます。
使用例 7-14 ZFS ファイルでの ACL と chmod 操作との相互作用次の例では、特定の aclmode および aclinherit プロパティー値が、既存の ACL と chmod 操作との関連にどのように影響するかについて説明します。この操作は、ファイルまたはディレクトリアクセス権を変更して、所有グループに一致するように既存の ACL アクセス権を縮小または拡張させるものです。
この例では、aclmode プロパティーは mask に設定され、aclinherit プロパティーは restricted に設定されます。この例の ACL アクセス権は、変更中のアクセス権をより示しやすくするコンパクトモードで表示されます。
元のファイルおよびグループ所有権と ACL アクセス権は次のとおりです。
# zfs set aclmode=mask pond/whoville # zfs set aclinherit=restricted pond/whoville # 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
chown 操作によって file.1 のファイル所有権が変更され、所有しているユーザー amy によって出力が表示されます。例:
# chown amy:staff file.1 # su - amy $ 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
次の chmod 操作では、アクセス権がより制限の厳しいモードに変更されます。この例では、変更された sysadmin グループと staff グループの ACL アクセス権が、所有しているグループのアクセス権を超えることはありません。
$ 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
次の chmod 操作では、アクセス権がより制限の緩やかなモードに変更されます。この例では、変更された sysadmin グループと staff グループの ACL アクセス権が、所有しているグループと同じアクセス権を許可するように復元されます。
$ 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