1

Python の chroot タイプの動作をシミュレートする方法を探しています。os.chrootドキュメントによると、Unix でのみ動作します。Windowsにも必要です。私がそれを実装しようとした 1 つの方法は、ルート パスと、abs_pathルートからの相対パスを変換するメソッドを定義することです。abs_pathこれは、無関係なコードを削除した後のスニペットです。self.wd.get()現在の作業ディレクトリを取得します。

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/。これを実装するためのより良い方法は何ですか?

4

1 に答える 1

0

問題はchroot()、UNIX がプロセス レベルでそれを行っていることであり、フォークされたすべてのプロセスはそれを回避できません。あなたの方法は他のパスを隠しますが、悪用者があなたのコードを悪用することに成功した場合、悪意のあるコードを実行し、ファイルシステム全体にアクセスできます.

Googleで少し検索すると、これらの答えが得られます。

それを行ういくつかのアプリケーションと同様に:

この SO answer で提案されているように、Windows API を使用してそれを達成することができます。

chroot最後に、 UNIX システムとrunasWindowsを使用して、chroot 環境でサブプロセスを実行するための独自の抽象化を作成できます。パスフェイカーを作成する必要はありませんが、セキュリティは向上しています。

于 2013-06-22T12:51:33.910 に答える