Come configurare pkexec?


32

Leggendo queste domande e risposte:

mi ha portato un altro che creerà problemi per i nuovi utenti di quel comando:

  • Come configurare pkexecper un facile utilizzo?

Ad esempio quando si procede come segue:

(Apertura di un file nel terminale)

pkexec nano /etc/mysql/my.cnf  

(Apertura di un file nella GUI)

pkexec gedit /etc/mysql/my.cnf  

L'ultimo riceve il seguente errore:

 pkexec must be setuid root

Ora questo mi ha portato le seguenti domande:

  1. Come configurare pkexecper evitare di ottenere questo? Simile a come sudo/ gksucomportarsi quando si fa la stessa cosa (chiedono solo la password).

  2. Se applicabile, come dirgli di non chiedere una password dopo la prima volta applicandola a un comando (o includendo il primo comando se configurabile)?

  3. Dove salvare il file di configurazione se non ancora esistente?

  4. Esiste un'app GUI per configurare l' pkexecutilizzo (Policy Kit)?


1
In leiu di Ubuntu occuparsi degli affari in questo senso nel 13.04 questo è ciò che faccio per gedit e nautilus. Funziona bene qui, ma non pubblicherà come risposta in quanto è solo la mia soluzione fino a quando Ubuntu non se ne occuperà. ubuntuforums.org/…
doug

Hmm, non posso aggiungere un commento - quindi ricorrere a una risposta ... Usando: alias pkexec = 'pkexec env DISPLAY = $ DISPLAY XAUTHORITY = $ XAUTHORITY' Significa che la GUI di login restituisce il percorso di env piuttosto che il comando alla fine viene eseguito. C'è un modo per organizzare l'uso di "env DISPLAY = $ DISPLAY XAUTHORITY = $ XAUTHORITY" in modo che la gui pkexec restituisca il percorso al comando che alla fine viene eseguito? Vedi la foto qui: finestra di dialogo di autenticazione

Risposte:


39

Come configurare pkexecper evitare errori durante l'esecuzione di applicazioni GUI?

Ho trovato due modi possibili:

  1. Come puoi vedere, utilizza quanto segue:

    pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY gedit
    

    non otterrai alcun errore. E questo è normale perché man pkexecè molto chiaro in questa materia:

           [...] pkexec will not allow you to run X11 applications
           as another user since the $DISPLAY and $XAUTHORITY environment
           variables are not set.[...]
    

    Di conseguenza è possibile creare un alias ( permanente ) (questo è il modo più semplice):

    alias pkexec='pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY'
    
  2. Oppure, (di nuovo) come man pkexecdice:

           [...] These two variables will be retained if the
           org.freedesktop.policykit.exec.allow_gui annotation on an action is set
           to a nonempty value; this is discouraged, though, and should only be
           used for legacy programs.[...]
    

    puoi creare un nuovo file di criteri con /usr/share/polkit-1/actionsnome com.ubuntu.pkexec.gedit.policycon il seguente codice xml all'interno del quale la cosa più importante è impostare org.freedesktop.policykit.exec.allow_guiun valore non vuoto:

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE policyconfig PUBLIC
      "-//freedesktop//DTD PolicyKit Policy Configuration 1.0//EN"
      "http://www.freedesktop.org/standards/PolicyKit/1/policyconfig.dtd">
    <policyconfig>
    
      <action id="com.ubuntu.pkexec.gedit">
        <message gettext-domain="gparted">Authentication is required to run gedit</message>
        <icon_name>gedit</icon_name>
        <defaults>
          <allow_any>auth_admin</allow_any>
          <allow_inactive>auth_admin</allow_inactive>
          <allow_active>auth_admin</allow_active>
        </defaults>
        <annotate key="org.freedesktop.policykit.exec.path">/usr/bin/gedit</annotate>
        <annotate key="org.freedesktop.policykit.exec.allow_gui">true</annotate>
      </action>
    
    </policyconfig>
    

Come dirgli di non chiedere una password dopo averla applicata per la prima volta a un comando?

Per questi tre tag di impostazione: allow_any, allow_inactivee allow_activedal file dei criteri, sono disponibili le seguenti opzioni:

  • no : l'utente non è autorizzato a eseguire l'azione. Pertanto non è necessaria l'autenticazione.
  • : l'utente è autorizzato a eseguire l'azione senza alcuna autenticazione.
  • auth_self : è richiesta l'autenticazione ma l'utente non deve essere un utente amministrativo.
  • auth_admin : è richiesta l'autenticazione come utente amministrativo.
  • auth_self_keep : uguale a auth_self ma, ad esempio sudo, l'autorizzazione dura alcuni minuti.
  • auth_admin_keep : uguale a auth_admin ma, come sudo, l'autorizzazione dura alcuni minuti.

     Fonte: Polkit - Struttura - Azioni

