在我的源代码中,我制作了chroot,然后有一些代码在做一些工作,然后我想执行linux命令。但是该命令不起作用,因为我用chroot更改了根目录。
在源代码之后:
int main(void)
{
if (chroot("/tmp") < 0)
printf("error in chroot\n");
/* some source code doing staffs */
system("ls > /logloglog.txt"); // command failed
return 0;
}
如何在chroot中执行命令?
还是可以退出chrood然后执行命令,然后再次返回chroot?
答案 0 :(得分:3)
如果使用chroot()
,则必须考虑您所做的事情的后果。主要后果之一是,除非您在chroot()
的环境中使它们可用,否则许多通常可用的命令将不可用。
正确地完成这项工作并非易事。您可能需要在新的根目录下正确安装/dev
,/bin
,/etc
,/usr
,/lib
(可能还有其他)的一部分。通常,返回“ chroot()
环境外部”的符号链接无效。您必须复制重要的内容。所有这些的副作用:/tmp
很少是创建完全可操作的chroot()
环境的适当位置。您可能无法访问/tmp
下的受限访问子目录,但是将用户置于/tmp
并不能很好地将他们与其他用户隔离,或与其他用户隔离。
另一种主要可能性:完成chroot()
后,您不授予用户访问其他命令的权限。也就是说,您不要尝试在代码中使用system()
;并且您不授予 victim 用户访问Shell或Shell实用程序的权限。
换句话说,使用chroot()
并不是随便做的。做好一项工作需要大量的仔细思考和准备。
使用某种容器或虚拟机会更好吗?
请使用Google或任何其他搜索引擎搜索诸如以下的字词:
是否可以从
chroot
退出然后执行命令,然后再次返回到chroot
?
不是。您可能有一个控制程序,可以派生一个执行chroot()
并处理材料然后终止的子级,以便控制程序可以执行其工作(执行命令),然后可以派生另一个返回的子级进入chroot()
监狱。但这与当前退出监狱的流程不同-如果任何程序可以一时兴起取消其入狱时间并恢复未监禁的活动,这将使chroot()
完全无效。
答案 1 :(得分:-1)
那又怎么样:
system("chroot /tmp /bin/bash -c \"<COMMAND>\"");
您可以直接使用系统并在/ tmp环境中使用-c execute命令运行chroot