unix – 阻止rm -rf用于应用程序

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

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

应用程序是静态编译的,因此共享库LD_PRELOAD无济于事.
应用程序使用的**./ ** tmp文件夹与任何env变量无关.

谢谢你的回复.

它可以使用TMPDIR或TEMPDIR环境变量的值.您可以尝试将其设置为其他目录,并查看程序是否使用该目录.也许这是一个配置设置.

如果您能够以非root用户身份删除/ tmp目录或其中的所有内容,那么您的权限似乎是错误的.

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

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中自己的文件.显然,你需要root来纠正这些问题.

假设它使用unlink函数删除文件,您可以创建一个预加载的小型共享库,它会覆盖系统取消链接功能.

创建unlink.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

如果您发现程序需要删除其他文件,则可以通过检查要求删除的路径来使您的替换功能更加智能化.

相关文章

用的openwrt路由器,家里宽带申请了动态公网ip,为了方便把2...
#!/bin/bashcommand1&command2&wait从Shell脚本并行...
1.先查出MAMP下面集成的PHP版本cd/Applications/MAMP/bin/ph...
1、先输入locale-a,查看一下现在已安装的语言2、若不存在如...
BashPerlTclsyntaxdiff1.进制数表示Languagebinaryoctalhexa...
正常安装了k8s后,使用kubect工具后接的命令不能直接tab补全...