Wie kann der Besitz einer Datei nach der Bearbeitung beibehalten werden?

11

Meine Frage ähnelt dieser anderen , außer dass man nach neu erstellten Dateien fragt.

In meiner Unix-Box befinden sich die Benutzer Alice , Bob und Tomcat in der Gruppe Tomcat .

Die Konfigurationsdateien des Tomcat-Servers gehören dem Benutzer tomcat und der Gruppe tomcat.

Ich habe die Berechtigungen dieser Datei in lesbar und für Gruppen beschreibbar geändert, damit Alice und Bob die Dateien bearbeiten können.

Ich habe jedoch festgestellt, dass die Datei nach dem Bearbeiten dem letzten Benutzer gehört, der sie bearbeitet hat.

F: Ist es möglich, Berechtigungen zu ändern, damit Alice und Bob die Dateien bearbeiten können, ohne ihren Besitz zu ändern?

Wie ändert das Bearbeiten einer Datei überhaupt ihren Besitz?

Leonel
quelle
Ist es Ihr Ziel sicherzustellen, dass Tomcat weiterhin Eigentümer der Dateien ist, oder ist es sicherzustellen, dass: der Tomcat-Server weiterhin funktioniert; Alice und Bob können beide weiterhin die Dateien bearbeiten, und diese Sicherheit bleibt erhalten?
Strg-Alt-Delor
1
Ich würde annehmen, dass der Tomcat-Dienst unter dem Benutzer 'tomcat' ausgeführt wird, basierend auf der Art und Weise, wie Ihre Frage formuliert ist. Dies ist wahrscheinlich nicht wünschenswert, da ein Exploit von Tomcat dazu führen kann, dass die eigene Konfiguration neu geschrieben wird, um Teile Ihres Servers freizulegen, die Sie möglicherweise nicht beabsichtigen. Sie sollten in Betracht ziehen, eine andere Gruppe zu verwenden, die die Konfiguration schreiben kann, während die Tomcat-Gruppe lesen, aber nicht schreiben kann.
Ed Neville
1
Empfohlene Hintergrundlesung
Gilles 'SO - hör auf böse zu sein'

Antworten:

17

Der resultierende Benutzer der Datei hängt davon ab, was der Editor tut. Einige Editoren speichern die Datei, indem sie sie abschneiden und über die Datei schreiben (ohne den Inode zu ändern). Einige Editoren benennen die Datei in einen anderen Namen um ( filebis file~ist üblich) und erstellen eine neue Datei mit dem Namen des Originals. Durch Ändern der Originaldatei bleibt der Eigentümer unverändert. Wenn Sie eine neue Datei erstellen, wird die neue Datei der UID des Erstellungsprozesses gehört.

Von den Editoren habe ich auf Debian, nanound joeauch nviund vim(die minimale Version in vim-tiny) scheinen an Ort und Stelle zu überschreiben. Obwohl ich nehme an vimund Emacs sind wahrscheinlich konfigurierbar in dem, was sie tun.


Stephen kommentiert atomare Updates . Das Problem beim erneuten Erstellen vor Ort besteht darin, dass die Datei auf die Länge Null gekürzt und dann geschrieben wird. Ein anderer Prozess könnte es öffnen und lesen, bevor alle Daten geschrieben sind.

Ein Atom Update würde durch die Schaffung der neuen Version wie etwa getan werden file.new, dann die Umbenennung file.newzu file. Hinterlassen einer Backup - Datei, könnte man schaffen file.new, Link fileauf file~und benennen file.newzu file. Die Umbenennung ist insofern atomar, als jeder Prozess, der über den Namen auf die Datei zugreift, entweder die alte oder die neue Version erhält, nichts dazwischen. Alle geöffneten Dateihandles verweisen natürlich auf die Datei, die geöffnet gehalten wurde, und bieten eine konsistente Ansicht der Datei.


Aus den Dateiberechtigungen Blickwinkel, über die gleiche Datei zu speichern (Inode) Schreibzugriff auf die Datei selbst (aber nicht das Verzeichnis) erfordert, es umbenennen und eine neuen erstellt erfordert Schreibzugriff auf das Verzeichnis (aber nicht auf die Originaldatei ).

(Das Umbenennen und Neuerstellen ist im Übrigen auch eine Möglichkeit, Dateiberechtigungen zu korrigieren, falls jemand eine Datei in einem freigegebenen Verzeichnis erstellt oder ändert, aber vergisst, Gruppenschreibzugriff darauf zu gewähren.)

ilkkachu
quelle
6
Das Erstellen und Umbenennen ist auch die einzige Möglichkeit, um sicherzustellen, dass die Datei mithilfe der POSIX-Semantik atomar aktualisiert wird.
Stephen Kitt
nette Erklärung.
Mian Asbat Ahmad
13

Wie von ilkkachu erläutert , gibt es keine Möglichkeit, den Eigentümer der Datei zu steuern , wenn der verwendete Editor beim Speichern eine neue Datei erstellt . Was Sie wahrscheinlich wirklich interessiert, ist sicherzustellen, dass die Dateien für Tomcat lesbar bleiben. Sie können dies tun, indem Sie sicherstellen, dass ihre Gruppe ist (und sie von ihrer Gruppe gelesen werden können). Dies kann für neue Dateien erzwungen werden, indem Sie das Bit im übergeordneten Verzeichnis setzen :tomcatsetgid

chmod g+s .

Wenn Sie also bobeine Datei mit einem Editor bearbeiten, der die Datei neu erstellt, ist die bearbeitete Datei Eigentum von bob:tomcatTomcat und Tomcat kann sie weiterhin lesen ( umaskzumindest mit einem typischen ). Solange das übergeordnete Verzeichnis von der tomcatGruppe beschreibbar ist , kann jeder Benutzer in dieser Gruppe Dateien im Verzeichnis bearbeiten (wenn auch nur durch erneutes Erstellen).

Ich würde jedoch empfehlen, Ihre Prozesse zu ändern. Sie sollten Dateien wahrscheinlich nicht direkt an dem Ort bearbeiten, von dem sie von Tomcat gelesen werden. Im Idealfall werden die Dateien in einem VCS gespeichert und durch einen separaten Prozess bereitgestellt (möglicherweise automatisiert). Auf diese Weise vermeiden Sie all diese Eigentumsprobleme ...

Stephen Kitt
quelle
schöne Lösung !!
Mian Asbat Ahmad