
不変ビットセットを含むディレクトリがLinuxでどのように機能するかを知りたいです。ファイルの場合、これは単純ですが、ディレクトリ自体が両面(ディレクトリ自体とその内容)を持つ属性のため、さらに混乱します。次のディレクトリがあるとします。
${ROOT}/
build/
config/
src/
Makefile
README
${ROOT}
不変ビットを、、、、および${ROOT}/build
読み取り専用にする方法で使用できますか?自由に追加、削除、修正が可能です。私はこれがorを実行することで達成できると思いますが、これに関してディレクトリの動作は私には不明です。 1つの潜在的なユースケースは、管理者が他のユーザーがプロジェクトのソースコード、メイクファイル、追加情報ファイル、およびトップレベルディレクトリ構造を変更するのを防ぎながらプロジェクト内でビルドできるようにしたい場合です。${ROOT}/config
${ROOT}/src
${ROOT}/Makefile
${ROOT}/README
${ROOT}/build
${ROOT}/config
chattr -R +i ${ROOT}; chattr -R -i ${ROOT}/build ${ROOT}/config
chattr -R +i ${ROOT}; chattr -R -i ${ROOT}/build/* ${ROOT}/config/*
答え1
アクセス制御の目的で、ディレクトリの内容はその中に含まれるファイルの名前です。ファイルを追加、削除、または名前を変更するには、ディレクトリへの書き込み権限が必要です。 (ファイル名を一覧表示するには読み取り権限が必要です。)また、ディレクトリには+t
固定ビット()があり、ファイル所有者とディレクトリ所有者のファイル削除をさらに制限します。 IOW、これはディレクトリへの書き込みアクセス権があり、その内容を変更できる場合でも、他の人が所有するファイルを削除するのを防ぎます。
権限は所有者のみ変更でき、ファイル所有者はルートのみ変更できます。拡張プロパティの編集は書き込みアクセスに関連していると思われるため、実際には個別に無効にすることはできません。
あなたの要件については、私が正しく理解している場合は、${ROOT}/build
ファイルが 。これは次のように簡単に行うことができます。${ROOT}/config
${ROOT}
chmod a+rX -R ${ROOT}
chmod o-w -R ${ROOT}
chmod o+w -R ${ROOT}/build ${ROOT}/config
# chmod +t -R ${ROOT}/build ${ROOT}/config
ここでは実際に不変ビットを使用する必要はありません。これはファイルシステムによって異なり、所有者とルートを含むすべてのユーザーに同じように制限されます。
ただし、ビルドが内部的に発生しても、${ROOT}/build
複数のユーザーが互いのファイルを破壊しないと作業できないという問題が残っています。この問題を解決するには、任意の出力ディレクトリでビルドをサポートするようにビルドシステムを変更したり、各ユーザーに独自のソースツリーコピーを作成してホームディレクトリにコンパイルすることができます。