Come posso eseguire un'applicazione con una GUI come amministratore da una sessione utente non amministratore?

27

Ho definito 2 account utente:

  • uno con privilegio di amministratore (con sudo a destra) = & gt; chiamiamolo adminuser .
  • un secondo senza privilegi = & gt; chiamiamolo normaluser e configuro l'autologin su questo secondo utente normaluser .

Quindi, quando apro una sessione normaluser e voglio eseguire un'applicazione con privilegio di amministratore,
Apro un terminale Ctrl + Alt + T e:

su adminuser
sudo anyapplication ...

Funziona bene, senza dover uscire dalla sessione normaluser (non è necessario aprire una sessione adminuser ).

Ma cosa devo fare se l'applicazione deve essere eseguita con una GUI (Graphic User Interface)?
Ho pensato a questo:

su adminuser
gksu anyapplication ...

ma ottengo

** (gksu:9122): WARNING **: the connexion is closed
No protocol specified
No protocol specified
(gksu:9122): Gtk-WARNING **: cannot open display: :0.0
    
posta Boris 17.07.2012 - 21:49

8 risposte

23

Terminologia

In questa risposta:

  • normaluser è un utente normale che non è un amministratore e non può eseguire comandi come root con sudo .
  • admin è un amministratore che può eseguire comandi come root con sudo . (Ovviamente, qualsiasi comando grafico dovrebbe utilizzare un frontend grafico come gksu / gksudo , e non sudo direttamente.)
  • anyapplication è il nome dell'applicazione grafica normaluser vuole essere eseguito come root . normaluser conosce la password di admin e (presumibilmente) gli è stato detto che potrebbe usarlo a questo scopo.

Il problema

La causa del tuo problema e il motivo per cui la maggior parte delle altre risposte finora non funzionano (ad eccezione di La risposta eccellente di Marty Fried ) è:

  • gksu può essere configurato per utilizzare sudo o su come back-end. Il comportamento predefinito di gksu in Ubuntu è di agire come frontend per sudo , non per su . Ciò significa che, per impostazione predefinita, gksu e gksudo si comportano esattamente esattamente . Vedi la pagina di manuale .
  • normaluser non è un amministratore e quindi non può eseguire comandi come root con sudo . sudo richiede la password di l'utente che la esegue , non la password di l'utente che desidera diventare . Non essere in grado di utilizzare la tua password per eseguire azioni come persone che non sei tu cosa significa non essere un amministratore .
  • normaluser , a condizione che non sia un account Ospite, può eseguire comandi come un altro utente con su , inserendo la password di altri utenti . Ma gksu funge da frontend per sudo , non su .
  • normaluser non può direttamente eseguire qualsiasi comando come root , perché normaluser non può utilizzare sudo e nessuno può diventare root con su perché non c'è root password .

La soluzione

La soluzione richiede la scrittura di un comando che esegue due passaggi di autenticazione:

  • normaluser deve diventare admin per eseguire un comando grafico. Per fare ciò, normaluser deve eseguire gksu con il flag -w per eseguirlo in su-mode invece che su default sudo-mode e il flag -u per eseguire il comando come admin anziché root .
  • Il comando eseguito come admin deve invocare gksu senza il -w indicatore per utilizzare sudo per diventare root .

