【问题标题】:How to prevent user from deleting a file which is being used by JVM如何防止用户删除 JVM 正在使用的文件
【发布时间】:2013-01-20 12:01:01
【问题描述】:

我有一段 JAVA 代码,它读取一些文件并将它们加载到内存中一段时间​​。文件句柄在读取后保留。我的问题是我想限制用户使用“DEL”键或 rm 命令删除这些文件。

我可以通过保留文件句柄在 Windows 上实现相同的目的,而在 Unix 上 rm 不支持文件上的锁定。我什至尝试过Filechannel.lock(),但也没有用。

欢迎提出任何建议。

【问题讨论】:

  • 如何将文件存储在只能由 root 和运行 java 程序的用户写入的位置?

标签: java unix jvm rm


【解决方案1】:

只要打开句柄,他们就可以从目录中删除文件,但不能删除文件。即,在您关闭文件或进程终止之前,不会删除该文件。

我什至尝试过 Filechaanel.lock(),但也没有用。

那是因为它是目录,而不是正在更改的文件。例如如果他们对文件有写权限,但对目录没有权限,他们就不能删除它。

【讨论】:

    【解决方案2】:

    您还可以查看chattr,它可用于锁定文件。

    chattr +i filename
    

    应该使文件不可删除。然后,您可以通过...再次将其删除。

    chattr -i filename 
    

    【讨论】:

      【解决方案3】:

      对此没有纯 Java 解决方案。事实上,我认为根本没有一种解决方案不会产生潜在的不良后果。根本问题是 UNIX / LINUX 没有办法在文件上临时设置强制锁定。 (用于锁定文件的 Linux 系统调用是flock,但flock 式锁定是任意的。不打扰flock 文件的应用程序不会受到文件上其他应用程序锁定的影响。)

      您可以做的最好的事情是使用chattr +i 在文件上设置“不可变”属性。不幸的是,这还有其他影响:

      • 无法写入或链接到不可变文件。

      • 如果您的应用程序在未取消设置该属性的情况下崩溃,则用户会留下一个他/她神秘地无法更改或删除的文件。即使使用 sudo 或 su 也不行。

      【讨论】:

      • 我认为你的意思是 +i,-i 删除不可变。
      猜你喜欢
      • 2020-07-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多