
私の質問はこのもう一つただし、新しく作成されたファイルについて質問する点が異なります。
私のUnixボックスでは、ユーザーはアリス、ボブそしてトムキャットグループに所属しているトムキャット。
Tomcat サーバーの構成ファイルは、ユーザー tomcat が所有し、グループ tomcat に属します。
alice と bob がファイルを編集できるように、このファイルの権限をグループによる読み取りおよび書き込み可能に変更しました。
しかし、編集後、そのファイルは最後に編集したユーザーの所有になることに気づきました。
質問:所有権を変更せずに、アリスとボブがファイルを編集できるように権限を変更することは可能ですか?
ファイルを編集すると、その所有権はどのように変更されるのでしょうか?
答え1
結果として得られるユーザーファイルの所有者は、エディタの動作によって異なります。エディタによっては、ファイルを切り捨てて上書き保存するものもあります (inode は変更しません)。また、ファイル名を別の名前に変更し (file
通常file~
は )、元の名前で新しいファイルを作成するものもあります。元のファイルを変更しても所有者は変わりませんが、新しいファイルを作成すると、新しいファイルの所有者は作成プロセスの UID になります。
Debian で使用しているエディタのうち、nano
とjoe
、および( の最小バージョン)nvi
は、その場で上書きするようです。ただし、と Emacs は、おそらくその動作を構成できると思います。vim
vim-tiny
vim
スティーブンは次のようにコメントしているアトミックアップデートインプレースで再作成する場合の問題は、ファイルが長さ 0 に切り捨てられてから書き込まれることです。すべてのデータが書き込まれる前に、別のプロセスがファイルを開いて読み取ってしまう可能性があります。
file.new
アトミック更新は、たとえば という新しいバージョンを作成し、名前file.new
を に変更することによって行われますfile
。バックアップ ファイルを残して、 を作成し、file.new
にリンクしてから、名前を に変更することができます。名前の変更は、名前でファイルにアクセスするプロセスが古いバージョンまたは新しいバージョンのいずれかを取得し、その中間を取得することはないという点でアトミックです。開いているファイル ハンドルはすべて、もちろん開いたままになっているファイルを指すため、ファイルに対する一貫したビューが提供されます。file
file~
file.new
file
からファイル権限観点から見ると、同じファイル (inode) に保存するには、ファイル自体への書き込みアクセスが必要です (ディレクトリへの書き込みアクセスは必要ありません)。また、名前を変更して新しいファイルを作成するには、ディレクトリへの書き込みアクセスが必要です (元のファイルへの書き込みアクセスは必要ありません)。
(ちなみに、名前の変更と再作成は、誰かが共有ディレクトリにファイルを作成または変更したが、グループ書き込みアクセス権を付与し忘れた場合に、ファイルの権限を修正する方法でもあります。)
答え2
として説明によるイルカチュ使用しているエディタが保存時に新しいファイルを作成する場合、所有者ファイルの。しかし、おそらく本当に気になるのは、ファイルがTomcatによって読み取り可能であることを確認することです。これは、ファイルのグループが読み取り可能であることを確認することで実現できます。また、親tomcat
ファイルのビットを設定することで、新しいファイルに対して強制できます。setgid
ディレクトリ:
chmod g+s .
したがって、bob
ファイルを再作成するエディタを使用してファイルを編集すると、編集されたファイルの所有者は になりbob:tomcat
、Tomcat は引き続きそのファイルを読み取ることができます (少なくとも通常はumask
)。親ディレクトリがグループによって書き込み可能である限りtomcat
、そのグループ内のすべてのユーザーはディレクトリ内のファイルを編集できます (ファイルを再作成することによってのみ)。
ただし、プロセスの変更を検討することをお勧めします。Tomcat がファイルを読み取る場所でファイルを直接編集することはおそらく避けるべきです。理想的には、ファイルは何らかの VCS で管理され、別のプロセス (自動化可能) によって展開されます。そうすれば、所有権に関するすべての問題を回避できます...