ZFS ファイルのアクセス権をコンパクト形式で設定および表示できます。コンパクト形式では、一意の 14 個の文字を使ってアクセス権を表現します。アクセス権を表現するためのコンパクト形式の文字については、表 8–2 および表 8–3 を参照してください。
ファイルとディレクトリのコンパクト形式の ACL リストは、ls -V コマンドを使用して表示できます。次に例を示します。
# ls -V file.1 -rw-r--r-- 1 root root 206663 Jun 17 10:07 file.1 owner@:--x-----------:------:deny owner@:rw-p---A-W-Co-:------:allow group@:-wxp----------:------:deny group@:r-------------:------:allow everyone@:-wxp---A-W-Co-:------:deny everyone@:r-----a-R-c--s:------:allow |
このコンパクト形式の ACL 出力について説明します。
この所有者は、このファイルを実行するアクセス権を拒否されます (x=execute)。
この所有者は、このファイルの内容を読み取って変更することができます (rw=read_data/write_data、p=append_data)。この所有者は、タイムスタンプ、拡張属性、ACL などのファイルの属性を変更することもできます (A=write_xattr、W=write_attributes、C=write_acl)。さらに、この所有者はファイルの所有権を変更できます (o=write_owner)。
このグループは、このファイルを変更および実行するアクセス権を拒否されます (write_data、p=append_data、x=execute)。
このグループには、このファイルを読み取るアクセス権が付与されます (r=read_data)。
ファイルの所有者でもファイルの所有グループのメンバーでもないユーザーはすべて、このファイルの内容を実行および変更するアクセス権、およびこのファイルの属性を変更するアクセス権を拒否されます (w=write_data、x=execute、p =append_data、A=write_xattr 、W=write_attributes、C=write_acl、o=write_owner)。
ファイルの所有者でもファイルの所有グループのメンバーでもないユーザーはすべて、このファイルおよびこのファイルの属性の読み取りアクセス権を付与されます (r=read_data、a=append_data、 R=read_xattr、c=read_acl、s=synchronize)。synchronize の許可アクセス権は、現在のところ実装されていません。
コンパクト形式の ACL には、冗長形式の ACL と比べて次の利点があります。
アクセス権を chmod コマンドに指定するときに、順対応引数として指定できます。
アクセス権がないことを示すハイフン (-) 文字は、削除してもかまいません。必要な文字だけ指定します。
アクセス権と継承フラグは、同じ方法で設定します。
冗長形式の ACL の使用方法については、「ZFS ファイルの ACL を冗長形式で設定および表示する」を参照してください。
# ls -V file.1 -rw-r--r-- 1 root root 206663 Jun 17 10:07 file.1 owner@:--x-----------:------:deny owner@:rw-p---A-W-Co-:------:allow group@:-wxp----------:------:deny group@:r-------------:------:allow everyone@:-wxp---A-W-Co-:------:deny everyone@:r-----a-R-c--s:------:allow |
次の例では、read_data/execute アクセス権が、file.1 のユーザー gozer に追加されます。
# chmod A+user:gozer:rx:allow file.1 # ls -V file.1 -rw-r--r--+ 1 root root 206663 Jun 17 10:07 file.1 user:gozer:r-x-----------:------:allow owner@:--x-----------:------:deny owner@:rw-p---A-W-Co-:------:allow group@:-wxp----------:------:deny group@:r-------------:------:allow everyone@:-wxp---A-W-Co-:------:deny everyone@:r-----a-R-c--s:------:allow |
また、所定の場所 (この例では 4) に新しい ACL エントリを挿入しても、ユーザー gozer に同じアクセス権を追加することができます。これにより、場所 4–6 の既存の ACL が下に移動します。次に例を示します。
# chmod A4+user:gozer:rx:allow file.1 # ls -V file.1 -rw-r--r--+ 1 root root 206663 Jun 17 10:16 file.1 owner@:--x-----------:------:deny owner@:rw-p---A-W-Co-:------:allow group@:-wxp----------:------:deny group@:r-------------:------:allow user:gozer:r-x-----------:------:allow everyone@:-wxp---A-W-Co-:------:deny everyone@:r-----a-R-c--s:------:allow |
次の例では、ユーザー gozer に読み取り、書き込み、および実行権が付与されます。これらのアクセス権は、新しく作成されたファイルとディレクトリに継承されます。
# chmod A+user:gozer:rwx:fd:allow dir.2 # ls -dV dir.2 drwxr-xr-x+ 2 root root 2 Jun 17 10:19 dir.2 user:gozer:rwx-----------:fd----:allow owner@:--------------:------:deny owner@:rwxp---A-W-Co-:------:allow group@:-w-p----------:------:deny group@:r-x-----------:------:allow everyone@:-w-p---A-W-Co-:------:deny everyone@:r-x---a-R-c--s:------:allow |
ls -V の出力にあるアクセス権と継承フラグをコンパクト形式の chmod にカット&ペーストすることもできます。たとえば、ユーザー gozer に割り当てられている dir.2 ディレクトリのアクセス権と継承フラグを同じ dir.2 上のユーザー cindys に複製するには、そのアクセス権と継承フラグ (rwx-----------:fd----:allow) を chmod コマンドに次のようにコピー&ペーストします。
# chmod A+user:cindys:rwx-----------:fd----:allow dir.2 # ls -dV dir.2 drwxr-xr-x+ 2 root root 2 Jun 17 10:19 dir.2 user:cindys:rwx-----------:fd----:allow user:gozer:rwx-----------:fd----:allow owner@:--------------:------:deny owner@:rwxp---A-W-Co-:------:allow group@:-w-p----------:------:deny group@:r-x-----------:------:allow everyone@:-w-p---A-W-Co-:------:deny everyone@:r-x---a-R-c--s:------:allow |
aclinherit プロパティーが passthrough に設定されているファイルシステムは、継承時に ACL エントリに加えられた変更を除く、継承可能なすべての ACL エントリを継承します。このプロパティーが passthrough に設定されている場合、作成されるファイルのアクセス権は継承可能な ACL によって決定されます。アクセス権に影響を与える継承可能な ACE が存在しない場合、アクセス権はアプリケーションから要求されたアクセス権に従って設定されます。
次の例では、コンパクト形式の ACL 構文を使用して、aclinherit プロパティーを passthrough に設定することによってアクセス権を継承する方法を示します。
次の例では、ACL を test1.dir ディレクトリに設定して継承を強制します。この構文によって新しく作成されたファイルには、owner@、group@、および everyone@ ACL エントリが作成されます。新しく作成されたディレクトリには、owner@、group@、および everyone@ ACL エントリが継承されます。これらに加え、ディレクトリには、新しく作成されるディレクトリとファイルに ACE を伝達する 6 つの ACE も継承されます。
# zfs set aclinherit=passthrough tank/cindys # pwd /tank/cindys # 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 Jun 17 10:37 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 Jun 17 10:38 file.1 owner@:rwxpdDaARWcCos:------:allow group@:rwxp----------:------:allow everyone@:--------------:------:allow |
次の例では、新しく作成されたディレクトリに、このディレクトリへのアクセスを制御する ACE と、この新しく作成されたディレクトリの子にあとで伝達するための ACE が継承されます。
# mkdir subdir.1 # ls -dV subdir.1 drwxrwx---+ 2 root root 2 Jun 17 10:39 subdir.1 owner@:rwxpdDaARWcCos:fdi---:allow owner@:rwxpdDaARWcCos:------:allow group@:rwxp----------:fdi---:allow group@:rwxp----------:------:allow everyone@:--------------:fdi---:allow everyone@:--------------:------:allow |
-di-- エントリと f-i--- エントリは継承の伝達に関するもので、アクセス制御時には考慮されません。次の例では、簡易 ACL の設定されたファイルが別のディレクトリ作成されます。このディレクトリには、継承される ACE はありません。
# cd /tank/cindys # mkdir test2.dir # cd test2.dir # touch file.2 # ls -V file.2 -rw-r--r-- 1 root root 0 Jun 17 10:40 file.2 owner@:--x-----------:------:deny owner@:rw-p---A-W-Co-:------:allow group@:-wxp----------:------:deny group@:r-------------:------:allow everyone@:-wxp---A-W-Co-:------:deny everyone@:r-----a-R-c--s:------:allow |
aclinherit プロパティーが passthrough-x に設定されていると、ファイル作成モードおよびそのモードに影響する継承可能な ACE モードで実行権が設定されている場合に限り、owner@、group@、または everyone@ の実行 (x) 権を使用してファイルが作成されます。
次の例では、aclinherit プロパティーを passthrough-x に設定して実行権を継承する方法を示します。
# zfs set aclinherit=passthrough-x tank/cindys |
次の ACL は /tank/cindys/test1.dir で設定されており、owner@、 group@、および everyone@ のファイルに対する実行可能 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 Jun 17 10:41 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 Jun 17 10:42 test1.dir/file1 owner@:rw-pdDaARWcCos:------:allow group@:rw-p----------:------:allow everyone@:--------------:------:allow |
次に、t という実行可能ファイルが、cc コンパイラを使用して testdir ディレクトリーに作成されます。
# cc -o t t.c # ls -V t -rwxrwx---+ 1 root root 7396 Jun 17 10:50 t owner@:rwxpdDaARWcCos:------:allow group@:rwxp----------:------:allow everyone@:--------------:------:allow |
cc が要求したアクセス権は 0777 であるため、アクセス権は 0770 になります。その結果、owner@、group@、および everyone@ エントリから実行権が継承されます。