Seite 1 von 1

IOError: [Errno 13] Permission denied

Verfasst: Freitag 25. März 2011, 23:49
von Gremlin
Ich hab vor ein paar Tagen mein Programm veröffentlicht und erhalte nun massenweise Fehlerreports über Dateien auf die nicht zugegriffen werden konnte. Ich überprüfe ob die Dateien existieren bevor ich sie (zum lesen) öffne. Ich weiß aber nicht genau, woran das nun liegt bzw. um es genauer zu sagen, ob "ich" als Entwickler überhaupt irgendetwas dran ändern kann, außer diese Fehler abzufangen.

Hauptsächlich treten die Fehler bei der 64bit Version auf, ich gehe also davon aus, dass es größtenteils auf Windows Vista bzw. 7 zurückzuführen ist. Ich selbst nutze auch Windows 7 und habe allerdings nicht diese Probleme. Bevor ich nun irgendetwas als "Lösung" präsentiere, wüsste ich doch gerne ob das nun wirklich die einzige wäre. Also in dem Fall das abfangen, loggen und letztendliche ignorieren.

Kennt das jemand? Hat jemand einen besseren Vorschlag?

Re: IOError: [Errno 13] Permission denied

Verfasst: Samstag 26. März 2011, 01:18
von snafu
Da wird vermutlich irgendwas mit der Rechtevergabe nicht stimmen. Würde die Datei nicht existieren, dann gäbe es einen anderen Fehlertext. Im Übrigen ist es kein guter Stil, eine solche Art von Vorprüfung zu machen, wie du es tust. Der Grund ist, dass dies keine atomare Aktion ist, d.h. die Gegebenheiten könnten sich in der Zeit zwischen Test und dem darauf folgenden Dateizugriff schon wieder geändert haben. In bestimmten Szenarien könnte sogar ein Angreifer dieses Vertrauen böswillig ausnutzen. Besser ist es, den Zugriff einfach zu probieren und die möglichen Fehlerszenarien (d.h. Exceptions) sinnvoll abzufangen.

Re: IOError: [Errno 13] Permission denied

Verfasst: Samstag 26. März 2011, 01:37
von Gremlin
Naja, es sind keine Dateien die "mal eben so" verschwinden können. Wenn überhaupt werden sie von wiederum einem anderen Programm geändert.
Aber inwiefern könnte man mein Vorgehen böswillig ausnutzen? Es geht schließlich in dem Fall nur um die reine Existenz, nicht um den Inhalt einer Datei.

Re: IOError: [Errno 13] Permission denied

Verfasst: Samstag 26. März 2011, 02:27
von deets
Ich verstehe auch nicht genau, auf was snafu da raus will - beim lesen zumindest.

Wie dem auch sei, das einzige, was mir da als nicht-windows-user einfiele waere, dein Programm mal nicht mit deinem Standard-Benutzer laufen zu lassen, der - so nehme ich mal an - eher weitreichende Rechte hat. Programmierer haben die ja gerne mal ;)

UU kommst du dadurch dem Problem auf die Schliche.

Re: IOError: [Errno 13] Permission denied

Verfasst: Samstag 26. März 2011, 02:30
von Leonidas
Gremlin hat geschrieben:Naja, es sind keine Dateien die "mal eben so" verschwinden können. Wenn überhaupt werden sie von wiederum einem anderen Programm geändert.
Macht es aber nicht besser. Es ist immer noch ein potentieller Bug. Stell dir vor du prüfst, ob ne Datei exisitiert (Ergebnis: ja), der Virenscanner sieht nen Zugriff auf eine Datei, prüft sie und befindet sie für einen Virus und löscht/steckt sie in Quarantäne, ob jetzt gerechtfertigt oder nicht sei mal dahingestellt. Nun kommt dein Programm, versucht sie zu öffnen und crasht. Das ist doch kein gutes Vorgehen, nicht wahr?
Gremlin hat geschrieben:Aber inwiefern könnte man mein Vorgehen böswillig ausnutzen? Es geht schließlich in dem Fall nur um die reine Existenz, nicht um den Inhalt einer Datei.
Naja, es gibt Szenarien wo es sinnvoll ist etwa ein Programm zu crashen, so wie deines, um dadurch Zugang zu irgendwas zu bekommen. Oder es einfach außer Gefecht zu setzen (Stichwort DoS). Und davon abgesehen ist die sichere Lösung eh besser, denn du versuchst Dateien zu lesen, aber prüfst nur ob sie existieren, aber nicht ob du sie auch lesen darfst. Eine Ausnahmebehandlung beim Lesen würde beide Fälle abdecken.

Re: IOError: [Errno 13] Permission denied

Verfasst: Samstag 26. März 2011, 07:52
von snafu
Für mich wäre halt abgesehen vom Sicherheitsaspekt schon das Wissen um die besagte "Lücke" in meiner Logik ein Grund, anders vorzugehen. Natürlich kann es sehr gut sein, dass dieser Crash niemals eintritt, aber an deiner Stelle würde ich gar nicht erst das Potenzial eines Programmabsturzes bzw eine "fragwürdige" Logik im Code haben wollen.

Re: IOError: [Errno 13] Permission denied

Verfasst: Samstag 26. März 2011, 15:04
von Gremlin
Inzwischen fange ich bei allen open()'s und codecs.open()'s diesen IOError ab, zusätzlich. Bei Zugriffen auf Verzeichnisse sieht die Sache allerdings wieder anders aus... Egal, zum Thema wegen den Rechten: Mein Programm fordert über UAC Administratorrechte an, deshalb wundert mich das ja auch dass da so viele Zugriffsfehler bei den Usern kommen. Ist zwar jetzt kein Problem dass jeder User hat ("nur" ~10%) aber gefallen will mir das trotzdem nicht so recht. (Ich hasse es wenn ich als Antwort nur "Das ist bei dir halt so" parat habe..)

Re: IOError: [Errno 13] Permission denied

Verfasst: Samstag 26. März 2011, 15:12
von Rebecca
Unter Windows koennen Dateien ja auch beim Zugriff gelockt werden--wie saehe da die Fehlermeldung aus? (Schert Python sich ueberhaupt darum?) Nur so eine Idee...

Re: IOError: [Errno 13] Permission denied

Verfasst: Samstag 26. März 2011, 15:48
von DasIch
Rebecca hat geschrieben:Unter Windows koennen Dateien ja auch beim Zugriff gelockt werden--wie saehe da die Fehlermeldung aus? (Schert Python sich ueberhaupt darum?) Nur so eine Idee...
Das würde wahrscheinlich zu einem WindowsError führen.