2016-04-07 3 views
2

pythonプログラムからシステム内のすべてのファイルとフォルダへのアクセスを無効にするコマンドラインコマンドはありますか?プログラムがファイルにアクセスしようとすると、エラーが返されます。たとえば、コマンドラインで:同様のコマンドラインからのPythonプログラムへのファイルアクセスを無効にする

$ python filename.py <some_command>

か何か。

プログラム内でopen('filename.txt')のような機能を許可しないでください。

編集:sudoを使用すると、管理者権限でプログラムを実行できます。他のファイルやフォルダへのアクセスを制限するsudoのようなコマンドを作成できますか?

ありがとうございます。

+3

いいえ、このような魔法の引数はありません。基本的に、Pythonはライブラリをロードするためにファイルにアクセスする必要があります。ドッカーまたは同様のソリューションでスクリプトをサンドボックス化するとよいでしょう。 @KlausD。 –

+0

ありがとうございます –

+1

あなたはどのオペレーティングシステムを実行していますか? unixとosxにはchrootがあります。これにより、非常に限られた(空の)ファイルシステムでプログラムを実行させることができます。 –

答えて

1

pythonのコマンドラインオプションのリストからは、このオプションがないようです(IOがtoo effectiveでないように見えるようにサンドボックスする)。あなたはダウンサイドは、あなたがif文でなどを読んで、すべてのオープンをラップする必要がある

import argparse 

class blockIOError(Exception): 
    pass 

parser = argparse.ArgumentParser(description='Block IO operations') 
parser.add_argument('-bIO','-blockIO', 
        action='store_true', 
        help='Flag to prevent input/output (default: False)') 

args = parser.parse_args() 

blockIO = args.bIO 

if not blockIO: 
    with open('filename.txt') as f: 
     print(f.read()) 
else: 
    raise blockIOError("Error -- input/output not allowed") 

例えば

、独自のコマンド引数は、この機能を得るために作ることができます。利点は、あなたが許可したいものを正確に指定できることです。出力は次のようになります。

$ python 36477901.py -bIO 
Traceback (most recent call last): 
    File "36477901.py", line 19, in <module> 
    raise blockIOError("Error -- input/output not allowed") 
__main__.blockIOError: Error -- input/output not allowed 
+0

ありがとうございますが、私は外部ソースからPythonプログラムを持っていて、他のファイルやフォルダにアクセスするためのプログラム権限を与えずに、自分のコンピュータでそれらを実行したいと思います。これを行う方法はありますか? –

+1

上記のリンク(http://stackoverflow.com/questions/10268193/disabling-std-and-file-io-in-python-sandbox-implementation)のサンドボックスオプション、例えばpypyサンドボックスは、モジュールが許可しますが、あなたのケースでは動作します。失敗したpysandboxプロジェクトの提案は、外部のサンドボックスでPythonコード自体を実行するように思われます(例:https://lwn.net/Articles/574215/) –

関連する問題