Frage

Ich habe einen UI-App (nutzt GTK) für Linux, die als root ausgeführt werden muss (es liest und schreibt / dev / sd *).

Statt den Benutzer erfordern eine Root-Shell zu öffnen oder „sudo“ manuell jedes Mal verwenden, wenn er meine app startet, frage ich mich, ob die App einige OS bereitgestellte API verwenden können, um root-Rechte zu bekommen. (Anmerkung:. Gtk App nicht "setuid" -Modus verwenden können, das ist also keine Option hier)

Der Vorteil hier wäre ein einfacher Workflow sein. Der Benutzer kann von seinem Standardbenutzerkonto, doppelklicken Sie auf meine App aus dem Desktop stattdessen eine Wurzel mit Terminal zu öffnen und es von dort starten

ich das fragen, weil OS X bietet genau das: Eine App kann das OS bitten, eine ausführbare Datei mit Root-Rechten zu starten - das Betriebssystem (und nicht die app) fragt dann den Benutzer zur Eingabe seiner Anmeldeinformationen, so dass sie überprüft und dann die startet Ziel als gewünscht ist.

Ich frage mich, ob es etwas ähnliches für Linux (Ubuntu, z.)

Klarstellung:

So, nach dem Hinweis auf PolicyKit Ich frage mich, ob ich das verwenden kann, um r / w Zugriff auf die „/ dev / sd ...“ Block-Geräte zu bekommen. Ich finde die Dokumention ziemlich schwer zu verstehen, so dass ich dachte, ich würde zunächst fragen, ob dies möglich ist, überhaupt, bevor ich Stunden damit verbringen, zu versuchen, es vergeblich zu verstehen.

Update:

Die App ist ein ferngesteuertes Disk Reparatur-Tool für die unsavvy Linux-Benutzer, und diese Linux noobs haben nicht viel Verständnis für sudo oder sogar ihre Benutzergruppenmitgliedschaften zu ändern, vor allem, wenn ihre Festplatte handeln bis gerade begonnen und sie‘ re ausgeflippt. Deshalb habe ich eine Lösung suchen, die technischen Details wie diese vermieden werden.

War es hilfreich?

Lösung

Der alte Weg, einfach, aber jetzt auslaufen, ist gksu . Hier ist die Diskussion über gksu Zukunft.

Der neue Weg ist PolicyKit . Ich bin mir nicht ganz sicher, wie das funktioniert, aber ich glaube, Sie müssen Ihre App mit dem pkexec Befehl starten.

UPDATE:

am Beispielcode Blick auf http://hal.freedesktop.org /docs/polkit/polkit-apps.html , so scheint es, dass Sie PolicyKit Genehmigung für bestimmte erhalten verwenden können Aktionen , die durch .policy Dateien in /usr/share/polkit-1/actions beschrieben werden. Die Aktion für ein Programm als einen anderen Benutzer ausgeführt wird org.freedesktop.policykit.exec. Ich kann nicht eine Aktion scheinen zu finden für Blockgeräte direkt zugreifen, aber ich muss zugeben, dass die PolicyKit Dokumentation bricht mir das Gehirn auch.

Also, vielleicht die einfachste Vorgehensweise ist für Sie Ihre Disk-Mangeln Code zu trennen, die Privilegien in eine Befehlszeilenprogramm erfordert, und führen Sie das aus Ihrer GUI-Anwendung g_spawn_[a]sync() mit pkexec verwenden. Auf diese Weise würden Sie nicht mit anfordernden Aktionen und so etwas haben zu stören. Es ist wahrscheinlich eine schlechte Praxis sowieso Ihre ganze GUI-Anwendung als root ausführen.

Ein weiterer Vorschlag ist der Autor von PolicyKit (David Zeuthen) direkt zu fragen. Oder versuchen Sie Ihre Frage an die gtk-App-devel Liste veröffentlichen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top