用python伪造chroot

用python伪造chroot,python,chroot,Python,Chroot,我想在chroot中运行一些python代码。代码在没有chroot的情况下运行,我不想添加任何特殊的外壳来在chroot中运行它。我可以只调用os.chroot(),但我不想为了这一点功能就必须以root用户身份运行整个程序(我认为没有办法以非root用户身份调用chroot)。我也可以将sudochroot作为子进程调用,然后与之通信,但这样我就无法在python代码中调用普通函数;我必须让它们与chroot子流程通信 作为一个例子,下面是我尝试运行的一些代码: import os impo

我想在chroot中运行一些python代码。代码在没有chroot的情况下运行,我不想添加任何特殊的外壳来在chroot中运行它。我可以只调用
os.chroot()
,但我不想为了这一点功能就必须以root用户身份运行整个程序(我认为没有办法以非root用户身份调用
chroot
)。我也可以将
sudochroot
作为子进程调用,然后与之通信,但这样我就无法在python代码中调用普通函数;我必须让它们与
chroot
子流程通信

作为一个例子,下面是我尝试运行的一些代码:

import os
import subprocess

def foo():
    subprocess.call(['pacman', '-Qe']) # Knowledge of pacman shouldn't be necessary

os.chroot('chroot/root')
foo()
此代码需要root用户。我已经研究了
fakeroot
fakechroot
包来实现这一点,但我仍然认为我必须创建一个新的子流程并与之通信,这需要我更改
foo
来处理该子流程。我是否可以获得
fakechroot
的功能,但是使用
os.chroot()
的特性,运行的python程序就在chroot中,而不仅仅是与它通信


我使用的是Arch Linux和Python 2.7。

在C语言中,你将
fork
,孩子将
chroot
,然后
exec
,而家长
等待
ed。“我可以调用
os.chroot()
,但我不想以root身份运行整个程序。”。所以不要这样;在主目录中创建chroot不需要是root。@JonathonReinhart,对不起,我不知道如何使用它。你能解释一下吗?@JonathonReinhart:你可以用Python做完全相同的事情。@abarnert当我
chroot
I
chroot
作为
chroot/root
上的root用户时,该目录下的文件权限是
root