如何从 Chroot 监狱导入 Python 库?
How to import a Python library from a Chroot jail?
假设我正在尝试从目录中的库中执行一些代码,我们称之为 /home/user/project
。在 Bash 中它会是这样的:
cd /home/user/project
python -c "from MyLib import DoSth; var = DoSth(); print(var)"
现在我的具体情况有点复杂。我的 Python 代码(包括所有已安装的库)位于 chroot 监狱中。我正试图从监狱外执行代码。我尝试了以下方法:
cd /home/user/project
sudo -- chroot $CHROOT_DIR python3 -c "from MyLib import DoSth; var = DoSth(); print(var)"
这会打印:
ModuleNotFoundError: No module named 'MyLib'
这是因为jail 中的当前目录只是/
,因为之前的cd
语句没有在jail 中执行。当我这样尝试时:
sudo -- chroot $CHROOT_DIR cd /home/user/project; python3 -c "from MyLib import DoSth; var = DoSth(); print(var)"
我得到了这个错误:
chroot: failed to run command ‘cd’: No such file or directory
有没有办法不用改变监狱内的目录就可以使用图书馆?或者至少帮我找到一种方法来更改监狱内的目录。
编辑:
我想做的与 suggested question 完全相反。我正在尝试从监狱外执行代码(完全在监狱内)。代码在监狱内完美运行,但在外面却不行。 /home/user/project
是jail里面的一个目录。
我设法通过 运行 包含我需要的所有命令的脚本而不是 运行 单独的命令来做到这一点,因为 cd
总是无法 运行在 chroot 上(即使该目录在监狱内)。这是命令:
sudo -- chroot $CHROOT_DIR /bin/bash /home/user/myscript
在我的脚本中:
cd /home/user/project
python3 -c "from MyLib import DoSth; var = DoSth(); print(var)"
假设我正在尝试从目录中的库中执行一些代码,我们称之为 /home/user/project
。在 Bash 中它会是这样的:
cd /home/user/project
python -c "from MyLib import DoSth; var = DoSth(); print(var)"
现在我的具体情况有点复杂。我的 Python 代码(包括所有已安装的库)位于 chroot 监狱中。我正试图从监狱外执行代码。我尝试了以下方法:
cd /home/user/project
sudo -- chroot $CHROOT_DIR python3 -c "from MyLib import DoSth; var = DoSth(); print(var)"
这会打印:
ModuleNotFoundError: No module named 'MyLib'
这是因为jail 中的当前目录只是/
,因为之前的cd
语句没有在jail 中执行。当我这样尝试时:
sudo -- chroot $CHROOT_DIR cd /home/user/project; python3 -c "from MyLib import DoSth; var = DoSth(); print(var)"
我得到了这个错误:
chroot: failed to run command ‘cd’: No such file or directory
有没有办法不用改变监狱内的目录就可以使用图书馆?或者至少帮我找到一种方法来更改监狱内的目录。
编辑:
我想做的与 suggested question 完全相反。我正在尝试从监狱外执行代码(完全在监狱内)。代码在监狱内完美运行,但在外面却不行。 /home/user/project
是jail里面的一个目录。
我设法通过 运行 包含我需要的所有命令的脚本而不是 运行 单独的命令来做到这一点,因为 cd
总是无法 运行在 chroot 上(即使该目录在监狱内)。这是命令:
sudo -- chroot $CHROOT_DIR /bin/bash /home/user/myscript
在我的脚本中:
cd /home/user/project
python3 -c "from MyLib import DoSth; var = DoSth(); print(var)"