Files mit root rechten schreiben

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Francesco
User
Beiträge: 824
Registriert: Mittwoch 1. Dezember 2004, 12:35
Wohnort: Upper Austria

Eine Sache, die mir öfters unterkommt, ist

Code: Alles auswählen

cfile = file(meinfile, 'wb')
cfile.write("irgendwas")
cfile.close()
Error: Write Access: (mein file), wenn ich den editor mit normalen user rechten gestartet habe und das file eben root rechte hat.

Natürlich könnte ich den Editor als root öffnen, das möchte ich aber nicht. Statt dessen wäre es mir lieber (feststellen, dass der grund die fehlerhaften rechte sind), wenn der benutzer die Gelegenheit bekommt, mit einem Dialog, in dem er das root oder was auch immer passwort eingeben kann, das file dann speichern kann.

wie kann ich am besten feststellen, dass der Grund des Schreiberrors am root recht liegt? Eigentlich könnte ich gleich in die Titel- oder Statuszeile (evtl. mit besonderer Farbe) das kennzeichnen (root oder was auch immer).
ichisich
User
Beiträge: 134
Registriert: Freitag 1. Januar 2010, 11:52

Ha in dem Du das File fragen tust wem es gehört !!

OS-Modul

Wäre wohl eine Möglichkeit.

Code: Alles auswählen

os.access(path, mode)
# und oder
os.stat(path)
#siehe Link unteres Drittel ...
Francesco
User
Beiträge: 824
Registriert: Mittwoch 1. Dezember 2004, 12:35
Wohnort: Upper Austria

Ja, danke (das hätt ich eigentlich selbst auch rausfinden müssen/sollen :oops: ). Jetzt bleibt noch die Frage, wie ich das dann wirklich dann auch speichern kann.
ichisich
User
Beiträge: 134
Registriert: Freitag 1. Januar 2010, 11:52

Mir wird nicht ganz klar wie dein Szenario ist.
Du hast einen selbst implementierten Editor !?
Du benutzt einen externen Editor !?
.
.
.


Und was willst Du wo speichern ?
Welches File welche Rechte hat oder wie ?

Warum nicht jedes mal vor dem Öffnen testen wie die Rechtelage ist und dann darauf reagieren ?

Gruß
Francesco
User
Beiträge: 824
Registriert: Mittwoch 1. Dezember 2004, 12:35
Wohnort: Upper Austria

ichisich hat geschrieben:Mir wird nicht ganz klar wie dein Szenario ist.
Du hast einen selbst implementierten Editor !?
Du benutzt einen externen Editor !?
Und was willst Du wo speichern ?
Welches File welche Rechte hat oder wie ?
Warum nicht jedes mal vor dem Öffnen testen wie die Rechtelage ist und dann darauf reagieren ?
Gruß
Sorry, ich habe mich nicht klar genug ausgedrückt, das möchte ich hiermit nachholen.

Ich verwende bzw. möchte DrPython erweitern (mit einem Plugin). Es passiert manchmal, dass ich ein File öffne/ändern möchte, das root rechte hat. Man editiert daraufhin und dann kommt man drauf, oje, war ein root file.

Natürlich kann ich mich oder dem Anwender aufmerksam machen, hoppla, das hat Root Rechte, das kannst du nicht speichern, ... und auffordern, mit einem anderen Editor (oder Drpython als Root aufgerufen) zu editieren. Dass das noch hineingehört, ok fehlt noch, hatte ich ohnehin vor.

Ich kann das file auch unter anderen Namen abspeichern (für den Fall, dass ich schon einiges editiert habe und die Änderungen nicht verlieren möchte) und dann die Rechte des Files auf root ändern und unbenennen. Aber praktischer als den Editor mit einer zweiten Instanz (also zusätzlich als root aufzurufen wäre, das file (ausnahmsweise) speichern zu können. Das würde auch das Linux Sicherheitssystem nicht verletzen.

Da gibts ja irgendein ein Bit oder so etwas, was man vorübergehende setzen kann (s uid oder so .. muss ich noch nachsehen). Das schöne wäre, wenn nun (neben dem aufmerksam machen nach dem öffnen des files oder sonstige Kennzeichnung) beim Speichern dann ein Dialog käme, so kann es nicht gespeichert werden (was eh klar ist), mit der Möglichkeit, das root passwort einzugeben und die Datei damit speichern zu können.

Auf die Idee bin ich unter anderem auch deswegen gekommen, weil es im krusader auch so ein useraction script gibt, das erlaubt, in normalen krusader mode (nicht im root mode) ein file mit root rechten editieren zu können. Es kommt ein dialog: "Edit as root" mit einem Texteingabefeld: Password. Wenn das passwort falsch ist, startet es nicht, sondern fragt nochmals oder man kann abbrechen.

Am einfachsten (ist ein wenig russisch) wäre es einfach, bei files, bei denen man von haus aus weis, dass man sie ändern möchte (zb in /etc oder /usr), einfach die Rechte auf den user zu setzen.
Francesco
User
Beiträge: 824
Registriert: Mittwoch 1. Dezember 2004, 12:35
Wohnort: Upper Austria

Hmm, mittlerweile denke ich, dass es sauberer wäre, den user hinzuweisen, dass der (zb beim öffnen schon) das file ohnehin nicht speichern kann und er den editor (evtl. als zweite instanz) mit root rechten (mit sudo oder gksudo) starten soll.

Nachtrag: Wen es irgendwen noch interessieren sollte. Ich habe es eine mehr oder weniger wilde Art gelöst. Falls es nicht zum Speichern ist, nehme ich an, die Rechte passen nicht. Dabei starte ich python von meinem python programm neu mit gksudo, speichere das file vorher in ein tmpfile, gebe das file als tmpfile (den namen) und den eigentlichen filenamen an das gestartetete (zweite) python (sudo) programm mit, der dann das file als root speichert.
Antworten