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

Windows server应用程序的fork/chroot等效项

  •  5
  • codebox  · 技术社区  · 16 年前

    6 回复  |  直到 16 年前
        1
  •  9
  •   Michael Dillon    16 年前

    首先,Windows相当于 chroot RUNAS documented here . 如果你需要通过一个程序来做这件事,那么学习 this C++ source code 应帮助您了解如何使用Windows API。这与 chroot()

    你可能不想完全模仿 fork() 在Windows上,因为听起来你不需要走那么远。了解用于创建进程的Windows API及其与 fork() Mr. Peabody Explains fork() . 的实际当前源代码 Cygwin's fork implementation 向您展示当前的技术状态。

    Microsoft的文档 CreateProcess() CreateThread()

    最后,如果您不想了解平台的所有细节,只需编写在Windows和Unix上工作的可移植程序,为什么不使用 Apache Portable Runtime library Here are some docs on process creation with some sample code

        2
  •  3
  •   sharptooth    16 年前

    世上没有这样的事 fork() CreateProcess() fork() 然后马上 exec() lpCurrentDirectory -只需传递您以前使用的目录路径 chroot()

        3
  •  2
  •   Prof. Falken    16 年前

    最简单的方法就是使用 Cygwin

    当然,有一些缺点,有些人可能会认为这是“作弊”,但你要求的是最简单的解决方案。

        4
  •  1
  •   Callie J    16 年前

    如果不使用兼容框架(Interix、Cygwin等),您将看到使用Windows范例来实现这类功能。

    fork/vfork在unix上是一种廉价的操作,这就是为什么经常将其与多线程相比较。视窗等效物- CreateProcess() CreateThread() . 这里有很多示例代码

    依据 chroot() ,Windows没有这个概念。有一些库声称可以模仿您所需要的。然而,这取决于你为什么要在第一时间启动。

    阅读评论,如果它只是为了阻止人们带着 ../../../../ (etc),chroot将完成这项工作,但它不能取代解析输入并确保其正常:即,如果指定了太多的父目录,则将用户锁定到已知的根目录中。Apache几乎肯定会这样做,因为我从来没有为Apache创建过chroot()环境。。。

        5
  •  0
  •   JesperE    16 年前

    使用fork/chroot并不是在Windows上完成事情的方式。如果您关心子流程中的安全性,那么您可能希望使用某种形式的虚拟化或沙箱。通过某种形式的RPC解决方案,可以将复杂信息传递给子流程。

    Cygwin ,但我不确定Cygwin是否/如何模仿 chroot

        6
  •  0
  •   Sanjaya R    16 年前