Oracle Solaris ZFS 管理ガイド

ZFS ファイルの ACL をコンパクト形式で設定および表示する

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 出力について説明します。

owner@

この所有者は、このファイルを実行するアクセス権を拒否されます (x=execute)。

owner@

この所有者は、このファイルの内容を読み取って変更することができます (rw=read_data/write_datap=append_data)。この所有者は、タイムスタンプ、拡張属性、ACL などのファイルの属性を変更することもできます (A=write_xattrW=write_attributesC=write_acl)。さらに、この所有者はファイルの所有権を変更できます (o=write_owner)。

group@

このグループは、このファイルを変更および実行するアクセス権を拒否されます (write_datap=append_datax=execute)。

group@

このグループには、このファイルを読み取るアクセス権が付与されます (r=read_data)。

everyone@

ファイルの所有者でもファイルの所有グループのメンバーでもないユーザーはすべて、このファイルの内容を実行および変更するアクセス権、およびこのファイルの属性を変更するアクセス権を拒否されます (w=write_datax=executep =append_dataA=write_xattr W=write_attributesC=write_aclo=write_owner)。

everyone@

ファイルの所有者でもファイルの所有グループのメンバーでもないユーザーはすべて、このファイルおよびこのファイルの属性の読み取りアクセス権を付与されます (r=read_dataa=append_data R=read_xattrc=read_acls=synchronize)。synchronize の許可アクセス権は、現在のところ実装されていません。

コンパクト形式の ACL には、冗長形式の ACL と比べて次の利点があります。

冗長形式の ACL の使用方法については、「ZFS ファイルの ACL を冗長形式で設定および表示する」を参照してください。


例 8–10 コンパクト形式で ACL を設定および表示する

次の例では、簡易 ACL が file.1 にあります。


# 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


例 8–11 aclinherit プロパティーを passthrough に設定した場合の ACL 継承

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


例 8–12 aclinherit プロパティーを passthrough-x に設定した場合の ACL 継承

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@ エントリから実行権が継承されます。