Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在chroot中执行命令?_C_Linux_Chroot - Fatal编程技术网

如何在chroot中执行命令?

如何在chroot中执行命令?,c,linux,chroot,C,Linux,Chroot,在我的源代码中,我做了chroot,然后让一些代码做了一些工作,然后我想执行linux命令。但是这个命令不起作用,因为我用chroot更改了根 在源代码之后: int main(void) { if (chroot("/tmp") < 0) printf("error in chroot\n"); /* some source code doing staffs */ system("ls > /logloglog.txt");

在我的源代码中,我做了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;
}
int main(无效)
{
if(chroot(“/tmp”)<0)
printf(“chroot中的错误\n”);
/*一些源代码正在运行*/
系统(“ls>/loglog.txt”);//命令失败
返回0;
}
如何在chroot中执行命令

或者是否可以退出ChROD,然后执行命令,然后再次返回到Chelt?

如果使用<代码> CheloTo()/Cuth>,你必须考虑你所做的事情的后果。其中一个主要后果是,除非在

chroot()
'd环境中使其可用,否则通常可用的许多(大多数、所有)命令都不可用

正确地做那项工作不是小事。您可能需要在新根目录下适当安装
/dev
/bin
/etc
/usr
/lib
(可能还有其他)的部分。通常,返回到“在
chroot()环境之外”的符号链接将不起作用。你必须复制重要的东西。所有这些的一个副作用是:
/tmp
很少是创建完全可操作的
chroot()
环境的合适场所。您可能会在
/tmp
下获得一个访问权限有限的子目录,但将用户放入
/tmp
并不能很好地将他们与其他用户或其他用户隔离开来

另一个主要的可能性是:在执行
chroot()
之后,您不允许用户访问其他命令。也就是说,您不尝试在代码中使用
system()
;并且您不给受害者用户访问shell或shell实用程序的权限

换句话说,使用
chroot()。要把工作做好需要相当多的仔细思考和准备

使用容器或某种虚拟机会更好吗

请使用谷歌或任何其他搜索引擎搜索以下术语:

  • “chroot越狱”
  • “chroot监狱设置”
  • “chroot监狱vs docker”
是否可以退出
chroot
,然后执行命令,然后再次返回
chroot

不是真的。您可能有一个控制程序,该程序分叉一个子对象,该子对象执行
chroot()
并处理材料,然后终止,这样控制程序就可以执行其任务(执行命令),然后您可以分叉另一个子对象,使其返回
chroot()
监狱。但这与当前的越狱过程不同-如果任何程序可以一时兴起取消其监禁时间并恢复未失败的活动,那么这将使
chroot()
完全无效。

system("chroot /tmp /bin/bash -c \"<COMMAND>\"");
system(“chroot/tmp/bin/bash-c\”);

您可以直接使用系统运行chroot,并在/tmp环境中使用-c execute命令

很可能没有
/tmp/bin/bash
/tmp/bin/ls
-如果有,另一个就已经工作了!tmp和bin/bash之间有空间。第一个/tmp参数表示chroot环境位于何处。第二种说法是,/bin/bash不应该用于从c代码执行命令,而应该用于从它工作的控制台执行命令。由于系统函数正在调用终端命令,所以它也可以工作。所以您试过了吗?结果是什么?