Hi, in einer Python-Software will eine Funktion unterbringen, die root-Rechte voraussetzt und eine andere, die aus Sicherheitsgründen als root nicht ausführbar ist. Ein Skript kann man aber ja nur entweder als root oder als User ausführen. Auf Anhieb fällt mir da nur ein, 2 vom Anwender separat zu startende Programme zu realisieren (eines wahrscheinlich am Besten als Thread), die miteinander kommunizieren. Die Kommunkation könnte über TCP/IP-Sockets (Loopback) gehen, das hätte ich schonmal gemacht, oder ich kucke mir bei der Gelegenheit dazu mal Pipes oder Shared Memory an. Aber eigentlich ist das doch mit Kanonen auf Spatzen geschossen, oder nicht? Wisst ihr vielleicht eine elegantere Lösung? Falls es jemanden interessiert, der Teil, der root voraussetzt, ist die wifi-library, mit der ich mit einem Wlan verbunden werden soll. Der Teil, der als root nicht möglich ist, ist Browser-Steuerung mit Selenium und einer headless Firefox-Instanz. Danke!
Re: [Python] Eine Funktion braucht root-Rechte, eine andere funktioniert nur ohne (im selben Program
Stefan S. schrieb: > Falls es jemanden interessiert, der Teil, der root voraussetzt, ist die > wifi-library, mit der ich mit einem Wlan verbunden werden soll. Der > Teil, der als root nicht möglich ist, ist Browser-Steuerung mit Selenium > und einer headless Firefox-Instanz. > > Danke! Gib mal ein paar Details, so reicht das nicht. Welches Betriebssystem - Linux (welche Distri), Mac, etc. -, welche Hardware. Am besten noch den relevanten Code-Teil, also import und Methodenaufrufe.
Re: [Python] Eine Funktion braucht root-Rechte, eine andere funktioniert nur ohne (im selben Program
Stefan S. schrieb: > Falls es jemanden interessiert, der Teil, der root voraussetzt, ist die > wifi-library, mit der ich mit einem Wlan verbunden werden soll. Und da kann man nichts mit Berechtigungen machen? User zu gruppe netdev hinzufügen oder so? Ansonsten, den Teil in ein anderes Programm auslagern, setuid bit setzen, von anderem Program aus starten, und davor ne pipe oder einen UNIX socket mitgeben, falls die Programme noch miteinander kommunizieren müssen. Ist aber sehr schwer richtig hinzukriegen, ein Fehler und das System ist offen. Python ist für setuid zeug dafür auch nicht wirklich geeignet.
Re: [Python] Eine Funktion braucht root-Rechte, eine andere funktioniert nur ohne (im selben Program
Kümmer dich drum das Niemand anders das Zeug was als root läuft missbrauchen kann.
Re: [Python] Eine Funktion braucht root-Rechte, eine andere funktioniert nur ohne (im selben Program
Ich würde das Programm als root starten. Das Programm startet dann selber einen subprocess mit einem anderen User. subprocess.Popen() hat das Argument preexec_fn. os.setuid() und os.setgid() existieren... Vielleicht kann man damit was bauen.
Re: [Python] Eine Funktion braucht root-Rechte, eine andere funktioniert nur ohne (im selben Program
Stefan S. schrieb: > in einer Python-Software will eine Funktion unterbringen, die > root-Rechte voraussetzt und eine andere, die aus Sicherheitsgründen als > root nicht ausführbar ist. Ein Skript kann man aber ja nur entweder als > root oder als User ausführen. Auf Anhieb fällt mir da nur ein, 2 vom > Anwender separat zu startende Programme zu realisieren (eines > wahrscheinlich am Besten als Thread), die miteinander kommunizieren. Die > Kommunkation könnte über TCP/IP-Sockets (Loopback) gehen, das hätte ich > schonmal gemacht, oder ich kucke mir bei der Gelegenheit dazu mal Pipes > oder Shared Memory an. Aber eigentlich ist das doch mit Kanonen auf > Spatzen geschossen, oder nicht? Wisst ihr vielleicht eine elegantere > Lösung? Ja. Programm als root starten, Subprozeß starten, das Hauptprogramm (oder nach Geschmack natürlich auch der Kindprozeß) können dann ihre Privilegien mit os.setgroups([]) und der os.set*id()-Familie droppen und die unsicheren Funktionen ausführen. Wie die Prozesse dabei mit einander kommunizieren, bleibt vollständig Dir überlassen -- die Klasse Popen aus dem Modul subprocess oder auch die Funktion os.popen() bieten Dir dabei direkte Möglichkeiten, Pipes für die Interprozesskommunikation zu eröffnen.
Re: [Python] Eine Funktion braucht root-Rechte, eine andere funktioniert nur ohne (im selben Program
DPA schrieb: > Ansonsten, den Teil in ein anderes Programm auslagern, setuid bit > setzen Aus Sicherheitsgründen funktioniert das Setuid-Bit nicht bei Skripten, da müßte dann ein kleiner binärer setuid-Wrapper her.
Re: [Python] Eine Funktion braucht root-Rechte, eine andere funktioniert nur ohne (im selben Program
UDEV-Rule stricken
Re: [Python] Eine Funktion braucht root-Rechte, eine andere funktioniert nur ohne (im selben Program
Mit einer richtigen Programmiersprache kein Problem: group- und user-id wechseln. Programmierbeispiele gibt es Haufenweise im Netz. Ein paar der besseren Beispiele für C: https://www.oreilly.com/library/view/secure-programming-cookbook/0596003943/ch01s03.html https://wiki.sei.cmu.edu/confluence/display/c/POS36-C.+Observe+correct+revocation+order+while+relinquishing+privileges Da Python die entsprechenden Systemcalls wrapped sollte das auch mit dem Python-Zeug möglich sein.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.