python os.chroot:退出chroot

时间:2015-10-18 05:31:59

标签: python chroot

我有以下代码:

#! /usr/bin/python

import os
import subprocess

def run_subprocess(cmd):
    print 'Starting : {}'.format(cmd)
    p = subprocess.Popen(cmd.split(), stdout=subprocess.PIPE, stderr=subprocess.PIPE) 
    odata, edata = p.communicate()
    print 'Done : {}'.format(cmd)
    if odata:
        print 'Output : {}'.format(odata)
    if edata:
        print 'Error : {}'.format(edata)
    return odata

LS_CMD = 'ls'
run_subprocess(LS_CMD)  # output 1
x_cwd = os.getcwd()
root_fd =os.open('/', os.O_RDONLY)
os.chroot('/mnt/mnt_sda5')
os.chdir('/')
os.fchdir(root_fd)
os.close(root_fd)
os.chdir(x_cwd)
run_subprocess(LS_CMD)  # output 2
print os.getcwd()

我chroot到另一个目录并返回到当前的工作目录。

我期待output1和output2匹配。输出1是我期望看到的。 output2为空。

你能解释一下原因吗?

由于

1 个答案:

答案 0 :(得分:0)

os.chdir(x_cwd)您需要os.chroot('.')之前,将根目录更改回原来的' /'你现在用fchdir改变的路径。所以那些线条变成了:

os.fchdir(root_fd)
os.chroot('.')
os.close(root_fd)

这里有一些细节 - http://www.bpfh.net/simes/computing/chroot-break.html