Come configurare pkexec per non chiedere la password?


12

Ho un'applicazione GUI che deve chiamare un demone (scritto in Python) con privilegi di superutente. Vorrei farlo senza richiedere all'utente una password.

Dato che il demone è uno script, non posso impostare direttamente il bit SUID. Potrei scrivere un wrapper C per questo, ma preferirei non reinventare la ruota, soprattutto quando un errore da parte mia potrebbe portare alla grave compromissione della sicurezza del sistema.

Quello che normalmente farei in questa situazione è aggiungere una riga /etc/sudoersche consenta agli utenti di eseguire il demone come root senza password, usando la direttiva NOPASSWD. Funziona bene dalla riga di comando. Tuttavia, quando lo faccio dalla GUI, viene pkexecvisualizzata una finestra di dialogo che richiede la password dell'utente. Sembra che su Ubuntu, le chiamate sudodalla GUI vengano in qualche modo intercettate da pkexec.

C'è un modo pulito per aggirare questo? Preferirei davvero non dover affrontare le seccature di una sceneggiatura setuid.


Di quale applicazione parli?
Radu Rădeanu,

Qualsiasi app GUI. Quando un'app GUI tenta di essere eseguita sudo somecommand, la finestra di dialogo che viene visualizzata è una pkexecfinestra di dialogo della password, indipendentemente dal fatto che esista un criterio sudoers che consente l'esecuzione del programma.
Chinmay Kanchi,

Risposte:


14

Non è corretto affermare che: "Sembra che su Ubuntu, le chiamate sudodalla GUI vengano in qualche modo intercettate da pkexec" . pkexecnon ha molto in comune con sudo. Al contrario sudo, pkexecnon concede l'autorizzazione di root a un intero processo, ma consente piuttosto un livello più fine di controllo della politica di sistema centralizzata.

Ora, se vuoi eseguire un'applicazione GUI senza che ti venga chiesta una password pkexec, non è difficile farlo. Prendiamo ad esempio GParted . Quando lo apri, vedrai la seguente finestra di dialogo che ti chiede una password:

autenticato con gparted

Fai clic su Dettagli e la finestra di dialogo apparirà ora come:

autenticazione gparted - dettagli

Da qui tutto ciò che devi fare è aprire il file usando ad esempio il seguente comando:/usr/share/polkit-1/actions/com.ubuntu.pkexec.gparted.policy

gksu gedit /usr/share/polkit-1/actions/com.ubuntu.pkexec.gparted.policy

e cambia le seguenti righe:

      <allow_any>auth_admin</allow_any>
      <allow_inactive>auth_admin</allow_inactive>
      <allow_active>auth_admin</allow_active>

con i seguenti:

      <allow_any>yes</allow_any>
      <allow_inactive>yes</allow_inactive>
      <allow_active>yes</allow_active>

Salva il file e chiudilo. Successivamente, quando aprirai GParted non ti verrà più richiesta una password.


Sì, pkexec intercetta davvero le chiamate a sudo. Fammi vedere se riesco a creare un esempio minimo di questo comportamento.
Chinmay Kanchi,

Non riesco a replicarlo in una semplice app, potrebbe accadere solo in alcune situazioni molto specifiche e non ho il tempo di rintracciare il bug. Accetterò la tua risposta. Saluti.
Chinmay Kanchi,

@ChinmayKanchi Cerchiamo di essere più chiari. Prenderò di nuovo l'esempio gparted. Quando si esegue dal terminale sudo gparted, si esegue il /usr/sbin/gpartedfile con i privilegi di root. Quando si avvia gparteddalla GUI, si avvia infatti gparted-pkexec(è possibile verificare questo /usr/share/applications/gparted.desktopfile interno ) /usr/bin/gparted-pkexecche è uno script di shell il cui scopo è quello di eseguire il seguente comando: pkexec "/usr/sbin/gparted"che è equivalente a pkexec gparted. Quindi, niente a che fare con sudo. E questo comando dovresti usare nel terminale, no sudo gparted.
Radu Rădeanu,

1
@ChinmayKanchi sudodovrebbe essere usato solo per le app della shell, non per le app della GUI. Vedi man sudoe man pkexecin questo senso.
Radu Rădeanu,

Sì, sono a conoscenza di entrambi i tuoi punti. La mia situazione è che ho un'app GUI (scritta da me) che tenta di avviare un programma shell (un demone, anch'esso scritto da me) usando sudo. Per qualche motivo, facendo questo si evoca che pkexec venga invocato invece di sudo, il che significa che qualsiasi politica sudo che ho creato per il demone viene ignorata.
Chinmay Kanchi,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.