Python chroot类型跨平台行为
我正在寻找一种方法来模拟python的chroot类型行为。根据文档,仅适用于Unix。我在Windows上也需要它。我尝试实现它的一种方法是定义一个根路径和一个方法abs_path,该方法转换相对于根的给定路径。下面是删除一些不相关代码后的abs_路径片段。self.wd.get获取当前工作目录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
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也比使用虚拟化环境安全得多,可以添加更多的安全功能来保护他的系统。