この例に関する私の質問は次のとおりです。

この例に関する私の質問は次のとおりです。

FreeBSDでNFSv4 ACLを使用し、サブファイル+ディレクトリ(およびそのサブディレクトリの子/孫)の継承されたACLに影響を与えるようにディレクトリのACLを変更した場合、再計算されたポイントは何ですか? ?プロセスはどのように管理されますか?

具体的な例:既存のディレクトリ階層があり、特定のグループに対する拒否または許可を追加する新しいACLを追加したいとします。最上位ディレクトリに対して次のいずれかのコマンドを実行します。

  • setfacl -a 0 g:mygroup:dD:fd:deny /path_to_dir
  • setfacl -x g:mygroup:dD:fd:allow /path_to_dir

ただし、ドキュメントでは、ACLの伝播がどのように機能するか、実際に発生するタイミング、または発生するか(または発生する必要があるか)は不明です。また、間違ったACLを使用してファイルをコピーした場合、親エントリでACLを再計算する方法が見つからない場合や、このような状況が発生しても同様です。

この例に関する私の質問は次のとおりです。

  1. 単一のsetfaclコマンドを実行するだけで、これらのルールの伝播をトリガし(必要な場合)、階層に「カスケード」を適用できます。、含まれているすべてのオブジェクトの権限/ ACLが更新されますか?
  2. または、setfaclコマンド中にランタイム再計算は必要ありませんか?それはおそらく、FreeBSDがファイルアクセス中に最上位ディレクトリから下向きに「即時」ACLを計算するからです。、有効なACLを事前に計算して保存し、ACLが変更されたときに影響を受けるすべてのオブジェクトに対して更新する代わりに?
  3. FreeBSDラーメンいいえコマンドが実行されると下向きに計算され、次の場合は「即時」計算されません。する新しい ACL はツリー全体に適用されます。、および/またはツリーの下でより効果的にするにはどうすればよいですか?
  4. ファイル/ディレクトリに無効なACLがある場合、そのファイル内のすべてのACLを明示的に定義して継承を放棄する唯一の解決策はありますか?

役に立たない答え:

伝播が問題で解決策が必要な場合は、おそらくいくつかの可能な答えを考えることができますが、実際には質問に対する答えではありません。良い回答に集中できるように、ここに回答ではなくアイテムとしてマークしています。

  1. find /path_to_dir -exec setfacl伝播/再計算の問題を解決する明示的なACLを手動で設定できることがわかります。ただし、これは継承されたACLを明示的なACLに置き換えることを意味するため、あまり役に立ちません。多くのクライアント(特にWindows)では明示的/継承されたACLの優先順位が異なるため、ACLの計算方法が変更され、以前に有効であった項目が後で変わる可能性があります。仕事を破るのはとても簡単です。これはまた、あまりにも多くのACL設定が継承されていない状態で送信され、ケースごとに確認する必要があるため、監査権限が継承されていないファイル+ディレクトリのみを確認できないことを意味します。基本的に「逆重複」:)
  2. もう一つの可能​​な答えは、影響を受けるすべてのファイル/ディレクトリをコピーすることである可能性があることもわかっています。レプリケーションによって最初からACLを生成することを強制することができ、これらのACLは最上位ディレクトリの現在のACLに基づいているため、同じファイルシステムの新しい並列位置に移動します。実際には、ACLを変更するためにファイルシステム全体のコピーを必要とすることは非現実的な場合が多いため、これは適用できません。また、ジョブを中断、中断し、rsync/backups/snapshotsを台無しにするのも簡単です(スナップショットでzfsを使用する場合)。

また、ここではFreeBSDを使い続けたいと思います。なぜなら、異なるシステムが非常に異なる方法でaclをチェックして更新することができ、私が答えなければならない現在のシステムはFreeBSDに基づいているからです。

ベストアンサー1

これに関する文書は間違いなく不足しています。私の知る限り、私の経験によると、

