setfacl でデフォルトの権限を設定する

setfacl でデフォルトの権限を設定する

を使用してディレクトリ構造にデフォルトの権限を設定しようとしていますacl。ディレクトリとファイルにそれぞれ次のデフォルトの権限を設定したいと思います。

drwx--x---
-rw-r-----

しかし、デフォルトの権限を次のように設定したgroup場合x:

setfacl -R -d -m g::x my_dir

すると、新しく作成されたディレクトリには希望する権限が設定されますが、新しく作成されたファイルに-rw-------は ではなく が設定されます-rw-r-----。つまり、ファイルの権限rは保持しながら、ディレクトリの権限を削除しようとしているのですr

どうすればこれを実現できますか?

答え1

Linux/Solaris ACL はこれをサポートしていません。ファイルとディレクトリに異なるデフォルトの ACL を設定することはできません。

トラバースはできるが、その内容を表示できない (実行可能だが読み取り不可) ディレクトリは、ほとんど役に立ちません。それが機能するという事実は、歴史的な偶然です。確かに、時々役に立つこともありますが、本当に必要ですか? (これは別の質問として尋ねたほうがよいかもしれません。)

異なる権限を持つディレクトリとファイルが本当に必要な場合は、次の可能性を検討してください。

  • 固有のファイルシステム プロパティに依存するのではなく、アプリケーションで作成するファイルの所有権を変更します。
  • すべてをデフォルトで非公開( )に設定しsetfacl -d -m group:mygroup:XACL を使用するディレクトリでのみ Group+rx 権限が有効ですか?:

    • グループパブリックファイルを直接ではなく、バインドマウントを通じて公開します。
    • inotify を使用してツリーを監視し、setfacl新しい通常ファイルに対して実行します。

答え2

setfaclと のumaskどちらも、ファイルとディレクトリに別々のデフォルトを許可していないため、これを実行することはできないようです。他のオプションについては、この同様の質問を参照してください読み取り権限のないディレクトリと読み取り権限のあるファイルを作成するようにアプリケーションを強制する場合は、それを変更するか、バイナリ ファイルのみを指定して LD_PRELOAD を試すことができます (ただし、そのためのライブラリを作成するのは少々やりすぎかもしれません)。

関連情報