PermissionError: [Errno 13] Permission denied

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Hallo liebe Gemeinde,

    mein Name ist Joerg und ich bin mit dem ganzen Thema Python/Linux erst ganz am Anfang und würde mich freuen, wenn mir jemand helfen könnte.

    Worum geht es?

    Ich lasse ein Pythonscript per Autostart (/etc/rc.local) laufen.

    Der Aufruf des Scriptes wird in der "lc.local" so realisiert: "python3 /home/pi/share/home_wetter/wettermodul_1.py &"

    Dieses Script liest mir Temperatur, Luftdruck, etc. von 3 Sensoren und schreibt die Daten in eine html- bzw. txt-Datei.

    Das funktioniert ja alles.

    Nun das Problem:

    Die txt-Dateien werden u.a. in einen Ordner meiner "Fritzbox 7590" geschrieben, damit ich diese dann - in welcher Form auch immer - weiterverwenden kann.

    Wenn das Script per Autostart losrennt, funktioniert das ja auch prima.

    Nur wenn ich das Script in der Console (ssh per Putty oder per RemoteDesktop) starte, bekomme ich folgende Fehlermeldung:

    dateischreiben = open('/media/fritzbox_speicher/wetter/homewetter_temp.txt','w')

    PermissionError: [Errno 13] Permission denied: '/media/fritzbox_speicher/wetter/homewetter_temp.txt'

    Das Problem ist hierbei, dass er den Zugriff auf die Fritzbox, den Ordner oder die Datei nicht zulässt - warum auch immer.

    Den Ordner "wetter" im Fritz.NAS habe ich ja beim Hochfahren des Raspi schon gemountet:

    In der /etc/rc-local: "mount /media/fritzbox_speicher"

    in der /etc/fstab: "//192.168.178.1/FRITZ.NAS/ /media/fritzbox_speicher cifs credentials=/etc/samba/auth,vers=2.0"

    und in der /etc/samba/auth: "username=xxx

    password=xxx"

    In der FritzBox ist der Benutzer eingerichtet und hat Zugriff auf den entsprechenden Ordner.


    Da ja der Zugriff funktioniert, wenn ich das Script per Autostart starte, kann es ja eigentlich nicht an irgendwelchen Rechten von dem Ordner bzw. der Datei liegen.

    Was mache ich falsch? Wo muss ich ansetzten?

    Wie gesagt, Erfahrung mit Linux = Einsteigerl-Level (alles mit viel Recherchieren hinbekommen, aber von Ahnung würde ich jetzt noch nicht sprechen ;) )

    Danke schon mal im Voraus für eure Mühe.

    LG

    Joerg

  • Wie startest du das Skript per Hand?

    Wenn es über die RC lokal geht, welche im übrigen veraltet ist und nicht mehr verwendet werden sollte, der neue bessere Weg ist eine systemd Unit, wird das Skript als root ausgeführt.

    Hat jetzt dieser die Datei erstellt, so hast du keine Rechte zum Zugriff. ( mal grob im allgemeinen)

    Der *du* Ist vermutlich der User Pi. Du musst bei Linux aufpassen, das ist ein mehr Benutzer System. Hier würde ich dir dringend raten dich da von vertraut zu machen, ebenso der zugehörigen Rechteverwaltung.

    Da es sich bei dir auch noch um einen gemouteten Ordner handelt, so musst du sicherstellen, dass beim Mount die Rechte für den entsprechenden (gewünschten) User gesetzt werden

  • Alles aus rc.local wird als user=root ausgeführt (hat noch nicht den multi-user Service (level) erreicht.

    Auch der mount aus fstab wird als root ausgeführt. Die credentials (username= password= ) dienen nur zum (Windows)Verbindungsaufbau. Wenn der user pi (auch) Eigentümer aller Dateien und Verzeichnisse am Fritz-NAS werden soll, womit er auch Schreibrechte erhält, musst Du als Mount Option uid=pi,gid=pi setzen. Siehe < man mount >, < man mount.cifs >

    Wenn Du als (angemeldeter) user pi, egal ob remote, oder local, auf das CIFS-Mount Verzeichnis zugreifst, machst Du das pi, solange Du mit sudo nicht auf den user root wechselst.

    Servus !

    RTFM = Read The Factory Manual, oder so

  • Wenn der user pi (auch) Eigentümer aller Dateien und Verzeichnisse am Fritz-NAS werden soll, womit er auch Schreibrechte erhält, musst Du als Mount Option uid=pi,gid=pi setzen. Siehe < man mount >, < man mount.cifs>

    Mit dem Eintragen der UID und GID in der fstab beim Mounten hat nun der Zugriff wieder funktioniert.

    Das für mich nicht Nachvollziehbare war ja, dass das Script gestern mit meiner "alten" Fritzbox funktioniert hat und mit der neuen Fritzbox halt nicht mehr....


    Dankeschön für die schnelle Hilfe.

    PS: Mit der "systemd Unit" werde ich mich aber trotzdem beschäftigen, wenn das mit der rc.local veraltet ist.

    Grüße Joerg

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!