2009-06-24 20 views
9

Chciałbym zapobiec usuwaniu pewnego pliku przez jeden z procesów root. Więc natknąłem się na polecenie flock, wydaje mi się, że pasuje do moich potrzeb, ale nie dostałem jego składni.Jak użyć polecenia flock linux, aby zapobiec usunięciu pliku przez inny proces root?

Gdybym tylko wskazać wspólną blokadę, to nie działa:
flock -s "./file.xml"

Jeśli dodać parametr timeout, to nadal nie działa
flock -s -w5 "./file.xml"

Wydaje się, że sposób, pasuje on do sposobu: flock [-sxun][-w #] fd#.
(Co to jest fd # parametr?)

Więc próbowałem flock [-sxon][-w #] file [-c] command
Korzystanie flock -s -w5 "./file.xml" -c "tail -3 ./file.xml" i to działało, Komenda ogon w ./file.xml został stracony.
Ale chciałbym wiedzieć, czy blokada kończy się po komendzie, czy trwa 5 sekund po zakończeniu wykonywania polecenia? Moje główne pytanie brzmi: w jaki sposób mogę zapobiec usunięciu pliku w systemie Linux przez inny proces root?

Odpowiedz

33

Nie, stado NIE przeszkadza nikomu w robieniu niczego. Blokady Unix to ADVISORY, co oznacza, że ​​uniemożliwiają innym procesom wywoływanie flokowania (lub w przypadku wspólnej blokady, zapobiegają innemu procesowi używającemu ekskluzywnego).

Nie zatrzymuje użytkownika root ani nikogo innego przed odczytaniem, zapisaniem lub usunięciem pliku.

W każdym przypadku, nawet jeśli była to obowiązkowa blokada, nie zatrzymałaby usuniętego pliku, ponieważ jest to blokowany plik, a nie pozycja katalogu.

+0

Och, dzięki człowieku. Spróbuję zablokować folder. Dzięki – Danmaxis

+19

Nie, nie rozumiesz. Linux zwykle nie ma obowiązkowego blokowania. Obowiązkowe blokowanie rozwiązuje mało, a przede wszystkim pozwala jednej aplikacji odmówić usługi drugiej bez wyjaśnienia lub sposobu radzenia sobie z nią. Jeśli naprawdę, na prawdę chcesz przestać rootować, usuwając plik, zamień go na "niezmienny", ale zawsze możesz go zmienić, a potem go usunąć. – MarkR

7

sudo chattr +i ./file.xml

MarkR jest poprawna chattr'ing plik zapobiegnie przed usunięciem:

-(~)-------------------------------------------------------------------------------------------------------(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

stado nie jest odpowiednim narzędziem do tego zadania. Jeśli masz program usuwający pliki, nie powinieneś uruchamiać tego programu jako root. Powinieneś uruchomić go jako inny użytkownik. Unix ma bardzo dobre wsparcie dla uprawnień do plików, ale root jest kontem boskim. Root może wszystko i nie ma uprawnień dla root.

Powiązane problemy