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

9

Я бы хотел, чтобы один из моих корневых процессов не удалил определенный файл. Поэтому я наткнулся на команду 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 другим корневым процессом?

Ваш Ответ

3   ответа
4

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

34

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

Он не останавливает root или кого-либо еще от чтения, записи или удаления файла.

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

Нет, ты не понимаешь. Linux не имеет обязательной блокировки, как правило. Обязательная блокировка решает мало и в основном просто позволяет одному приложению отказывать в обслуживании другому без объяснения причин и способов борьбы с ним. Если вы действительно действительно хотите, чтобы root не удалил файл, переведите его в «неизменный», но они всегда могут изменить его, а затем удалить.
О, спасибо мужчина. Я попробую заблокировать папку. Спасибо Danmaxis
7

sudo chattr +i ./file.xml

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

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

Похожие вопросы