我正在尋找一種方法來模擬python的chroot類型行爲。根據文檔,os.chroot
僅適用於Unix。我也需要它用於Windows。我試圖實現它的一種方法是定義根路徑和方法abs_path
,它將相對於根的給定路徑進行轉換。刪除一些不相關的代碼後,這裏是abs_path
的片段。 self.wd.get()
獲取當前工作目錄。Python chroot類型行爲跨平臺
def abs_path(self, rel_path):
"""
Converts relative path to absolute path
Taking care of the virtual root
"""
if rel_path == '':
return os.path.abspath(os.path.join(self.root, self.wd.get()))
if rel_path[0] == '/':
ret = os.path.join(self.root, rel_path)
else:
ret = os.path.join(self.root, self.wd.get(), rel_path)
ret = os.path.abspath(ret)
if ret.find(self.root) == 0:
return ret
return self.root
這似乎在Linux下工作得很好,我相信它也可以在Windows下正常工作。我擔心的主要問題是if ret.find(self.root) == 0:
,我正在使用它來檢查ret
的計算結果高於根的路徑。例如。如果root=/home/user/
,則rel_path=/abc/../../
應評估爲絕對路徑/home/user/
。什麼應該是更好的實現方式?
...作爲補充,不會高估'chroot'。是[不是一個真正的安全功能](http://securityblog.redhat.com/2013/03/27/is-chroot-a-security-feature/)。 –
的確,我只能支持併爲您的評論投票。 OP詢問了一個可移植的「類似chroot」的功能,並且我向他建議了一種對此進行抽象的方法。他的解決方案比使用真正的「chroot」要安全得多,而且使用真正的chroot比使用虛擬化環境要安全得多(還有更多的安全功能可以用來保護他的系統)。 – zmo