Autenticazione GTK app per funzionare con i permessi di root
-
18-09-2019 - |
Domanda
Ho un'applicazione UI (usa GTK) per Linux, che richiede di essere eseguito come root (che legge e scrive / dev / sd *).
Invece di richiedere all'utente di aprire una shell di root o utilizzare "sudo" manualmente ogni volta, quando si lancia la mia app, mi chiedo se l'applicazione può utilizzare alcune API OS-fornita per ottenere i permessi di root. (Nota:. Gtk app non possono utilizzare la modalità "setuid", in modo che non è un'opzione qui)
Il vantaggio qui sarebbe un flusso di lavoro più facile:. L'utente potrebbe, dal suo account utente predefinito, fare doppio clic su mia app dal desktop, invece di dover aprire un terminale di root e lanciare da lì
Lo chiedo perché OS X offre esattamente questo: Un'applicazione può chiedere al sistema operativo di lanciare un eseguibile con i permessi di root - il sistema operativo (e non l'applicazione) poi chiede all'utente di inserire le sue credenziali, li verifica e poi lancia il bersaglio come desiderato.
Mi chiedo se ci sia qualcosa di simile per Linux (Ubuntu, per esempio).
Chiarimento:
Così, dopo il suggerimento a PolicyKit mi chiedo se posso usare che per ottenere r / w l'accesso ai "/ dev / sd ..." dispositivi a blocchi. Trovo il documention abbastanza difficile da capire, così ho pensato che avevo prima chiedere se questo è possibile a tutti prima di spendere ore a cercare di capire invano.
Aggiornamento:
L'applicazione è uno strumento di riparazione del disco azionato a distanza per l'utente unsavvy Linux, e quei niubbi Linux non avrà molto la comprensione di usare sudo o anche cambiare le appartenenze ai gruppi di loro utenti, soprattutto se il loro disco appena iniziato a recitare e si' ri andando fuori di testa. Ecco perché cerco una soluzione che evita tecnicismi come questo.
Soluzione
Il modo vecchio, semplice ma ora in fase di esaurimento, è gksu . Qui è la discussione sul futuro di gksu.
Il nuovo modo è quello di utilizzare PolicyKit . Io non sono molto sicuro di come questo funziona, ma penso che è necessario per lanciare la vostra applicazione utilizzando il comando pkexec
.
UPDATE:
Guardando il codice di esempio su http://hal.freedesktop.org /docs/polkit/polkit-apps.html , sembra che è possibile utilizzare PolicyKit per ottenere l'autorizzazione per certo azioni che sono descritti dai file .policy
in /usr/share/polkit-1/actions
. L'azione per l'esecuzione di un programma come un altro utente è org.freedesktop.policykit.exec
. Io non riesco a trovare un'azione per accedere direttamente i dispositivi a blocchi, ma devo ammettere, la documentazione PolicyKit rompe il mio cervello troppo.
Così, forse il corso più semplice di azione per voi è quello di separare il codice disco pressare che richiede privilegi in una riga di comando, ed eseguire che dalla vostra applicazione GUI utilizzando g_spawn_[a]sync()
con pkexec
. In questo modo non avrebbe dovuto preoccuparsi di azioni richiedente e questo genere di cose. E 'probabilmente una cattiva pratica in ogni caso per eseguire l'applicazione GUI intero come root.
Un altro suggerimento è quello di chiedere l'autore di PolicyKit (David Zeuthen) direttamente. Oppure provate pubblicare la tua domanda alla lista gtk-app-devel.