1

我正在寻找一种方法来模拟 python 的 chroot 类型行为。os.chroot根据文档,仅适用于 Unix。我也需要它用于 Windows。我尝试实现它的一种方法是定义一个根路径和abs_path一个将给定路径相对于根进行转换的方法。这是abs_path删除一些不相关代码后的片段。self.wd.get()获取当前工作目录。

def abs_path(self, rel_path):
        """
        Converts relative path to absolute path
        Taking care of the virtual root
        """
        if rel_path == '':
            return os.path.abspath(os.path.join(self.root, self.wd.get()))
        if rel_path[0] == '/':
            ret = os.path.join(self.root, rel_path)
        else:
            ret = os.path.join(self.root, self.wd.get(), rel_path)

        ret = os.path.abspath(ret)
        if ret.find(self.root) == 0:
            return ret
        return self.root

这似乎在 Linux 下运行良好,我相信它也应该在 Windows 下运行良好。我担心的主要事情是if ret.find(self.root) == 0:,我用它来检查ret评估到高于根的路径的情况。例如。if root=/home/user/, thenrel_path=/abc/../../应该评估为绝对路径/home/user/。实现这一点的更好方法应该是什么?

4

1 回答 1

0

问题是chroot()unix 是在进程级别执行此操作的,每个分叉的进程都无法逃脱。您的方法隐藏了其他路径,但是如果利用者成功利用您的代码,那么它就会执行恶意代码并可以访问您的整个文件系统。

在谷歌上搜索一下就会得到这些答案:

以及一些执行此操作的应用程序:

您可以按照这个 SO answer 的建议使用 windows API 来实现这一点。

chroot最后,您可以在 chroot 环境中使用unix 系统和runasWindows进行自己的抽象来运行子进程!所有这一切,无需创建路径伪造器,但具有更好的安全性。

于 2013-06-22T12:51:33.910 回答