2012-04-05 72 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