如何在chroot中执行命令?

时间:2018-11-09 06:34:48

标签: 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"); // command failed

    return 0;
}

如何在chroot中执行命令?

还是可以退出chrood然后执行命令,然后再次返回chroot?

2 个答案:

答案 0 :(得分:3)

如果使用chroot(),则必须考虑您所做的事情的后果。主要后果之一是,除非您在chroot()的环境中使它们可用,否则许多通常可用的命令将不可用。

正确地完成这项工作并非易事。您可能需要在新的根目录下正确安装/dev/bin/etc/usr/lib(可能还有其他)的一部分。通常,返回“ chroot()环境外部”的符号链接无效。您必须复制重要的内容。所有这些的副作用:/tmp很少是创建完全可操作的chroot()环境的适当位置。您可能无法访问/tmp下的受限访问子目录,但是将用户置于/tmp并不能很好地将他们与其他用户隔离,或与其他用户隔离。

另一种主要可能性:完成chroot()后,您不授予用户访问其他命令的权限。也就是说,您不要尝试在代码中使用system();并且您不授予 victim 用户访问Shell或Shell实用程序的权限。

换句话说,使用chroot()并不是随便做的。做好一项工作需要大量的仔细思考和准备。

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

请使用Google或任何其他搜索引擎搜索诸如以下的字词:

  • 'chroot越狱'
  • “ chroot监狱设置”
  • 'chroot jail vs docker'
  

是否可以从chroot退出然后执行命令,然后再次返回到chroot

不是。您可能有一个控制程序,可以派生一个执行chroot()并处理材料然后终止的子级,以便控制程序可以执行其工作(执行命令),然后可以派生另一个返回的子级进入chroot()监狱。但这与当前退出监狱的流程不同-如果任何程序可以一时兴起取消其入狱时间并恢复未监禁的活动,这将使chroot()完全无效。

答案 1 :(得分:-1)

那又怎么样:

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

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