代码之家  ›  专栏  ›  技术社区  ›  MOHAMED

如何在chroot中执行命令?

  •  2
  • MOHAMED  · 技术社区  · 6 年前

    在我的源代码中,我做了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 回复  |  直到 6 年前
        1
  •  3
  •   Jonathan Leffler Toon Krijthe    6 年前

    如果你使用 chroot() ,你必须考虑你所做的事情的后果。其中一个主要后果是,许多(大多数,所有)通常可用的命令都不可用,除非您在 chroot() 'd环境。

    做好那项工作是不平凡的。你可能需要 /dev , /bin , /etc , /usr , /lib 在新的根目录下适当地安装。符号链接回到“外部” chroot() 一般来说,环境“不会起作用。你必须复制重要的东西。所有这些的一个副作用是: /tmp 很少是一个合适的地方,以建立一个全面的运作 chroot() 环境。您可能会在下面的子目录中获得有限的访问权限 /tmp公司 ,但将用户放入 /tmp公司 不会很好地将它们与其他用户或其他用户隔离开来。

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

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

    你最好还是用一个容器或者某种虚拟机来代替?

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

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

    有可能退出吗 chroot 然后执行命令,然后返回 改变根目录 再一次?

    不是真的。你也许可以有一个控制程序来派生一个这样做的孩子 chroot() 并处理材料,然后终止,这样控制程序就可以完成它的工作(执行命令),然后您就可以派生另一个子程序返回到 chroot() 坐牢。但这和现在出狱的过程不一样 chroot() 如果任何一个程序能突发奇想取消它的牢狱之旅,恢复没有失败的活动,那就完全无效了。

        2
  •  -1
  •   Daniel Lazar    6 年前

    关于:

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

    您可以直接使用system和/tmp环境中的-c execute命令运行chroot

    推荐文章