setfacl特定のアクセス制御リスト(ACL)のアクセス制御項目(ACE)を追加、変更、または削除するだけです。他のACLの他のACEは、一部が変更されたACEから継承されても影響を受けません。他の「継承された」ACEは変更されません。

ACE は、ファイルまたはディレクトリが継承する場合にのみ継承されます。建設される

fつまり、ACEまたは継承ビットが設定されているACEを変更する場合、そのd変更を以前に継承したエントリに手動で「伝播」することはユーザーの責任です(必要に応じて)。場合によってはそうではないかもしれません。おそらく、これがFreeBSDが自動的にこれを実行しない理由です。

たとえば、

mkdir -p test_dir
getfacl test_dir
# file: test_dir
# owner: root
# group: wheel
#           owner@:rwxp--aARWcCos:-------:allow
#           group@:r-x---a-R-c--s:-------:allow
#        everyone@:r-x---a-R-c--s:-------:allow
setfacl -m g:staff:read_set:fd:allow test_dir # <- CREATE NEW ACE
getfacl test_dir
# file: test_dir
# owner: root
# group: wheel
#      group:staff:r-----a-R-c---:fd-----:allow <- NEW INHERITING ACE
#           owner@:rwxp--aARWcCos:-------:allow
#           group@:r-x---a-R-c--s:-------:allow
#        everyone@:r-x---a-R-c--s:-------:allow
mkdir -p test_dir/child_dir
getfacl test_dir/child_dir
# file: test_dir/child_dir
# owner: root
# group: wheel
#      group:staff:r-----a-R-c---:fd----I:allow <- NEW ACE INHERITED ON CREATE
#           owner@:rwxp--aARWcCos:-------:allow
#           group@:r-x---a-R-c--s:-------:allow
#        everyone@:r-x---a-R-c--s:-------:allow
touch test_dir/child_file
getfacl test_dir/child_file 
# file: test_dir/child_file
# owner: root
# group: wheel
#      group:staff:r-----a-R-c---:------I:allow <- NEW ACE INHERITED ON CREATE
#           owner@:rw-p--aARWcCos:-------:allow
#           group@:r-----a-R-c--s:-------:allow
#        everyone@:r-----a-R-c--s:-------:allow
setfacl -m g:staff:full_set:fd:allow test_dir # <- MODIFY ACE
getfacl test_dir
# file: test_dir
# owner: root
# group: wheel
#      group:staff:rwxpDdaARWcCos:fd-----:allow <- MODIFIED INHERITING ACE
#           owner@:rwxp--aARWcCos:-------:allow
#           group@:r-x---a-R-c--s:-------:allow
#        everyone@:r-x---a-R-c--s:-------:allow
getfacl test_dir/child_dir
# file: test_dir/child_dir
# owner: root
# group: wheel
#      group:staff:r-----a-R-c---:fd----I:allow <- DID NOT CHANGE
#           owner@:rwxp--aARWcCos:-------:allow
#           group@:r-x---a-R-c--s:-------:allow
#        everyone@:r-x---a-R-c--s:-------:allow
getfacl test_dir/child_file 
# file: test_dir/child_file
# owner: root
# group: wheel
#      group:staff:r-----a-R-c---:------I:allow <- DID NOT CHANGE
#           owner@:rw-p--aARWcCos:-------:allow
#           group@:r-----a-R-c--s:-------:allow
#        everyone@:r-----a-R-c--s:-------:allow

# MODIFY INHERITED ACEs TO MATCH MODIFIED INHERITING ACE
setfacl -m g:staff:full_set:fdI:allow test_dir/child_dir
setfacl -m g:staff:full_set:I:allow test_dir/child_file

したがって、あなたの質問に答えるには:

  1. setfacl既存の継承されたACEは変更されません。
  2. FreeBSDは即座に何も再計算しません。
  3. 権限は手動で設定されている場合にのみ適用されます。
  4. いいえ、明示的に表示する必要はありません。あなたのシナリオでは、I継承されたACEに適用されたのと同じ修正で既存の継承されたACE(フラグ付きACE)を更新できます。

注意を払うべき2つの関連FreeBSDの問題:

おすすめ記事