python os.chroot : 退出 chroot 后出现意外输出
python os.chroot : unexpected output after exiting 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 到另一个目录,然后回到当前工作目录。
我期待输出 1 和输出 2 匹配。 output1 是我期望看到的。 output2 为空。
能否解释一下原因?
谢谢
在 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
我有以下代码:
#! /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 到另一个目录,然后回到当前工作目录。
我期待输出 1 和输出 2 匹配。 output1 是我期望看到的。 output2 为空。
能否解释一下原因?
谢谢
在 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