編集後にファイルの所有権をどのように維持しますか?

編集後にファイルの所有権をどのように維持しますか?

私の問題は次のようになりますもう一つ、新しく作成されたファイルについての質問に加えて、

私のUnixボックスでは、ユーザーはアリス単発そしてスコ羊グループ内スコ羊

Tomcatサーバーの構成ファイルは、ユーザーtomcatとグループtomcatが所有します。

aliceとbobがファイルを編集できるように、このファイルに対する権限をグループごとに読み取り/書き込みに変更しました。

ただし、編集後、そのファイルを最後に編集したユーザーが所有することを確認しました。

尋ねる:AliceとBobが所有権を変更せずにファイルを編集できるように権限を変更できますか?

ファイルを編集すると、所有権はどのように変更されますか?

答え1

結果ユーザーファイルの内容は編集者の役割によって異なります。一部の編集者はファイルを切り取り、上書きして(inodeを変更せずに)ファイルを保存します。一部の編集者はファイル名を別の名前(通常はfilefile~に変更し、元の名前で新しいファイルを作成します。所有者が変更されないように元のファイルを変更し、生成プロセスのUIDが新しいファイルを所有するように新しいファイルを作成します。

私がDebianで使用するエディタ、およびnanojoeそしてnvivim最小バージョンではvim-tiny)内部オーバーライドがあるようです。vimEmacsの機能を設定できると思います。


スティーブンは次のようにコメントしています。アトミックアップデート。内部再生成の問題は、ファイルがゼロの長さに切り捨てられて作成されることです。すべてのデータを書き込む前に、他のプロセスがそれを開いて読み取ることができます。

file.newたとえば、新しいバージョンを作成して名前をfile.newに変更すると、アトミックアップデートが実行されます。これにより、作成して接続fileできるバックアップファイルが残り、名前が変更されます。名前でファイルにアクセスするすべてのプロセスは、以前のバージョンまたは新しいバージョンをインポートし、その間に何もインポートしないため、名前を変更するのはアトミックです。もちろん、開いているファイルハンドルは開いているファイルを指し、ファイルの一貫したビューを提供します。file.newfilefile~file.newfile


~からファイル権限視点から見ると、同じファイル(inode)を保存するにはファイル自体(ディレクトリではない)への書き込みアクセスが必要です。新しいファイルの名前を変更して作成するには、ディレクトリ(元のファイルではない)への書き込みアクセスが必要です。

(誰かが共有ディレクトリからファイルを作成または変更し、グループに書き込みアクセス権を付与することを忘れた場合は、名前の変更と再生成はファイル権限を変更する方法でもあります。)

答え2

〜のように説明した渡すイルカチョ、使用しているエディタが保存したときに新しいファイルを作成するかどうかは制御できません。所有者ファイル。しかし、あなたが本当に興味を持っているのは、Tomcatがまだファイルを読むことができることを確認することです。そのグループがあることを確認しtomcat(そしてそのグループが読み取ることができることを確認して)、setgidそれを親ファイルビットに設定します。新しいファイルを強制的に実行するには目次:

chmod g+s .

したがってbob、ファイルを再生成するエディタを使用してファイルを編集すると、編集されたファイルは最終的にTomcatの所有になり、bob:tomcatTomcatは依然としてそのファイルを読み取ることができます(少なくとも一般的にumask)。グループが親ディレクトリに書き込むことができる限り、グループ内のtomcatすべてのユーザーはそのディレクトリのファイルを編集できます(ファイルを再作成する場合のみ)。

ただし、プロセスの変更を考慮することをお勧めします。 Tomcatが読み取る場所でファイルを直接編集しないでください。理想的には、これらのファイルは一種のVCSで維持され、別々のプロセス(おそらく自動化)によって配布されます。これにより、すべての所有権の問題を回避できます。

関連情報