2016-04-07 3 views
2

Gibt es einen Befehlszeilenbefehl, um den Zugriff auf alle Dateien und Ordner im System über ein Python-Programm zu deaktivieren? Es sollte einen Fehler geben, wenn das Programm versucht, auf eine Datei zuzugreifen. Zum Beispiel in der Befehlszeile:Dateizugriff auf ein Python-Programm über die Befehlszeile deaktivieren

$ python filename.py <some_command>

oder etwas ähnliches.

Es sollte keine Funktionen wie open('filename.txt') im Programm erlauben.

Bearbeiten: sudo ermöglicht es, Programme mit Administratorzugriff auszuführen. Können wir Befehle wie Sudo erstellen, die den Zugriff auf andere Dateien und Ordner einschränken?

Vielen Dank.

+3

Nein, es gibt kein solches magisches Argument. Grundsätzlich benötigt Python Dateizugriff zum Laden von Bibliotheken. Es kann eine gute Idee sein, Ihr Skript mit Docker oder einer ähnlichen Lösung zu versehen. –

+0

@KlausD. Vielen Dank –

+1

auf welchem ​​Betriebssystem laufen Sie? Unix und OSX haben chroot, mit denen Sie ein Programm zwingen könnten, in einem sehr begrenzten (einschließlich leerem) Dateisystem zu laufen. –

Antwort

1

Aus der Liste der Befehlszeilenoptionen für Python scheint diese Option nicht zu sein (und Sandboxing zu verhindern IO scheint nicht too effective zu sein). Sie könnten Ihre eigenen Befehlsargumente machen diese Funktionalität zu erhalten, zum Beispiel

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") 

Die Kehrseite ist, Sie müssen jeden offen wickeln, lesen usw. in einer if-Anweisung. Der Vorteil ist, dass Sie genau angeben können, was Sie erlauben möchten. Die Ausgabe würde dann wie folgt aussehen:

$ 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

Vielen Dank, aber ich habe Python-Programme von externer Quelle und ich möchte sie auf meinem Computer ausführen, ohne Programmberechtigungen für den Zugriff auf andere Dateien und Ordner. Gibt es eine Möglichkeit, dies zu tun? –

+1

Die Sandbox-Optionen auf dem obigen Link (http://stackoverflow.com/questions/10268193/disabling-std-and-file-io-in-python-sandbox-implementation), zum Beispiel Pypy Sandbox, sind sehr begrenzt in was Module erlauben sie aber können für Ihren Fall arbeiten. Der Vorschlag des fehlgeschlagenen Pysandbox-Projekts scheint darin zu bestehen, den Python-Code selbst in einer externen Sandbox auszuführen (siehe z. B. https://lwn.net/Articles/574215/). –