unix – 阻止rm -rf用于应用程序
发布时间:2020-12-15 18:31:14 所属栏目:安全 来源:网络整理
导读:我有应用程序,在运行时生成有趣的中间输出到./tmp目录. 执行结束时,将删除此目录. 我怎样才能保留它的内容? 我系统上没有uid 0. 因此,我无法拦截(阻止取消链接)任何I / O操作. 目前我正在停止这个应用程序和它的cp内容. 应用程序是静态编译的,因此共享库LD_
我有应用程序,在运行时生成有趣的中间输出到./tmp目录.
执行结束时,将删除此目录. 我怎样才能保留它的内容? 我系统上没有uid 0. 应用程序是静态编译的,因此共享库LD_PRELOAD无济于事. 谢谢你的回复.
它可以使用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 如果您发现程序需要删除其他文件,则可以通过检查要求删除的路径来使您的替换功能更加智能化. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |