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


33

Ho definito 2 account utente:

  • uno con privilegio di amministratore (con sudodestra) => consente di chiamarlo adminuser.
  • un secondo senza alcun privilegio => consente di chiamarlo e configuro l'autologin su questo secondo utente . normaluser
    normaluser

Quindi quando apro una normalusersessione e voglio eseguire un'applicazione con privilegio di amministratore,
apro un terminale Ctrl+ Alt+ Te:

su adminuser
sudo anyapplication ...

Funziona bene, senza dover uscire dalla normalusersessione (non è necessario aprire una adminusersessione).


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

su adminuser
gksu anyapplication ...

ma capisco

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

Quindi la domanda è: perché hai configurato il tuo sistema in questo modo? Pensi che migliora la sicurezza? Non è :) Invece, avresti potuto configurare il login automatico sul tuo account "admin" in modo che non ti chieda la password quando esegui l'accesso - richiederà comunque una password quando esegui attività amministrative.
Sergey,

5
@Sergey Se a normaluservolte viene utilizzato da qualcuno che non dovrebbe essere in grado di eseguire comandi come root, allora fare normaluserun non amministratore migliora decisamente la sicurezza . Il pericolo di dare a qualcuno un account utente ma di non fargli conoscere la propria password va ben oltre la situazione di Boris nella seccatura e nella complessità. Se vuoi una spiegazione completa del perché ciò è problematico, ti suggerisco di pubblicare una nuova domanda, ma 3 dei motivi sono che un utente dovrebbe essere in grado di bloccare e sbloccare lo schermo, disconnettersi e riconnettersi con un diverso tipo di sessione e decodificare i ecryptfsdati.
Eliah Kagan,

2
esattamente, per me non ha senso usare il PC della mia famiglia per far conoscere a tutti la password dell'amministratore per sbloccare lo schermo. Questa normalusere l' adminuserimpostazione è la regola d'oro.
Boris,

1
Abbastanza giusto, ho appena avuto l'impressione che il PO stesse usando l' normaluseraccount per il lavoro quotidiano e l' adminaccount per eseguire attività amministrative, il che non migliora davvero nulla. Su una macchina multiutente questo ha perfettamente senso.
Sergey,

Risposte:


5

PAM può occuparsene

Questo funziona per me su Ubuntu 16.04 (modifica: funziona anche su 18.04 LTS):

mettere 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 app grafiche come root.


Confermando che questo funziona anche su Kubuntu 16.04. Grazie!
akhmed,

Grazie, funziona anche per me il 18.04! sembra essere la migliore alternativa a suxe gksuche non sono più disponibili.
Boris il

29

Terminologia

In questa risposta:

  • normaluserè un utente normale che non è un amministratore e non può eseguire comandi come rootcon sudo.
  • adminè un amministratore che può eseguire comandi come rootcon sudo. (Ovviamente, qualsiasi comando grafico dovrebbe usare un frontend grafico come gksu/gksudo , e non sudodirettamente.)
  • anyapplicationè il nome dell'applicazione grafica che normaluservuole essere eseguita come root. normaluserconosce adminla password e (presumibilmente) gli è stato detto che potrebbe usarla per questo scopo.

Il problema

La causa del problema, e la ragione la maggior parte delle altre risposte finora non fare il lavoro (con l'eccezione di Marty fritto 's risposta eccellente ), è:

  • gksupuò essere configurato per utilizzare uno sudo o su come backend. Il comportamento predefinito di gksuin Ubuntu è agire come frontend per sudo, non per su. Vale a dire che, per impostazione predefinita, gksue si gksudocomportano esattamente allo stesso modo . Vedi la manpage .
  • normalusernon è un amministratore e quindi non può eseguire comandi come rootcon sudo. sudorichiede la password dell'utente che la esegue , non la password dell'utente che desidera diventare . Non essere in grado di utilizzare la password per eseguire azioni come persone che non lo sono è ciò che significa non essere un amministratore .
  • normaluser, Purché non sia un account Guest, possono eseguire comandi come un altro utente consu , mettendo nella password di un altro utente . Ma gksufunge da frontend per sudo, non su.
  • normalusernon può eseguire direttamente alcun comando come root, perché normalusernon è possibile utilizzarlo sudo, e nessuno può diventarlo rootcon superché non c'è rootpassword .

La soluzione

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

  • normaluserdeve diventare adminper eseguire un comando grafico. Per fare ciò, normaluserdeve essere eseguito gksucon il -wflag per farlo funzionare in modalità su invece della modalità sudo predefinita e il -uflag per eseguire il comando come adminanziché root.
  • Il comando viene eseguito come admindeve invocare gksu senza il -wflag da utilizzare sudoper diventare root.

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

gksu -w -u admin gksu anyapplication

Ti verrà richiesta una password due volte :

  1. Innanzitutto, è necessario immettere adminla password, per consentire l' normaluseresecuzione di un comando come admincon il subackend.
  2. In secondo luogo, è necessario immettere adminla password per consentire l' adminesecuzione di un comando come rootper il sudoback - end.

Giusto. Immettere adminla password due volte.

Note varie:

  • Se lo desideri, puoi sostituire il secondo gksucon gksudoper renderlo meno confuso. In Ubuntu sono equivalenti. (Puoi anche sostituire il primo gksucon gksudo, ma sarebbe estremamente controintuitivo e confuso.)
  • -wè la forma abbreviata di --su-mode.
  • -Sè la forma abbreviata di --sudo-modema non deve essere utilizzata poiché la modalità sudo è l'impostazione predefinita.
  • Puoi provare prima questo con un comando abbastanza innocuo, per assicurarti che faccia quello che vuoi. (Lo farà, ma non è necessario che tu ti fidi di me su questo.) Ad esempio:
    gksu -w -u admin gksu xclock
    xclock è una bella e semplice applicazione per l'orologio.

1
PERFETTO, aggiungo subito un alias nel mio .bashrc per evitare di dimenticare questo suggerimento intelligente
Boris,

non so perché, ma ora (con Ubuntu 14.04) devo iniziare sudoper farlo funzionare. Esempio:sudo gksu -w -u thedude gksu xclock
Boris,

Cordiali saluti: kdesudosembra funzionare in modo più pulito, almeno su KUbuntu.
MDTech.us_MAN

sfortunatamente, sembra che gksunon sia più disponibile
Boris il

11

Un modo che probabilmente funzionerà è usare "sux" anziché "su" quando si passa per la prima volta all'utente amministratore. sux risolve il problema dell'esecuzione di applicazioni x da parte dell'utente falsificato. È nel repository standard e può essere installato accedendo sudo apt-get install suxda una riga di comando.

Quindi, basta usare "sux" invece di "su" e dovrebbe funzionare come previsto.

Consente di riutilizzare l'esempio dell'applicazione xclock:

sux admin
gksu xclock

3
Non esiste più la versione di suxUbuntu 14.04 64 bit;(
Boris,

2
Sembra che ci sia un'alternativa
Boris il

@Boris È uno script di shell, puoi semplicemente scaricarlo da un repository storico e inserirlo nel tuo percorso, ad esempio da packages.debian.org/source/wheezy/sux
Nessuno

2

pkexec

C'è un'alternativa onnipresente a kdesudo e gksu - pkexecche proviene dal policykit-1pacchetto richiesto da molti pacchetti.


Raccomando di espandere questa risposta per spiegare come un utente normale (che non è un amministratore e non può diventare root con sudoo polkit), che conosce la password di un amministratore (cioè di qualcuno che può diventare root con sudoo polkit), può usare pkexecper eseguire un programma grafico come root. Questa è la domanda che si pone qui. Non è chiaro per me che pkexecfarà questo, almeno senza modificare ampiamente i file di configurazione, soprattutto perché pkexecin generale non può essere utilizzato per eseguire programmi grafici arbitrari (senza profili polkit) a tutti . C'è un modo?
Eliah Kagan,

@EliahKagan Funziona su Ubuntu con la configurazione predefinita: esegui pkexec commande funziona. La configurazione si trova nel file /usr/share/polkit-1/actions/org.freedesktop.policykit.policyinstallato dal pacchetto denominato. E in realtà richiede di scrivere la password
dell'amministratore

0

Invece di

su admin
gksu qualsiasi applicazione ...

Ti consiglio di provare gksu -u admin anyapplication, dove fai tutto usando il gksucomando stesso. Si prega inoltre di rendere nota che si deve inserire la password dell'utente citato nel comando, vale a dire, in questo caso è necessario inserire amministratore 's password.


1
Su un sistema Ubuntu configurato per impostazione predefinita, se normalusereseguito gksu -u admin anyapplicationrichiede che normaluserla password diventi adminusando il sudobackend, proprio come gksu anyapplicationrichiederebbe che normaluserla password diventi rootusando il sudobackend. Entrambi falliranno per lo stesso motivo-- normalusernon ha il potere di eseguire comandi sudo.
Eliah Kagan,

-1

Ecco il comando per realizzare questo.

gksu app-name

Eseguilo senzasu prima eseguire . Hai solo bisogno di eseguire il comando sopra da una normale sessione utente e l'applicazione verrà eseguita come root.


1
non funziona - nota che sto provando da una sessione utente senza privilegi
Boris,

Qual è il messaggio di errore?
SirCharlo,

inserendo la mia normalpassword utente - ricevo il messaggio "Impossibile avviare come utente root"
Boris,

inserendo la mia superuser/adminpassword - Ricevo il messaggio "password errata, riprova"
Boris,

-1

Dovresti usare:

gksudo AppName

Questo fa apparire prima una richiesta di password grafica (la password dell'utente), quindi avvia l'app per la GUI come root (ho appena provato, lo fa davvero. Cosa divertente: ho provato gksu AppNamesubito dopo, e ha funzionato anche - così come è probabilmente dovrebbe, come suggerisce il prefisso "gk". Quindi non sono del tutto sicuro di dove possa trovarsi il tuo problema).


1
funziona nel tuo caso perché hai provato da una sessione utente amministratore con sudo giusto. Che dire di una sessione utente non amministratore senza sudo giusto?
Boris,

ho usato gksudo da una normale finestra di terminale con un utente non amministratore (il mio utente). Hai ragione comunque per il secondo tentativo, dato che avevo ancora sudo permanenti allora. Ma il problema di Boris è diverso: la sua app non può connettersi a X, che nel mio caso ha funzionato entrambe le volte. Come puoi vedere dalla domanda originale, sudoin modalità testo funziona per lui.
Izzy,

-1

C'è solo un superutente e questo è root.

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

Prova ad accedere come utente 1 quindi utilizza il comando

gksudo app-name  

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

EDIT: maggiori informazioni come richiesto

Se sei solo tu sul computer, l'
uso dell'utente 1 (che ha l'autorizzazione per usare sudo)
non è diverso dall'uso dell'utente 2 (che non ha l'autorizzazione per usare sudo).
L'utente 1 ha gli stessi diritti dell'utente 2.
A meno che l'utente 1 non emetta un comando con prefisso sudo e / o fornisca la propria password per consentire l'esecuzione delle applicazioni con i privilegi di root.
L'unica differenza è che l'utente 2 non può eseguire app come root.

Spero che ti aiuti a spiegarlo un po 'per te. : O)


grazie per il chiarimento tra super user e admin, modificherò la mia domanda. Cosa intendi con "logging as user 1" => apri la sessione con l'utente 1? bene, questo è ciò che vorrei evitare.
Boris,

aggiunte ulteriori informazioni per rispondere come richiesto: o)
Progetto Fernhill Linux

beh, mia moglie e i miei figli usano user2 con l'autologin, quindi preferisco non avere sudo proprio con quell'utente.
Boris,

Sembra una buona idea - anche io ho dei bambini; o). Hai provato ad accedere come user1 e ad eseguire il comando?
Fernhill Linux Project,

1
Sì, ma è doloroso cambiare la sessione utente. Di solito devo farlo più volte: andare nella sessione di amministrazione per definire alcune impostazioni, passare alla normale sessione utente per testare e ancora e ancora, è molto bello poterlo fare rimanendo nella sessione normale. Il più delle volte lo gestisco con su admin+ sudo ...esempio sudo vi file, ad eccezione dell'applicazione con GUI
Boris,
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.