2012-04-05 13 views
2

I chrooted Verzeichnis folgende Befehle:Python. Unchroot Verzeichnis

os.chroot("/mydir") 

Wie vorherige zum Verzeichnis zurückzukehren - vor chrooten? Vielleicht ist es möglich, das Verzeichnis zu chrooten?

LÖSUNG:

Dank Phihag. Ich habe eine Lösung gefunden. Einfaches Beispiel:

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

Antwort

3

Wenn Sie Ihr aktuelles Arbeitsverzeichnis nicht geändert haben, können Sie einfach

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

Natürlich nennen können, dies erfordert die CAP_SYS_CHROOT Fähigkeit (in der Regel nur gegeben Wurzel).

Wenn Sie Ihr Arbeitsverzeichnis geändert haben, können Sie still escape, aber es ist schwieriger:

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

Wenn chroot das aktuelle Arbeitsverzeichnis ändert, können Sie rund um das erhalten, indem Sie das Verzeichnis öffnen und mit fchdir gehen zurück.

Natürlich, wenn Sie im Laufe eines normalen Programms aus einer Chroot aussteigen wollen (d. H. Keine Demonstration oder Sicherheitslücke), sollten Sie Ihr Programm überdenken. Zuallererst, musst du der Chroot wirklich entkommen? Warum können Sie nicht einfach vorher die erforderlichen Informationen hineinkopieren?

Denken Sie auch daran, einen zweiten Prozess zu verwenden, der außerhalb der Chroot bleibt und auf die Anforderungen des Chroot antwortet.

+0

Vielen Dank! Dein Vorschlag funktioniert. – Martynas