阻止应用程序的rm -rf

我有应用程序,在运行时生成有趣的中间输出到./tmp目录。
在执行结束时,这个目录被删除
我怎样才能保存它的内容?

我没有在系统上的uid 0。
因此,我不能拦截(阻止取消链接)任何I / O操作。
目前我正在停止这个应用程序和它的内容。

应用程序为静态编译共享库+ LD​​_PRELOAD不会帮助。 应用程序正在使用** ./ ** tmp文件夹,它与任何envvariables都没有关系。

感谢您的答复。

  • 如何快速查明一个* nix服务器是否运行正常?
  • 自动部署和configurationWindows服务器
  • 我如何设置它以便每个人都使用/ bin / bash shell?
  • Chrooting用户login
  • 我如何configurationmonit来启动特定用户的进程?
  • 最好的terminalunix编辑build议给某人?
  • 2 Solutions collect form web for “阻止应用程序的rm -rf”

    它可以使用TMPDIR或TEMPDIR环境variables的值。 您可以尝试将其设置为不同的目录,并查看该程序是否使用该目录。 也许这是一个configuration设置。

    如果你能删除/ tmp目录或其中的所有内容,作为非root用户,那么你的权限似乎是错误的。

    我在我的系统上拥有的权限是:

    drwxr-xr-x 26 root root 4096 2009-10-14 12:00 / drwxrwxrwt 27 root root 12288 2009-10-19 16:10 /tmp 

    /目录只允许root删除顶级目录,/ tmp上的粘性位只允许所有者在/ tmp中删除自己的文件。 显然,你需要根源来纠正这些问题。

    假设它使用取消链接function删除文件,您可以创build一个预先载入的小型共享库,这将覆盖系统取消链接function。

    创buildunlink.c包含:

     int unlink(const char *pathname) { return 0; } int unlinkat(int dirfd, const char *pathname, int flags) { return 0; } 

    如果使用的话,我们也覆盖unlinkat函数。 您现在可以运行:

     % gcc unlink.c --shared -o unlink.so % file unlink.so unlink.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, not stripped % touch foo % LD_PRELOAD=./unlink.so rm foo % ls foo foo 

    如果您发现您的程序需要删除其他文件,则可以通过例如检查要求删除的path来使您的replacefunction更加智能化。

    想到两个想法:

    1. 您可以尝试将不可变标志添加到目录中。 +我

      chattr +我/path/到/文件/ *

    2. 如果程序是脚本,请取消该用户的rm命令链接。 为rm创build一个别名“什么也不做”的别名:

      别名rm ='echo'

    我认为第一个会阻止文件被删除,但不会自动发生。 第二个将阻止应用程序删除任何文件,至less使用RM命令。 如果它正在使用文件系统调用,那么你将很难用这种方法来防止删除。

    服务器问题集锦,包括 Linux(Ubuntu, Centos,Debian等)和Windows Server服务器.