ディレクトリのデフォルトのACLを子に繰り返し適用するには?

ディレクトリのデフォルトのACLを子に繰り返し適用するには?

デフォルトの ACL エントリが割り当てられたディレクトリがあるが、そのサブファイルとサブディレクトリの一部または全部にアクセス権がある場合、またはそのデフォルトと一致しないデフォルトの ACL がある場合、そのデフォルトの ACL エントリをすべての子に繰り返し (再)適用するするにはどうすればよいですか? ?資格があります。既存のすべての子ACLを完全に置き換えたいと思います。とは別にファイルの現在の実行状態です。それ以外の場合は、すべての子が現在の場所に新しく作成されたACLを持つ必要があります。

ロガフが尋ねた。「ACLが有効な状態でディレクトリに対して繰り返し権限を設定する方法は?しかし、追加したい新しい既存のデフォルトACLを(再)適用する代わりに、ACLを繰り返し入力します。ロガッハは要請してないけどこの質問に対するフランクリン・フィアットの回答また、私の問題に対する解決策を提供しましたが、彼の解決策に欠陥があると思います。 Piatは次のコマンドペアを使用することをお勧めします。

find . -mindepth 1 -type d| xargs -n 50 setfacl -b --set-file=<(getfacl . | sed -e 's/x$/X/')
find . -mindepth 1 -type f| xargs -n 50 setfacl -b --set-file=<(getfacl . | grep -v '^default:' | sed -e 's/x$/X/')

修正したい欠陥:

  • 現在、ディレクトリのアクセスACLは、デフォルトのACLの代わりに子として伝播されています。これはACLが機能することを理解する方法ではありません。
  • すべてのファイルの実行ビットがクリアされました(sed無効です)。
  • 典型的な首都このポリシーは、root 権限が必要な場合にプロセスの置き換えが機能しないようにします。 「closefrom_override」オプションをご覧ください。須藤(5)

理想的には、これを行うにはコマンドラインも必要です。

ベストアンサー1

私はこの醜くて非効率的な解決策を思いつきましたが、より良い方法があります。

( cd '/some/dir' && sudo find . -mindepth 1 -path './leave/alone' -prune -o \( -type d -exec bash -c 'getfacl -cd . | sed -nre "p;/^\$/!s/^/default:/p" | setfacl -bM - "{}"' \; \) -o \( -type f -exec bash -c 'getfacl -cd . | sed -re "/^#/!s/x\$/X/" | setfacl -bM - "{}"' \; \) )

このモンスターについてのいくつかのコメント:

  • これらの頻繁な要件を示すために、サブディレクトリの除外を含めました。
  • これCDエラーが発生しやすいソースディレクトリパスの重複が排除され、外部の括弧は変更を一時的にします。
  • 何かの目的を指します。強く打つ"-exec" はパイプを許可しないので必要です。また、レコードの交換を呼び出し、悪名高い「イベントが見つかりません」エラーを発生させる「!」役割を防ぎます。
  • サブディレクトリの場合は、ソースを適用する必要があります。基本2 つのアクセス ACL としての ACLそして基本ACL
  • ファイルの場合、ソースベースACLをアクセスACLとして適用する必要がありますが、「ディレクトリのみがデフォルトACLを持つことができます」警告を避けるために、デフォルトのACLをまったく適用しないでください。設定値
  • ファイルの場合、強制的に終了しないように、ソースベースACLの「x」権限を「X」に置き換える必要があります。みんなファイルが実行可能になります。このソリューションは既存のファイルの実行状態も維持しますが、ただこれは "--set-file=-" の代わりに "-bM -" を使用するためです。設定値
  • このコマンドラインは非常に「-exec...+」または「-exec...+」の使用方法がわからないため、非効率的です。パラメータ"-exec ...\;"代わりに。
  • このコマンドラインは機能しますが、サブファイルから取得したACLは効果的に新しいサブファイルが新しく作成されたときに発生する状況と同じですが、技術的に同じではありません。

「Unix哲学」は素晴らしいですが、私が達成したい作業があまりにも頻繁なので、それほど苦手なコマンドラインは必要ありません。追加機能を得るためにロビーより良い方法はありますか?設定値

おすすめ記事