2

次のコマンドを使用してディレクトリをchrootしました。

os.chroot("/mydir")

前のディレクトリに戻る方法-chrootする前に?たぶん、ディレクトリをunchrootすることは可能ですか?

解決:

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)

より詳しい情報

4

1 に答える 1

3

現在の作業ディレクトリを変更していない場合は、単に呼び出すことができます

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

もちろん、これにはCAP_SYS_CHROOT機能が必要です(通常はrootにのみ与えられます)。

作業ディレクトリを変更した場合でも、エスケープすることはできますが、それはより困難です。

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

現在の作業ディレクトリを変更した場合chrootは、ディレクトリを開き、を使用fchdirして戻ることで回避できます。

もちろん、通常のプログラムの過程で(つまり、デモンストレーションやセキュリティの悪用ではなく)chrootから抜け出すつもりなら、プログラムを再考する必要があります。まず第一に、あなたは本当にchrootを脱出する必要がありますか?必要な情報を事前にコピーできないのはなぜですか?

また、chrootの外部に留まり、chrootされたプロセスの要求に応答する2番目のプロセスの使用を検討してください。

于 2012-04-05T17:23:41.790 に答える