web-dev-qa-db-ja.com

ファイルシステムACLの「マスク」の正確な目的は何ですか?

ディレクトリにデフォルトACLを適用すると、次の2つのシナリオでdefault:maskまたは単にmaskが表示されます。

シナリオ1

-bash-4.2$ ls -ld test/
 drwxr-x---. 2 test test 4096 Oct 15 19:12 test/

-bash-4.2$ setfacl -d -m u:arif:rwx test/

-bash-4.2$ getfacl --omit-header test
 user::rwx
 group::r-x
 other::---
 default:user::rwx
 default:user:arif:rwx
 default:group::r-x
 default:mask::rwx
 default:other::---

シナリオ2

-bash-4.2$ ls -dl dir/
 drwxr-x---. 2 test test 4096 Oct 15 18:17 dir/

-bash-4.2$ getfacl dir
 # file: dir
 # owner: test
 # group: test
 user::rwx
 group::r-x
 other::---

-bash-4.2$ setfacl -m user:arif:rwx dir

-bash-4.2$ getfacl --omit-header dir
 user::rwx
 user:arif:rwx
 group::r-x
 mask::rwx
 other::---

では、ここでmaskの目的は何ですか?

4
muhammad

この3ビットACLシステムは、TRUSIXにルーツがあります。 FreeBSD、MacOS、AIX、Illumos、SolarisのNFS4スタイルのシステムなど、他のACLシステムは動作が異なり、このmaskアクセス制御エントリの概念はありません。

maskは、名前が示すように、ユーザーとユーザーのアクセス制御エントリによって付与されるmask out権限に適用されるマスクですグループ。これは、ファイル所有者や「その他」のエントリ以外のアクセス制御エントリによって付与される最大のアクセス許可です。その3ビットは、これらの他のエントリの3ビットとandedされます。

したがって、たとえば、アクセス制御エントリによってユーザーに_rw-_が付与されていても、マスクが_r--_である場合、ユーザーは実際には_r--_アクセスしか持っていません。逆に、ユーザーにアクセス制御エントリによって_--x_のみが付与されている場合、rwxのマスクは追加の権限を付与せず、ユーザーには_--x_アクセス権のみが付与されます。

親ディレクトリのdefault maskは、その中に作成されるものに適用されるマスク設定です。それは継承の一形態です。

なぜ

IEEE 1003.1eが標準になったことがなく、1998年に撤回されたのは残念です。実際には、19年後には、 Linux から FreeBSD)までの幅広いオペレーティングシステムが標準となっています。 to Solaris (後者の場合はNFS4スタイルのACLとともに)—実際に実装します。

IEEE 1003.1eワーキングドラフト#17は興味深い読み物になり、私はそれをお勧めします。付録B§23.3では、ワーキンググループは、古い_S_IRWXG_グループ権限フラグに関してPOSIX ACLが機能するやや複雑な方法について、詳細な8ページの根拠を提供します。 (10年前にTRUSIXの人々がほぼ同じ分析を提供したことは注目に値します。)これはマスクの存在理由をカバーします。

  • 従来のUnixアプリケーションは、chmod(…,000)を使用して、ファイル、名前付きパイプ、デバイス、またはディレクトリへのすべてのアクセスを拒否できることを期待しています。 ACLが存在する場合、マスクがあり、古い_S_IRWXG_がそれにマップされている場合にのみ、allユーザーおよびグループのアクセス許可がオフになります。これがない場合、古いファイルのアクセス許可を_000_に設定しても、所有者以外のuserまたはgroupエントリには影響せず、驚くべきことに、他のユーザーは引き続きオブジェクトにアクセスできます。

    _chmod 000_を使用してファイルの許可ビットを一時的にアクセス不可に変更してから再度変更するのは古いファイルロックメカニズムで、Unixがアドバイザリロックメカニズムを取得する前に使用されていました —ご覧のとおり—人々は今でも使用しています21世紀でも 。 (アドバイザリロックは、1990年代後半以降、setlockなどの移植可能なよく知られたツールを備えたスクリプトから簡単に使用できます。)

  • 従来のUnixスクリプトは_chmod go-rwx_を実行でき、オブジェクトの所有者のみがオブジェクトにアクセスできることを期待しています。繰り返しになりますが、これはマスクがなく、古い_S_IRWXG_権限がそれにマップされていない限り機能しません。それ以外の場合、そのchmodコマンドは、所有者以外のuserまたはgroupアクセス制御エントリをオフにせず、所有者以外のユーザーと所有者以外のグループがアクセスを保持するため所有者はがアクセスできると期待されているもののみです。

    そして再び —ご覧のとおり—この種類のchmodコマンドは、まだ受け取られていた知恵でした 12年後。理論的根拠はまだ保持されています。

  • マスクメカニズムのない他のアプローチには欠陥があります。
    • 許可ビットが別の方法で分離されており、ACLでandedされている代替システムでは、ほとんどの場合、ファイル許可フラグをrwxrwxrwxにする必要があります。世界が書き込み可能なものだと思うものを見て文句を言う。
    • 許可ビットが別の方法で分離され、ACLでoredされた代替システムでは、前述のchmod(…,000)問題が発生します。

したがって、マスク付きのACLシステムです。

参考文献

8
JdeBP