加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

发布时间:2020-12-15 18:31:14 所属栏目:安全 来源:网络整理
导读:我有应用程序,在运行时生成有趣的中间输出到./tmp目录. 执行结束时,将删除此目录. 我怎样才能保留它的内容? 我系统上没有uid 0. 因此,我无法拦截(阻止取消链接)任何I / O操作. 目前我正在停止这个应用程序和它的cp内容. 应用程序是静态编译的,因此共享库LD_
我有应用程序,在运行时生成有趣的中间输出到./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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读