Ist es möglich, Berechtigungen für die Datei so festzulegen, dass sie bearbeitbar bleibt, jedoch keine Berechtigung zum Überschreiben hat?
Ich meine die Möglichkeit, die Datei mit einem Texteditor zu bearbeiten, aber jeden Versuch zu unterbinden, die Datei durch Überschreiben zu ersetzen. Der Benutzer ist root
. Ich weiß, dass dies nicht die übliche Struktur für Unix-Dateiberechtigungen ist, aber ich suche nach einem raffinierten Ansatz.
Ich habe ein Paket mit Dateien, da einige davon seit der Originalversion bearbeitet/angepasst wurden. Wenn ich das Paket mit einer neuen Version aktualisiere, möchte ich alle unberührten Dateien ersetzen, aber die angepassten Dateien schützen (um keine Änderungen zu verpassen). Derzeit muss ich dies manuell tun: Schreiben, welche Datei bearbeitet wurde, damit sie im neuen Update nicht ersetzt wird.
Antwort1
Da alle Pakete versuchen werden, die Konfigurationsdatei vollständig zu überschreiben, können Sie die Datei in den Nur-Anhängen-Modus versetzen, indem Sie
chattr +a bb
Sie können die Datei daher nicht entfernen/abschneiden, sondern nur anhängen.
In diesem Fall verhindern Sie jedoch, dass der Paketmanager das System aktualisiert.
Wenn Sie einfach nicht möchten, dass der Paketmanager Ihre angepassten Dateien überschreibt, können Sie das Paket zurückhalten. Unter Debian/Ubuntu können Sie Folgendes tun:
echo package-name hold | dpkg --set-selections
Auf diese Weise wird dieses Paket nicht aktualisiert und Ihre Dateien bleiben erhalten.
Antwort2
Es hängt davon ab, was genau „überschreiben“ bedeutet. Wenn es bedeutet, die Daten einer vorhandenen Datei zu ändern, ist dies nicht möglich, da das Betriebssystem nicht zwischen „Bearbeiten“ und „Überschreiben“ unterscheiden kann – beide ändern die Daten der Datei. Wenn es bedeutet, eine Datei mit demselben Namen zu löschen und eine neue zu erstellen (oder eine neue Datei in diesen Namen umzubenennen), kann dies erreicht werden, indem die Schreibberechtigung für das Verzeichnis entfernt wird, das die Datei enthält. Dies gilt jedoch offensichtlich für alle Dateien in diesem Verzeichnis, nicht für eine bestimmte Datei.
Antwort3
Erstellen Sie zunächst ein Tar der wichtigen Dateien des Pakets. Dann führen Sie das Upgrade durch. Sobald Sie die neue Version installiert haben, entpacken Sie das gespeichertein einem anderen Verzeichnis, und vergleichen Sie die Dateien, die Sie bearbeitet haben, mit den neuen aus dem Paket. Auf diese Weise sehen Sie, ob die neuen Dateien nicht auch wichtige Dinge enthalten, die hinzugefügt/geändert werden müssen (d. h. die Entwickler haben möglicherweise auch Änderungen an den von Ihnen bearbeiteten Dateien vorgenommen, und diese Änderungen sollten ebenfalls beibehalten werden. Sie können die neuen Dateien aus dem neuen Paket nicht einfach durch Ihre alten Änderungen ersetzen, ohne vorher zu prüfen, ob diese neuen Dateien nicht neue wichtige Informationen enthalten).
Antwort4
Führen Sie als Root Folgendes aus:
chattr +i foo.txt
Dann versuche es:
vim foo.txt
Ändern Sie die Datei in vim und versuchen Sie, sie zu speichern.
Ein Beispiel für einen Anwendungsfall ist chattr +i /etc/resolv.conf, damit Ihr lästiger Netzwerkmanager-Dienst es nicht mit einer fehlerhaften Datei überschreibt, die er von einem falsch konfigurierten Heim-/Bürorouter erhält.
Sie können es rückgängig machen mit:
chattr -i foo.txt
Im Linux-Dateisystemmodell ist das das Beste, was Sie tun können. Es gibt keine andere Lösung.