GNU/Linux >> Linux の 問題 >  >> Linux

ACL はファイルの有効なアクセス許可をどのように計算しますか?

effective パーミッションは、実際の (本当の?) パーミッションと mask の AND を取ることによって形成されます。 . mask 以降 あなたのファイルは rw- です 、すべての effective パーミッションには x があります ビットがオフになっています。


簡単な答え:実行ビットをオンにしてマスクする場合は、 setfacl を使用して明示的に設定する必要があります touch以降 .セキュリティは暗黙の設定を禁止します。

setfacl -n -m m::rwx foo

「-n」は、マスクの再計算を抑制します (必要ない場合があります)。
「m::rwx」は、マスク値を「rwx」に設定します。 「m::x」はすべての読み取りと書き込みを無効にすることに注意してください。

マスクが「rw-」である理由を示すことができません。 touch がデフォルトのディレクトリであると仮定します OP の例全体で変更されないファイルを作成します。

<オール>
  • 「foo」のディレクトリエントリは、所有者「root」を表示する必要があります (ディレクトリに SUID ビットが設定されているため、sudo コマンドとグループ「guards」のためです。権限はデフォルトの「-rw-...r--」になります)ディレクトリ '-...r-x...' のグループ権限 (小さな s として表示される SUID ビットのため)。

  • 次は、ディレクトリのデフォルトである ACLes です。 ACL が継承されることを考えると、ACL が作成されることはなく、ACL マスクがディレクトリのデフォルトの「rwx」になることはないと思います。

  • しかし、それらが作成された場合、新しい ACLe がデフォルトからプライミングされ、再びマスクが「rwx」のままになることが予想されます。デフォルトから準備されていない場合、これはデフォルト ACL のアイデアを無効にしているように見えます。「デフォルト」ACL は、指定されたユーザーと指定されたグループの ACL のみを提供します。

    ここで、マスク ACLe はどうあるべきかという問題が生じます。デフォルトのマスクエントリから「rwx」になると思います。しかし、空白のマスクで作成でき、あらゆる種類の法律用語が適用されます。

    1. user::rw-、group::r-x、other::r--、group:wheel:rwx、group:guards:rwx、および mask:::(未設定) の一時的な ACL を使用して、 setfacl のドキュメント 、ファイルの作成にも同じ規則が適用されると仮定します。

    句があります:

    <ブロック引用>

    ACL に名前付きユーザーまたは名前付きグループ エントリが含まれていて、マスク エントリが存在しない場合、グループ エントリと同じ権限を含むマスク エントリが作成されます。

    これにより、ACL グループ エントリがファイル ディレクトリ エントリから作成された場合は ACL マスクが "r-x" に設定され、ACL グループ エントリがデフォルト ACL から作成された場合は "r-x" に設定されます。 (イーサウェイ、この場合、結果は同じです。)

    次の句もあります:

    <ブロック引用>

    デフォルト ACL に名前付きユーザー エントリまたは名前付きグループ エントリが含まれていて、マスク エントリが存在しない場合、デフォルトのデフォルト ACL のグループ エントリと同じ権限を含むマスク エントリが追加されます。 ... マスク エントリの権限は、マスク エントリの影響を受けるすべての権限の結合を含むようにさらに調整されます。

    このルールが適用される場合、マスクは "r-x" (前の節と同じロジック) で始まり、"マスク エントリの影響を受けるすべてのアクセス許可の結合" になるように調整されます。

    「マスクエントリの影響を受ける権限」は setfacl で定義されていません コマンドのドキュメント。 POSIX ACL ドキュメントには次のように記載されています:

    <ブロック引用>

    マスクは、所有グループのすべてのアクセス許可と、すべてのユーザーおよびグループ エントリの組み合わせです。

    加法的である「結合」という言葉を与えると、「組み合わせ」は論理和と読みます。つまり、いずれかのグループまたはユーザー ACLe が「x」権限を持っている場合、マスクには「x」が含まれます。

    1. このすべてのロジックにより、OP の例のマスク値は、どの論理パスがたどられたかに関係なく、'rwx' になるはずです。

    execute の x はマスクに表示されないため、上記の推論には誤りがあるはずです。

    したがって、一般的なドキュメント ソースから「隠されている」(またはバグが見つかった) マスクの計算方法に関する何らかのルールが存在する必要があります。

    私の結論は、'x' は常に無条件に削除されており、ドキュメントは緩いということです。

    この変更はおそらく「セキュリティ」を正当化するために行われました -- ファイルは暗黙的に実行可能ではなく、作成後に実行可能ビットをオンにする必要があります。


    Linux
    1. Linux で Umask が初期ファイル/ディレクトリのアクセス許可を制御する方法を理解する

    2. 「sudo:/etc/sudoers is world writable」 – sudoers ファイルのパーミッションを修正する方法

    3. 出力をファイルに追加する方法は?

    1. ファイルの最後に改行を追加するにはどうすればよいですか?

    2. テールはファイル全体を読み取りますか?

    3. system() の出力をファイルにリダイレクトする方法は?

    1. Xdg-openコマンドは、ファイルを開くために使用するアプリケーションをどのように認識しますか?

    2. コマンドSed‘1!g; h; $!d’は、ファイルの内容をどのように逆にしますか?

    3. stat コマンドはファイルのブロックをどのように計算しますか?