グループのchmod(1)がACLマスクに影響するのはなぜですか?


17

私はこのUnixの動作を理解しようとしています(たまたまUbuntu 11.10でテストしています)。

$ touch foo
$ setfacl -m u:nobody:rwx foo
$ getfacl foo
# file: foo
# owner: michael
# group: michael
user::rw-
user:nobody:rwx
group::rw-
mask::rwx
other::r--

$ chmod g-rw foo
$ getfacl foo
# file: foo
# owner: michael
# group: michael
user::rw-
user:nobody:rwx         #effective:--x
group::rw-          #effective:---
mask::--x
other::r--

chmod(1)コマンドがACLマスクを更新したことに注意してください。なぜこれが起こるのですか?

SunOSのマニュアルページは言うべき、以下があります。

chmod(1)コマンドを使用して、ACLエントリを持つファイルのファイルグループ所有者のアクセス許可を変更すると、ファイルグループ所有者のアクセス許可とACLマスクの両方が新しいアクセス許可に変更されます。新しいACLマスクのアクセス許可は、ファイルにACLエントリを持つ追加のユーザーおよびグループの有効なアクセス許可を変更する可能性があることに注意してください。

chmod(1)にこの動作がなければ便利だからです。なぜそれが何をするのかを理解することによって、ファイルシステムのパーミッションをどのように設定するかをより良く設計できることを願っています。


2
今、私はunix.stackexchange.comでこれを尋ねるべきだったのだろうか。適切なサイトを選択することは常に困難です。
マイケルクロパット

回答:


24

それは考えていない場合はあなたのために便利になりchmod()、この動作を持っていませんでした。

人々が伝統的にUnixでの作業を期待していることが壊れてしまうため、非常に不便です。この振る舞いはあなたに役立ちますが、知っていました。

IEEE 1003.1eが標準にならず、1998年に廃止されたことは残念です。14年後の実際には、LinuxからFreeBSDSolarisまでの幅広いオペレーティングシステムが実際に実装する標準です。

IEEE 1003.1eワーキングドラフト#17は興味深い読み物になるので、お勧めします。付録B§23.3で、作業グループは、POSIX ACLが古いS_IRWXGグループのアクセス許可フラグに関して多少複雑な方法で動作するための詳細な8ページの理論的根拠を提供します。(TRUSIXの人々が10年前にほぼ同じ分析を提供したことは注目に値します。)ここですべてをコピーするつもりはありません。詳細については、規格案の根拠をお読みください。ここに非常に簡単な説明があります:

  • SunOSのマニュアルが間違っています。これは、必要があります読んで

    あなたが使用している場合はchmod(1)、ACLエントリを持つファイルのファイル・グループの所有者の権限を変更するためのコマンドをいずれかのファイル・グループの所有者の権限 ACLマスクを新しいアクセス権に変更されます。

    これは、現在のマニュアルページに書かれていることにも関わらず、あなたの質問で起こっているの見ることができる振る舞いです。また、ドラフトPOSIX標準で指定されている動作でもあります。場合CLASS_OBJ(SunのとTRUSIXの用語のためのACL_MASK)アクセス制御エントリが存在する、のグループのビットchmod()セットが、それは、そうでない場合は、設定されGROUP_OBJたアクセス制御エントリを。

  • これが当てはまらない場合、 `chmod()`で動作することを期待して `chmod()`でさまざまな標準的なことを行ったアプリケーションは、古い非ACL Unixで伝統的に動作しており、セキュリティホールを残すか、彼らはセキュリティホールを大きくしていると思う:

    • 従来のUnixアプリケーションは、ファイル、名前付きパイプ、デバイス、またはディレクトリへのすべてのアクセスを拒否できることを期待していますchmod(…,000)。ACLがある場合、これは、古いマップがにマップされている場合にのみ、すべてのユーザーおよびグループのアクセス許可をオフにます。これがなければ、古いファイルのアクセス許可を設定しても、エントリや他のユーザーには影響しませんが、驚くべきことに、オブジェクトにアクセスできます。S_IRWXGCLASS_OBJ000USERGROUP

      ファイルの許可ビットを一時的にアクセスなしにchmod 000変更してから再び変更することは、古いファイルロックメカニズムであり、Unixがアドバイザリーロックメカニズムを取得する前に使用されていました

    • 従来のUnixスクリプトはchmod go-rwx、オブジェクトの所有者のみがオブジェクトにアクセスできるようになり、実行できることを期待しています。繰り返しますが、ご覧のとおり、これはまだ 12年後の知恵です。そして再び、これは古いない限り動作しませんS_IRWXGにマップCLASS_OBJそれ以外のことをするので、それが存在する場合chmod、コマンドは任意のオフにしないだろうUSERか、GROUPアクセス制御エントリを所有者と何かにアクセス保持グループ非所有以外のユーザーにつながる、です所有者のみがアクセスできることが期待されます。

    • アクセス許可ビットがandACL から分離され、編集されているシステムではrwxrwxrwx、ほとんどの場合、ファイルのアクセス許可フラグが必要になります。もの。

      アクセス許可ビットがorACL とは別の方法でACLで編集されているシステムでは、 chmod(…,000)前述の問題が発生します。

参考文献


素晴らしい、それはすべて理にかなっています。マニュアルページでのあなたの説明は、行動についての私の疑いを確認しましたが、あなたの3つの説明は、私が問題について啓発されるために必要なものでした。私はデザインの理由を知っていることをとても嬉しく思っています。そして、あなたがあなたの前書きを投稿してくれてとてもうれしいです。
マイケルクロパット

@hopeseekr Linux、数百のGNUユーティリティ、および数千のサードパーティソフトウェアをいつでもフォークして、S_IRWXG許可を使用しないようにすることができます。完了したら電話してください。
トビア

0

この動作はPOSIX ACLエントリにのみ適用されます。これがここにある理由は、フォルダーがあり、そのフォルダー内にファイルが存在する場合、rwx(たとえば)フォルダーとファイルとしてaclを実行できるからです。ファイルのグループパーミッションがrw-である場合(典型的なシナリオとして)、ACLが明示的にrwxを示していても、マスクはaclにrw-の有効なパーミッションを与えます。

一方、ほぼ常に+ xであるディレクトリには、+ xも許可する有効なACLマスク権限があります。

要約すると、このマスクは基本的に、POSIX ACLセットのファイルとフォルダーのアクセス権を区別するために使用され、通常は実行できないはずのファイルが実行可能にならないようにします。


誰かがこれを読んでしまった場合、この答えはまったく間違っています。
pgoetz
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.