2009-06-24 6 views
9

Ich möchte verhindern, dass einer meiner Root-Prozesse eine bestimmte Datei löscht. Ich bin also auf den Flockbefehl gestoßen, es scheint mir zu passen, aber ich habe seine Syntax nicht verstanden.Wie verwende ich den Befehl linux flock, um zu verhindern, dass ein anderer Root-Prozess eine Datei löscht?

Wenn ich nur eine gemeinsame Sperre angeben, funktioniert es nicht:
flock -s "./file.xml"

Wenn ich einen Timeout-Parameter hinzufügen, ist es noch nicht
funktioniert flock -s -w5 "./file.xml"

scheint es so, es passt in flock [-sxun][-w #] fd# Weg.
(Was fd # Parameter ist?)

Also, ich die flock -s -w5 "./file.xml" -c "tail -3 ./file.xml"flock [-sxon][-w #] file [-c] command
Mit ausprobiert und es funktionierte, wurde Befehl tail bei ./file.xml ausgeführt.
Aber ich würde gerne wissen, endet die Sperre nach dem Befehl oder dauert es 5 Sekunden nach dem Ende der Befehlsausführung? Meine Hauptfrage ist, wie kann ich verhindern, dass ein anderer Root-Prozess eine Datei in Linux löscht?

Antwort

33

Nein, Flock verhindert NICHT, dass irgendjemand etwas macht. Unix-Sperren sind ADVISORY, was bedeutet, dass sie verhindern, dass andere Prozesse auch flock aufrufen (oder im Fall einer gemeinsamen Sperre, verhindern, dass ein anderer Prozess einen exklusiven verwendet).

Es verhindert nicht, dass root oder jemand anderes die Datei liest, schreibt oder löscht.

In jedem Fall, auch wenn es sich um eine obligatorische Sperre handelte, würde die Datei nicht gelöscht, da es sich um die gesperrte Datei und nicht um den Verzeichniseintrag handelt.

+0

Oh, danke Mann. Ich werde die Ordnersperre versuchen. Danke – Danmaxis

+19

Nein, du verstehst nicht. Linux hat normalerweise keine obligatorische Sperre. Obligatorisches Sperren löst nur wenig und erlaubt meistens nur einer App, den Dienst für einen anderen zu verweigern, ohne eine Erklärung oder einen Umgang damit zu haben. Wenn Sie wirklich wirklich wollen, dass root keine Dateien löschen kann, chatten Sie es mit "unveränderlich", aber sie können es immer wieder ändern und dann löschen. – MarkR

7

sudo chattr +i ./file.xml

MarkR korrekt ist chattr'ing die Datei wird es verhindern, dass sie gelöscht werden:

-(~)-------------------------------------------------------------------------------------------------------(08:40 Mon Mar 29) 
[email protected] [2135] --> sudo chattr +i junk.txt 
[sudo] password for risk: 
-(~)-------------------------------------------------------------------------------------------------------(08:40 Mon Mar 29) 
[email protected] [2136] --> sudo rm ./junk.txt 
rm: cannot remove `./junk.txt': Operation not permitted 
zsh: exit 1  sudo rm ./junk.txt 
-(~)-------------------------------------------------------------------------------------------------------(08:40 Mon Mar 29) 
[email protected] [2137] --> sudo rm -f ./junk.txt 
rm: cannot remove `./junk.txt': Operation not permitted 
zsh: exit 1  sudo rm -f ./junk.txt 
-(~)-------------------------------------------------------------------------------------------------------(08:40 Mon Mar 29) 
[email protected] [2138] --> 
4

Herd ist nicht das richtige Werkzeug für diesen Job. Wenn Sie ein Programm haben, das Dateien löscht, sollten Sie dieses Programm nicht als root ausführen. Sie sollten es als ein anderer Benutzer ausführen. Unix hat sehr gute Unterstützung für Dateiberechtigungen, aber root ist ein Gott-Konto. Root kann alles tun, und es gibt keine Berechtigungen für root.