Pertanto, se si utilizza l' opzione auth_admin_keep (o, a seconda dei casi, auth_self_keep ), pkexecnon verrà richiesta nuovamente una password per un certo periodo di tempo (per impostazione predefinita, questo tempo è impostato su 5 minuti come ho controllato). Lo svantaggio qui è che questa cosa è applicabile solo per uno - lo stesso - comando / applicazione e valida per tutti gli utenti (a meno che non sia annullata in una configurazione successiva).

Dove salvare il file di configurazione se non ancora esistente?

I file di configurazione o le definizioni polkit possono essere divisi in due tipi:

  • Le azioni sono definite in file XML .policy situati in /usr/share/polkit-1/actions. Ad ogni azione è associata una serie di autorizzazioni predefinite (ad esempio, è necessario identificarsi come amministratore per utilizzare l'azione GParted). Le impostazioni predefinite possono essere annullate ma la modifica dei file delle azioni NON è corretta. Il nome di questo file di criteri dovrebbe avere questo formato:

    com.ubuntu.pkexec.app_name.policy
  • Le regole di autorizzazione sono definite nei file JavaScript .rules. Si trovano in due posizioni: i pacchetti di terze parti possono usare /usr/share/polkit-1/rules.d(anche se pochi se ne /etc/polkit-1/rules.dtrovano ) ed è per la configurazione locale. I file .rules designano un sottoinsieme di utenti, fanno riferimento a una (o più) delle azioni specificate nei file delle azioni e determinano con quali restrizioni possono essere intraprese da tali / quegli utenti. Ad esempio, un file di regole potrebbe ignorare il requisito predefinito per tutti gli utenti di autenticarsi come amministratore quando utilizzano GParted, determinando che alcuni utenti specifici non devono farlo. O non è consentito utilizzare GParted.

     Fonte: Polkit - Struttura

Esiste un'applicazione GUI per configurare l' pkexecutilizzo?

Da quello che so, fino ad ora (18.01.2014) non esiste qualcosa del genere. Se in futuro troverò qualcosa, non dimenticherò di aggiornare anche questa risposta.


4
che bella risposta !! Grazie mille. Ora capisco perché non potrei correre doublecmdcon ROOT PRIVELEGES, dato che dovevo esportare ambienti con DISPLAY & XAUTHORITY!! Solo piccole domande: c'è qualche differenza nella politica di scrittura o nell'esecuzione di un programma con comando come pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY doublecmdsempre?
Ilia Rostovtsev,

@IliaRostovtsev questo sto pensando, pkexecdiventerà insicuro come gksudose attraversasse un tale alias? potrebbe essere, invece di un alias potrebbe essere uno script con privilegi di root, potrebbe essere più sicuro?
Aquarius Power il

@AquariusPower In che modo vedi che potrebbe diventare pericoloso? Potresti provare ovviamente, ma non ne sono sicuro. Il problema sorge quando è necessario utilizzare la GUI (X Server) che gira sotto "tu" e un altro programma GUI che deve essere eseguito come root. Gioca e post-back per favore, nel caso in cui trovi qualcosa.
Ilia Rostovtsev,

@ radu-rădeanu Su Utopic auth_admin_keepnon sembra funzionare. Se avvio synaptic da gui (che equivale a pkexec synaptic) mi chiede la password per ogni volta. Qualche idea sul perché?
Khurshid Alam,


0

Oltre alla risposta di Radu: non userei l'alias pkexec, ma gksudo .

Perché? Non è necessario riscrivere la sceneggiatura.

Uso la seguente configurazione:

  • aprire un terminale
  • cd /usr/local/bin
  • sudo gedit gksudo (crea un nuovo file chiamato "gksudo"
  • scrivi il seguente contenuto:

    • pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY $@

    • (non dimenticare il $@alla fine. Questo serve per reindirizzare tutti i parametri)

  • salva ed esci

  • rendere eseguibile il file: chmod 755 gksudo
  • Ora dovresti avere un comando gksudo completamente funzionale disponibile sul tuo sistema - in modo permanente.

Per motivi di documentazione, scriverò ciò che ho provato e non ho funzionato:

  • alias pkexec = 'pkexec env [...]'
  • alias gksudo = 'pkexec [...]'
    • Non era permanente e rimase in un solo terminale
  • aggiungendo l'alias a ~/.bash_aliases
    • Funziona se si apre per la prima volta un terminale. Non funziona se si fa doppio clic sugli script
  • Crea un collegamento a pkexec con parametri ( ln -s pkexec [...])
    • Dopo un rapido googleing, sembra che Linux non supporti i parametri nei collegamenti
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.