Ecco il comando (sì, l'ho provato ; -) ):

gksu -w -u admin gksu anyapplication

Ti verrà richiesta una password due volte :

  1. Innanzitutto, devi inserire la password admin , per consentire a normaluser di eseguire un comando come admin con su backend.
  2. In secondo luogo, devi inserire la password admin , per consentire a admin di eseguire un comando come root con sudo backend.

È vero. Immetti la password admin due volte.

Note varie:

  • Se lo desideri, puoi sostituire il secondo gksu con gksudo per renderlo meno confuso. In Ubuntu, sono equivalenti. (Puoi anche sostituire il primo gksu con gksudo , ma sarebbe estremamente controintuitivo e confuso.)
  • -w è la forma abbreviata di --su-mode .
  • -S è la forma abbreviata di --sudo-mode ma nessuna deve essere utilizzata perché sudo-mode è l'impostazione predefinita.
  • Puoi provare questo con un comando piuttosto innocuo, per assicurarti che faccia ciò che vuoi. (Lo farà, ma non è necessario che ti fidi di me.) Ad esempio:
    gksu -w -u admin gksu xclock
    xclock è una semplice applicazione di finestre di clock.
risposta data Eliah Kagan 17.07.2012 - 22:49
11

Un modo che probabilmente funzionerà è usare "sux" piuttosto che "su" quando si passa prima all'utente admin. sux corregge il problema dell'esecuzione di applicazioni x da parte dell'utente falso. È nel repository standard e può essere installato immettendo sudo apt-get install sux su una riga di comando.

Quindi, usa "sux" invece di "su" e dovrebbe funzionare come ti aspetti.

Consente di riutilizzare l'esempio dell'applicazione xclock :

sux admin
gksu xclock
    
risposta data Marty Fried 17.07.2012 - 22:54
2

PAM può prendersene cura

Questo funziona per me su Ubuntu 16.04:

metti la linea:

session optional pam_xauth.so

da qualche parte in:

/etc/pam.d/su

e / o

/etc/pam.d/sudo

e poi facendo "su -" o "sudo su -" Posso usare le app grafiche come root.

    
risposta data Gerben 23.09.2016 - 10:23
0

Invece di

su admin
gksu anyapplication ...

Ti suggerisco di provare gksu -u admin anyapplication , dove fai tutto usando il comando gksu stesso. Inoltre, tieni presente che devi inserire la password dell'utente menzionato nel comando, cioè, in questo caso devi inserire la password di admin .

    
risposta data l0n3sh4rk 17.07.2012 - 22:13
0

pkexec

Esiste un'alternativa ubiquitaria a kdesudo e gksu - pkexec che proviene dal pacchetto policykit-1 richiesto da molti pacchetti.

    
risposta data int_ua 12.08.2014 - 12:56
-1

Ecco il comando per realizzare questo.

gksu app-name

Esegui senza prima di eseguire su . È sufficiente eseguire il comando precedente da una normale sessione utente e l'applicazione verrà eseguita come root.

    
risposta data SirCharlo 17.07.2012 - 21:51
-1

Dovresti usare:

gksudo AppName

Questo fa apparire prima una richiesta di password grafica (la password dell'utente), quindi avvia l'app della GUI come root (ho appena provato, lo fa davvero). Cosa divertente: ho provato gksu AppName immediatamente dopo, e ha funzionato come beh, come probabilmente si suppone, come suggerisce il prefisso "gk", quindi non sono completamente sicuro di dove si possa trovare il problema).

    
risposta data Izzy 17.07.2012 - 22:08
-1

C'è un solo superutente e questo è root.

L'utente 1 è un amministratore e ha i diritti sudo.
L'utente 2 non è un amministratore e non ha diritti sudo.

Prova ad accedere come utente 1, quindi utilizza il comando

gksudo app-name  

(sostituzione nome-app con il nome dell'app)
Spero che questo aiuti - fammi sapere. : o)

MODIFICA: ulteriori informazioni come richiesto

Se sei solo tu al computer,
quindi usando l'utente 1 (che ha il permesso di usare sudo)
non è diverso da usare l'utente 2 (che non ha il permesso di usare sudo).
L'utente 1 ha gli stessi diritti dell'utente 2.
A meno che l'utente 1 non emetta un comando preceduto da sudo e / o fornisca la propria password per consentire alle applicazioni di essere eseguite con privilegi di root.
L'unica differenza è che l'utente 2 non può eseguire app come root.

Spero che questo ti aiuti a spiegartelo un po '. : O)

    
risposta data Fernhill Linux Project 17.07.2012 - 22:14

Leggi altre domande sui tag