Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.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
Python chroot类型跨平台行为_Python - Fatal编程技术网

Python chroot类型跨平台行为

Python chroot类型跨平台行为,python,Python,我正在寻找一种方法来模拟python的chroot类型行为。根据文档,仅适用于Unix。我在Windows上也需要它。我尝试实现它的一种方法是定义一个根路径和一个方法abs_path,该方法转换相对于根的给定路径。下面是删除一些不相关代码后的abs_路径片段。self.wd.get获取当前工作目录 def abs_path(self, rel_path): """ Converts relative path to absolute path Ta

我正在寻找一种方法来模拟python的chroot类型行为。根据文档,仅适用于Unix。我在Windows上也需要它。我尝试实现它的一种方法是定义一个根路径和一个方法abs_path,该方法转换相对于根的给定路径。下面是删除一些不相关代码后的abs_路径片段。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上也应该运行良好。我最担心的是ret.findself.root==0:,我用它来检查ret的计算结果是否高于根。例如,如果root=/home/user/,则rel_path=/abc/。/../../应计算为绝对路径/home/user/。实现这一点的更好方法是什么?

问题是unix中的chroot是在进程级别执行的,每个分叉的进程都无法逃脱。您的方法隐藏了其他路径,但如果攻击者利用您的代码进行攻击,那么它将执行恶意代码并访问您的整个文件系统

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

和 以及一些实现此功能的应用程序:

您可以使用windows API实现这一点


最后,您可以在unix系统上使用chroot,在windows上使用runas,在chrooted环境中运行子流程!所有这些,无需创建路径伪造者,但具有更好的安全性。

…作为补充,不会高估chroot。事实上,我只能支持并投票赞成你的评论。OP询问了一个类似于可移植chroot的特性,我向他建议了一种对其进行抽象的方法。他的解决方案比使用真正的chroot要安全得多,使用真正的chroot也比使用虚拟化环境安全得多,可以添加更多的安全功能来保护他的系统。