Linuxのアクセス許可スキームを使用して、ユーザーがファイルを作成できるようにして、後で編集または削除できないようにすることはできますか?つまり、ユーザーがアーティファクトを置く配信フォルダーがあり、これらのアーティファクトが配信後に変更(つまり、編集または削除)されないようにする必要があります。
Linuxのアクセス許可スキームを使用して、ユーザーがファイルを作成できるようにして、後で編集または削除できないようにすることはできますか?つまり、ユーザーがアーティファクトを置く配信フォルダーがあり、これらのアーティファクトが配信後に変更(つまり、編集または削除)されないようにする必要があります。
回答:
それを行うことはできません。ユーザーがファイルを作成できる場合、そのファイルはユーザーが所有し、ユーザーはファイルを変更したり消去したりできます。
ステージングディレクトリ(ユーザーが望むことを実行できる場所)と着信ディレクトリ(ユーザーがアクセスできない場所)を持ち、ファイルをステージングディレクトリから着信ディレクトリに移動する小さな特権プログラムを使用する簡単なスキームを提案しましたディレクトリ。しかし、実際に正しく行うのは難しいです:特権プログラムが他のディレクトリにファイルを移動しないように注意する必要があります(競合状態、シンボリックリンクに注意してください../
)、既存のファイルを上書きしません(rename(3)
アトミックですが、移動先を消去します)、ユーザーがファイル記述子を開いたままにして、移動後にファイルを変更することはできません(したがって、移動よりもコピーした方がよいでしょう)。代わりに、既存の堅牢なソリューションを使用することをお勧めします。
Linuxのアクセス許可スキームを使用して、ユーザーがファイルを作成できるようにして、後で編集または削除できないようにすることはできますか?
番号
ただし、質問へのコメントで@Fredrikが提案する他のオプションがあります。こちらをご覧ください。
これは、理論的には機能するはずのアプローチです。概念実証さえ開発するのは、私にとってあまりにも多くの努力です。同じ理由で拒否することもできます。そして、厳密に言えば、これは「Linux許可スキームを使用する」ことではありません。
/mnt/delivery
、ファイルをそこに置くようユーザーに指示します。簡単な答えは、「アップロード」ディレクトリ内のすべてのファイルの所有権を所定の「管理者」ユーザーに再割り当てし、権限を「644」に設定するスクリプトを、指定した間隔(たとえば15分ごと)で実行することです。これにより、すべてのユーザーが、自分でアップロードしたファイルを含むアップロードディレクトリ内のすべてのファイルへの読み取り専用アクセスが許可されます。もちろん、最初の実行後にスクリプトを最適化して、スクリプトの前回の実行後(たとえば、過去17分間)に作成された日付を持つファイルのみを検索することもできます。