我试着运行以下脚本,它运行良好,但没有得到预期的结果:

import os,sys
os.system("mount /dev/sdb3 /mnt")
os.system("lsblk")
os.system("mount --bind /proc /mnt/proc")
os.system("mount --bind /home /mnt/home")
os.system("mount --bind /dev /mnt/dev")
os.system("mount --bind /sys /mnt/sys")
os.chroot("/mnt")
os.system("pwd")
os.system("lsblk")

这是因为当我在os.chroot(“/mnt”)之后执行pwd时,我不在“/mnt”目录中。但是,当我使用shell命令(不使用python脚本)直接将以下代码运行到Linux终端时,我得到了预期的结果。
现在我的问题是,为什么我不能使用os.chroot(“/mnt”)进入/mnt目录。如何使用os.chroot(使用python脚本)实现这一点?

最佳答案

Python的os.chrootchroot(2)系统调用的原始包装器。如系统调用文档中所述:
此调用不会更改当前工作目录,因此在调用之后“.”可以位于根目录为“/”的树之外。特别是,超级用户可以通过以下方式逃离“chroot监狱”:

mkdir foo; chroot foo; cd ..

此调用不会关闭打开的文件描述符,并且此类文件描述符可能允许访问chroot树之外的文件。
您需要自己显式地更改当前工作目录,例如os.chdir('/')以移动到新的根目录。
您看到的行为与从shell运行命令时不同,因为chroot(1)可执行文件显式地将当前工作目录更改为新根目录(source)。

关于python - os.chroot()麻烦,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30858174/

10-15 08:44