chmod コマンドを使用して、ZFS ファイルの ACL を変更できます。次の chmod 構文では、ACL を変更するために acl-specification を使って ACL の形式を指定しています。acl-specification の説明については、ACL を設定する構文の説明を参照してください。
ACL エントリを追加する
ユーザーの ACL エントリを追加する
% chmod A+acl-specification filename
index-ID を使用して ACL エントリを追加する
% chmod Aindex-ID+acl-specification filename
この構文では、指定した index-ID の位置に新しい ACL エントリが挿入されます。
ACL エントリを置き換える
% chmod A=acl-specification filename
% chmod Aindex-ID=acl-specification filename
ACL エントリを削除する
index-ID を使用して ACL エントリを削除する
% chmod Aindex-ID- filename
ユーザーを使用して ACL エントリを削除する
% chmod A-acl-specification filename
非簡易 ACL をファイルからすべて削除する
% chmod A- filename
ls – v コマンドを使用することで、詳細な ACL 情報が表示されます。例:
# ls -v file.1 -rw-r--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/read_xattr/read_attributes/read_acl/synchronize:allow 2:everyone@:read_data/read_xattr/read_attributes/read_acl/synchronize :allow
コンパクト形式の ACL の使用方法については、ZFS ファイルの ACL をコンパクト形式で設定および表示するを参照してください。
使用例 7-1 ZFS ファイルの簡易 ACL を変更するこのセクションでは、従来の UNIX エントリ、ユーザー、グループ、およびその他のみが ACL に含まれることを意味する簡易 ACL の設定および表示の例を示します。
次の例では、簡易 ACL が file.1 にあります。
# ls -v file.1 -rw-r--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/read_xattr/read_attributes/read_acl/synchronize:allow 2:everyone@:read_data/read_xattr/read_attributes/read_acl/synchronize :allow
次の例では、write_data アクセス権が group@ に付与されます。
# 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
次の例では、permissions on file.1 へのアクセス権の設定が 644 に戻されます。
# chmod 644 file.1 # ls -v file.1 -rw-r--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/read_xattr/read_attributes/read_acl/synchronize:allow 2:everyone@:read_data/read_xattr/read_attributes/read_acl/synchronize :allow使用例 7-2 ZFS ファイルに非簡易 ACL を設定する
このセクションでは、非簡易 ACL を設定して表示する例を紹介します。
次の例では、read_data/execute アクセス権が、test.dir ディレクトリのユーザー joe に追加されます。
# chmod A+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
次の例では、read_data/execute アクセス権がユーザー 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使用例 7-3 ACL を使用して ZFS ファイルのアクセス権を操作する
次の ACL の例では、ACL を設定してから、ファイルまたはディレクトリのアクセス権ビットを変更するまでの操作を説明します。
次の例では、簡易 ACL が file.2 にあります。
# ls -v file.2 -rw-r--r-- 1 root root 2693 Jul 20 14:26 file.2 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 allow アクセス権が everyone@ から削除されます。
# chmod A2- file.2 # ls -v file.2 -rw-r----- 1 root root 2693 Jul 20 14:26 file.2 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
この出力では、ファイルのアクセス権ビットが 644 から 640 に再設定されています。everyone@ の読み取りアクセス権は、everyone@ の ACL 許可アクセス権が削除されるときに、ファイルのアクセス権ビットから事実上削除されています。
次の例では、既存の ACL が everyone@ の read_data/write_data アクセス権に置き換わります。
# chmod A=everyone@:read_data/write_data:allow file.3 # ls -v file.3 -rw-rw-rw- 1 root root 2440 Jul 20 14:28 file.3 0:everyone@:read_data/write_data:allow
この出力では、chmod 構文を使って、owner@、group@、および everyone@ が読み取りまたは書き込みできるように、既存の ACL を read_data/write_data:allow アクセス権に事実上置き換えています。このモデルでは、everyone@ を使って、すべてのユーザーまたはグループへのアクセス権を指定しています。所有者とグループのアクセス権をオーバーライドする owner@ と group@ の ACL エントリがないので、アクセス権ビットは 666 に設定されます。
次の例では、既存の ACL がユーザー joe の読み取りアクセス権に置き換わります。
# chmod A=user:joe:read_data:allow file.3 # ls -v file.3 ----------+ 1 root root 2440 Jul 20 14:28 file.3 0:user:joe:read_data:allow
この出力では、従来のファイルアクセス権コンポーネントを表す owner@、group@、または everyone@ の ACL エントリがないので、ファイルアクセス権は 000 になります。ファイルの所有者は、次のようにアクセス権 (および ACL) を再設定することで、この問題を解決できます。
# chmod 655 file.3 # ls -v file.3 -rw-r-xr-x 1 root root 2440 Jul 20 14:28 file.3 0:owner@:execute:deny 1:owner@:read_data/write_data/append_data/read_xattr/write_xattr /read_attributes/write_attributes/read_acl/write_acl/write_owner /synchronize:allow 2:group@:read_data/read_xattr/execute/read_attributes/read_acl /synchronize:allow 3:everyone@:read_data/read_xattr/execute/read_attributes/read_acl /synchronize:allow使用例 7-4 ZFS ファイルの簡易 ACL を復元する
chmod コマンドを使用して、ファイルまたはディレクトリのすべての非簡易 ACL を削除できます。
次の例では、2 つの非簡易 ACL が test5.dir にあります。
# ls -dv test5.dir drwxr-xr-x+ 2 root root 2 Jul 20 14:32 test5.dir 0:user:lp:read_data:file_inherit:deny 1:user:joe:read_data:file_inherit:deny 2: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 3:group@:list_directory/read_data/read_xattr/execute/read_attributes /read_acl/synchronize:allow 4:everyone@:list_directory/read_data/read_xattr/execute/read_attributes /read_acl/synchronize:allow
次の例では、ユーザー joe と lp の非簡易 ACL が削除されます。残りの ACL には、owner@、group@、および everyone@ のデフォルト値が含まれています。
# chmod A- test5.dir # ls -dv test5.dir drwxr-xr-x 2 root root 2 Jul 20 14:32 test5.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使用例 7-5 ACL セットを ZFS ファイルに適用する
ACL セットを利用すれば、ACL アクセス権を個別に適用する必要がなくなります。セットの説明については、ZFS ACL セットを参照してください。
たとえば、次のように read_set を適用できます。
# 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 1:owner@:read_data/read_xattr/write_xattr/read_attributes /write_attributes/read_acl/write_acl/write_owner/synchronize:allow 2:group@:read_data/read_xattr/read_attributes/read_acl/synchronize:allow 3:everyone@:read_data/read_xattr/read_attributes/read_acl/synchronize :allow
write_set と read_set は次のように適用できます。
# chmod A+user:bob:read_set/write_set:allow file.2 # ls -v file.2 -rw-r--r--+ 1 root root 2693 Jul 20 14:26 file.2 0:user:bob:read_data/write_data/append_data/read_xattr/write_xattr /read_attributes/write_attributes/read_acl:allow 1:owner@:read_data/write_data/append_data/read_xattr/write_xattr /read_attributes/write_attributes/read_acl/write_acl/write_owner /synchronize:allow 2:group@:read_data/read_xattr/read_attributes/read_acl/synchronize:allow 3:everyone@:read_data/read_xattr/read_attributes/read_acl/synchronize :allow