Как использовать команду linux flock для предотвращения удаления файла другим корневым процессом?

StackOverflow https://stackoverflow.com/questions/1040828

Вопрос

Я бы хотел, чтобы один из моих корневых процессов не удалил определенный файл. Поэтому я наткнулся на команду flock, она, кажется, соответствует моим потребностям, но я не получил ее синтаксис.

Если я указываю только общую блокировку, она не работает:

flock -s "./file.xml"

Если я добавлю параметр тайм-аута, он все равно не будет работать:

flock -s -w5 "./file.xml"

Похоже, он подходит flock [-sxun] [- w #] fd # . (Что это за параметр fd # ?)

Итак, я попробовал:

flock [-sxon][-w #] file [-c] command

Использование flock -s -w5 " ./ file.xml " -c " tail -3 ./file.xml" , и это сработало, команда tail в ./file.xml была выполнена.

Но я хотел бы знать, блокировка заканчивается после команды или длится 5 секунд после окончания выполнения команды? Мой главный вопрос: как я могу предотвратить удаление процесса в Linux другим корневым процессом?

Это было полезно?

Решение

Нет, стадо НЕ мешает кому-либо делать что-либо. Unix-блокировки являются ADVISORY, что означает, что они не позволяют другим процессам также вызывать flock (или в случае разделяемой блокировки запрещают другому процессу использовать эксклюзивную).

Это не мешает пользователю root или кому-либо еще читать, писать или удалять файл.

В любом случае, даже если это была обязательная блокировка, это не остановило бы удаление файла, так как это заблокированный файл, а не запись каталога.

Другие советы

sudo chattr + i ./file.xml

MarkR - это правильный чат, который предотвращает удаление файла:

-(~)-------------------------------------------------------------------------------------------------------(08:40 Mon Mar 29)
risk@DockMaster [2135] --> sudo chattr +i junk.txt
[sudo] password for risk: 
-(~)-------------------------------------------------------------------------------------------------------(08:40 Mon Mar 29)
risk@DockMaster [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)
risk@DockMaster [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)
risk@DockMaster [2138] --> 

стая не подходит для этой работы. Если у вас есть программа, которая удаляет файлы, вы не должны запускать эту программу от имени пользователя root. Вы должны запустить его как другой пользователь. Unix имеет очень хорошую поддержку прав доступа к файлам, но root - это учетная запись God. Root может делать все, и нет никаких прав для root.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top