たとえば、/tmp/test フォルダーの ACL を次のように設定します。
/tmp/test の所有者は、ユーザー「gaspar」で、グループ「testgroup」のメンバーです。
ユーザー「testuser」はグループ「testgroup」のメンバーでもあり、このユーザー + 所有者 (ユーザー「gaspar」) にのみ rwx 権限を付与します。
また、/tmp/test 内で新しく作成されたすべてのファイル/ディレクトリに同じ ACL を自動的に設定する必要があります。
次のようにsetfaclを実行すると:
setfacl -Rdm u:testuser:rwx,g:testgroup:-,o::- /tmp/test/
getfacl -p /tmp/test/
権限を付与します:
# file: /tmp/test/
# owner: gaspar
# group: testgroup
user::rwx
group::---
other::---
default:user::rwx
default:user:testuser:rwx
default:group::---
default:group:testgroup:---
default:mask::rwx
default:other::---
そして、ユーザー「testuser」には /tmp/test フォルダーへの権限がありません。どこに問題があるのか、何を修正すればよいのか教えていただけますか?
このように ACL を設定すると (「d」オプションなし)、ユーザー「testuser」には必要な権限が与えられますが、明らかに新しく作成されたファイル/ディレクトリには同じ ACL がありません。
setfacl -Rm u:testuser:rwx,g:testgroup:-,o::- /tmp/test/
getfacl -p /tmp/test/
# file: /tmp/test/
# owner: gaspar
# group: testgroup
user::rwx
user:testuser:rwx
group::---
group:testgroup:---
mask::rwx
other::---
アドバイスをいただければ幸いです。
答え1
システムでは、再起動すると 内のファイルは/tmp
消えてしまいますよね? おそらく、これは永続的な解決策としては適切な場所ではありません。ディレクトリ内のすべての新しいファイル システム オブジェクトに ACL を適用するディレクトリに ACL を設定する場合は、2 つのマスクを設定することを忘れないでください: (1) ディレクトリ自体のマスクと (2) デフォルトのマスク (すべての新しいファイル システム オブジェクト用)。
setfacl -m u::rwx,g::r-x,o::--- /tmp/test
setfacl -d -m u::rwx,g::r-x,o::--- /tmp/test
上記では、-m
スイッチは のマスクであり/tmp/test
、-d
スイッチはマスクを同じディレクトリ内のすべての新しいファイルシステム オブジェクトのデフォルト マスクにします。これは 0750 に相当します。8 進数値も使用できます。
ユーザー、グループ、およびその他のマスクは、次のように同じように機能します。g:groupname:---
または組み合わせてu:username:---,g:groupname:---,o::---
機能します。ユーザー名またはグループ名を指定しないと、マスクが現在のユーザー/グループの所有権に適用されます。
すべてのソフトウェアが ACL を認識しているわけではないことに注意してください。たとえば、すべての SFTP/SCP クライアントがまだ ACL を認識しているわけではありません。
答え2
これは期待通りに動作しています。
man acl
デフォルトの ACL については次のように述べています。
ACL タイプ
すべてのオブジェクトには、そのオブジェクトへの任意のアクセスを制御するACLが関連付けられていると考えられます。このACLはアクセスACLと呼ばれます。さらに、ディレクトリには、そのディレクトリ内に作成されたオブジェクトの初期アクセスACLを管理します; このACLは、デフォルトの ACL。
(強調は筆者による)
ACL で指定したのは、ディレクトリに対する rwx 権限を所有者のみが持つことです。ディレクトリのデフォルトの ACL では、次のように指定されています。
- 内部に作成されたすべてのファイルの ACL は、親ディレクトリのデフォルトの ACL と同じに設定されます。
- その中に作成されたすべてのディレクトリのデフォルトACLは、親ディレクトリのデフォルトACLと同じに設定されます。
親ディレクトリへの権限を変更するか、アクセスを有効にするグループ/ユーザー ACL を追加すると、その中のすべてのファイルが期待どおりに動作するようになります。
答え3
継承 ACL のデフォルト セクションである「user::rwx と default:user::rwx」が何であるかを理解する必要があります。
詳細については、「man setfacl」を読む必要があります。また、次のドキュメントが役立つかもしれません。
https://www.ibm.com/support/knowledgecenter/en/SSLTBW_2.1.0/com.ibm.zos.v2r1.bpxb200/aclinhe.htm