最初にファイルを作成し、標準の権限とACLエントリを確認します。
$ touch file; ls -l file; getfacl file
-rw-r--r-- 1 user user 0 Jul 30 16:26 file
# file: file
# owner: user
# group: user
user::rw-
group::r--
other::r--
次に、ファイルにACLマスクを設定し、標準のアクセス許可とACLエントリをもう一度確認します。
$ setfacl -m mask:rwx file
$ ls -l file; getfacl file
-rw-rwxr--+ 1 user user 0 Jul 30 16:26 file
# file: file
# owner: user
# group: user
user::rw-
group::r--
mask::rwx
other::r--
ACLマスクとともに、ファイルの標準グループ権限も変更されていることに注意してください。
問題のディストリビューションはDebian Linux 7.6とCentOS 7です。
編集
この時点で、標準のファイルグループのアクセス許可とACLマスクの関係を調査しているときに思いついたいくつかの発見を共有したいと思いました。ここに私が見つけた経験的観察があります:
ACLマスクは変更できます。
setfacl -m m:<perms>
コマンドで直接設定する。chmod
コマンドを使用してファイルグループのアクセス許可を変更する(ACLマスクが既に存在する場合。ファイルに指定されたユーザーまたはグループのACLアクセス許可がない場合はオプションであるため、存在しない可能性があります)。マスクは、マスクがsetfaclによって直接設定されているか、chmod(自動計算されていない)を使用してファイルグループの権限を変更することによって直接設定されている場合にのみ、最大アクセス権を適用します(ACLマスクの権限を超えるACLエントリが存在する場合)。 ACLエントリを変更すると、ACLマスクの自動再計算がトリガーされ、「強制モード」が実質的にオフになります。
ACLを使用すると、標準のファイルグループのアクセス許可に暗黙的に影響するいくつかの副作用があります。
setfacl -b
コマンドを使用して)すべての拡張ACLエントリを削除すると、グループの権限は読み取り専用のままになります。これは、より厳密なACLマスクにのみ適用され、よりソフトなACLマスク(より多くのアクセス許可)は、元のファイルグループのアクセス許可が削除された後、永続的に変更しません。UNIXファイルのアクセス許可がACLエントリに同意しない場合、またはその逆の場合は意味がありません。それに応じて、マニュアルページ(acl(5)
)はあなたが求めることを述べています:
ACLエントリとファイル許可ビットの対応
ACLによって定義された許可は、ファイル許可ビットによって指定された許可のスーパーセットです。
ファイルの所有者、グループ、およびその他の権限と特定のACLエントリの間には対応関係があります。所有者の権限はACL_USER_OBJエントリの権限に対応しています。 ACLにACL_MASKエントリがある場合、グループの権限はACL_MASKエントリの権限に対応します。それ以外の場合、ACLにACL_MASKエントリがない場合、グループの権限はACL_GROUP_OBJエントリの権限に対応します。その他の権限は、ACL_OTHER_OBJエントリの権限に対応しています。
ファイルの所有者、グループ、およびその他の権限は、対応するACLエントリの権限と常に一致します。ファイル許可ビットを変更すると、関連するACLエントリーが変更され、これらのACLエントリーを変更すると、ファイル許可ビットが変更されます。
議論に応じた補遺:
ACLマスクとファイルグループのアクセス許可を組み合わせる理由は何ですか?その背後にある論理は何ですか?
良い説明は here です。本質的にはマスクは
[...]グループクラスのエントリが付与する権限の上限。
この上限のプロパティにより、ACLがサポートされた後、ACLを認識しないPOSIX.1アプリケーションが突然、予期せずに追加のアクセス許可を付与し始めることがなくなります。
最小限のACLでは、グループクラスの権限は所有グループの権限と同じです。拡張ACLでは、グループクラスに追加のユーザーまたはグループのエントリを含めることができます。これにより問題が発生します。これらの追加のエントリの一部には、所有グループエントリに含まれていないアクセス許可が含まれている可能性があるため、所有グループエントリのアクセス許可はグループクラスのアクセス許可と異なる場合があります。
この問題は、マスクエントリのおかげで解決されます。最小限のACLで、グループクラスの権限は、所有するグループエントリの権限にマップされます。拡張ACLでは、グループクラスの権限はマスクエントリの権限にマップされますが、所有グループエントリは引き続き所有グループの権限を定義します。グループクラスの権限のマッピングは一定ではなくなりました。
私はこのリンクを見たときに正確に何が起こっているのかを最終的に理解しました ACLの処理
具体的には、そのマスクは基本的にNAMED USERとすべてのGROUP権限に取って代わり、機能します。これは、次の場合を意味します。
うまくいけば、これが役立ちます。
その背後にある論理は何ですか?
ロジックは完全に壊れているため、POSIX ACLは純粋で役に立たないナンセンスです。
ACLの概念を持たないアプリとの互換性を維持することを目的としていた場合 標準プリミティブなUNIXの「ugo」モデルでは、グループの権限をクリアするすべてのアプリがACLによって追加されたアクセスを効果的に撤回しているため、最初は実際に失敗しました。