2012-04-05 19 views
2

我chroot的使用下面的命令目录:Python。 Unchroot目录

os.chroot("/mydir") 

如何返回目录上一个 - 前Chroot环境? 也许有可能unchroot目录?

SOLUTION:

感谢Phihag。我找到了解决方案。简单的例子:

import os 
os.mkdir('/tmp/new_dir') 
dir1 = os.open('.', os.O_RDONLY) 
dir2 = os.open('/tmp/new_dir', os.O_RDONLY) 

os.getcwd()    # we are in 'tmp' 
os.chroot('/tmp/new_dir') # chrooting 'new_dir' directory 
os.fchdir(dir2) 
os.getcwd()    # we are in chrooted directory, but path is '/'. It's OK. 
os.fchdir(dir1) 
os.getcwd()    # we came back to not chrooted 'tmp' directory 

os.close(dir1) 
os.close(dir2) 

More info

回答

3

如果你没有改变当前的工作目录,你可以简单地调用

os.chroot('../..') # Add '../' as needed 

当然,这需要CAP_SYS_CHROOT能力(通常只提供给根)。

如果你已经改变了你的工作目录,您可以still escape,但它很难:

os.mkdir('tmp') 
os.chroot('tmp') 
os.chdir('../../') # Add '../' as needed 
os.chroot('.') 

如果chroot改变当前的工作目录,您可以通过打开目录,并使用fchdir去得到周围背部。

当然,如果您打算在正常程序(即不是演示或安全漏洞利用)过程中退出chroot,您应该重新考虑您的程序。首先,你真的需要逃脱chroot吗?为什么你不能事先将所需的信息复制到它?

此外,请考虑使用第二个进程,该进程停留在chroot之外并回答chroot请求的请求。

+0

谢谢!您的建议有效。 – Martynas 2012-04-10 11:00:58