【问题标题】:How do I use the linux flock command to prevent another root process from deleting a file?如何使用linuxflock命令来防止另一个root进程删除文件?
【发布时间】:2010-11-05 15:57:11
【问题描述】:

我想阻止我的某个根进程删除某个文件。所以我遇到了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" 并且它起作用了,./file.xml 的尾部命令被执行。

但我想知道,锁定是在命令后结束还是在命令执行结束后持续 5 秒?我的主要问题是,如何防止另一个 root 进程删除 linux 中的文件?

【问题讨论】:

    标签: linux bash file-locking flock


    【解决方案1】:

    不,flock 不会阻止任何人做任何事情。 Unix 锁是 ADVISORY,这意味着它们会阻止其他进程也调用flock(或者在共享锁的情况下,阻止另一个进程使用独占锁)。

    它不会阻止 root 或其他任何人读取、写入或删除文件。

    无论如何,即使是强制锁定,也不会阻止文件被删除,因为锁定的是文件而不是目录条目。

    【讨论】:

    • 不,你不明白。 Linux 通常没有强制锁定。强制锁定解决的问题很少,而且大多数情况下只是允许一个应用程序拒绝为另一个应用程序提供服务,而没有任何解释或处理方式。如果您真的非常非常想阻止 root 删除文件,请将其更改为“不可变”,但他们总是可以将其更改回来然后删除它。
    【解决方案2】:

    sudo chattr +i ./file.xml

    MarkR 是正确的chattr'ing 文件将防止它被删除:

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

    【讨论】:

      【解决方案3】:

      flock 不是这项工作的正确工具。如果您有一个正在删除文件的程序,则不应以 root 身份运行该程序。您应该以其他用户身份运行它。 Unix对文件权限的支持非常好,但是root是神帐号。 Root可以做任何事情,并且没有root权限。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-05-27
        • 1970-01-01
        • 2012-10-27
        • 2011-08-09
        相关资源
        最近更新 更多