web-dev-qa-db-fra.com

Comment puis-je exécuter une application avec une interface graphique en tant qu'administrateur à partir d'une session utilisateur non-admin?

J'ai défini 2 comptes d'utilisateurs:

  • une avec privilège admin (avec Sudo right) => permet de l'appeler adminuser.
  • un 2e sans aucun privilège => permet de l'appeler normaluser
    et je configure la connexion automatique sur ce deuxième utilisateur normaluser.

Donc, quand j'ouvre une session normaluser et que je veux exécuter une application avec le privilège admin,
J'ouvre un terminal Ctrl+Alt+T et:

su adminuser
Sudo anyapplication ...

Cela fonctionne correctement, sans avoir à quitter la session normaluser (il n'est pas nécessaire d'ouvrir une adminuser session).


Mais que dois-je faire si l'application doit fonctionner avec une interface utilisateur graphique?
Je pensais à ce sujet:

su adminuser
gksu anyapplication ...

mais je reçois

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

PAM peut s'en occuper

Cela fonctionne pour moi sur Ubuntu 16.04 (edit: cela fonctionne aussi sur 18.04 LTS):

mettre la ligne:

session optional pam_xauth.so

quelque part dans:

/etc/pam.d/su

et/ou

/etc/pam.d/Sudo

puis en faisant "su -" ou "Sudo su -", je peux utiliser des applications graphiques en tant que root.

4
Gerben

Terminologie

Dans cette réponse:

  • normaluser est un utilisateur normal qui n'est pas administrateur et ne peut pas exécuter de commandes en tant que root avec Sudo.
  • admin est un administrateur qui peut exécuter des commandes en tant que root avec Sudo. (Bien sûr, toutes les commandes graphiques devraient utiliser une interface graphique telle que gksu/gksudo , et non pas directement Sudo.)
  • anyapplication est le nom de l'application graphique normaluser == veut s'exécuter en tant que root. normaluser sait admin le mot de passe de == et a (probablement) été informé qu'il pourrait l'utiliser à cette fin.

Le problème

La cause de votre problème, et la raison pour laquelle la plupart des autres réponses n’ont pas fonctionné jusqu’à présent (à l’exception de Marty Fried 's excellente réponse ), est la suivante:

  • gksu peut être configuré pour utiliser soit Sudo, soit su comme serveur principal. Le comportement par défaut de gksu dans Ubuntu consiste à agir comme interface pour Sudo, et non pour su. Autrement dit, par défaut, gksu et gksudo se comportent exactement de la même manière . Voir la page de manuel .
  • normaluser n'est pas un administrateur et ne peut donc pas exécuter de commandes en tant que root avec Sudo. Sudo demande le mot de passe de l'utilisateur qui l'exécute , pas le mot de passe de l'utilisateur qu'il souhaite devenir . Ne pas pouvoir utiliser votre mot de passe pour effectuer des actions en tant que personnes qui ne vous appartiennent pas est ce que signifie ne pas être administrateur .
  • normaluser, à condition qu'il ne s'agisse pas d'un compte Invité, peut exécuter les commandes en tant qu'utilisateur différent avec su, en mettant dans le mot de passe d'un autre utilisateur . Mais gksu agit comme une interface pour Sudo, pas su.
  • normaluser ne peut pas directement exécuter une commande en tant que root, car normaluser ne peut pas utiliser Sudo, et personne ne peut devenir root avec su car ) il n'y a pas de mot de passe root .

La solution

La solution nécessite l'écriture d'une commande qui effectue deux étapes d'authentification:

  • normaluser doit devenir admin pour exécuter une commande graphique. Pour ce faire, normaluser doit exécuter gksu avec l'indicateur -w pour qu'il soit exécuté su-mode au lieu de la valeur par défaut Sudo-mode , et l'indicateur -u qui permet d'exécuter la commande sous la forme admin au lieu de root.
  • La commande exécutée sous la forme admin doit appeler gksu sans l'indicateur -w pour que Sudo devienne root.

Voici la commande (oui, je l’ai testée ; -) ):

gksu -w -u admin gksu anyapplication

Un mot de passe vous sera demandé deux fois :

  1. Tout d’abord, vous devez entrer le mot de passe admin, pour permettre à normaluser exécuter une commande sous la forme admin avec le backend su.
  2. Deuxièmement, vous devez entrer le mot de passe admin, pour laisser admin exécuter une commande sous la forme root avec le backend Sudo.

C'est vrai. Vous entrez le mot de passe admin deux fois.

Notes diverses:

  • Si vous le souhaitez, vous pouvez remplacer le deuxième gksu par gksudo pour le rendre moins déroutant. Dans Ubuntu, ils sont équivalents. (Vous pouvez également remplacer le premier gksu par gksudo, mais cela serait extrêmement contre-intuitif et déroutant.)
  • -w est la forme abrégée de --su-mode.
  • -S est la forme abrégée de --Sudo-mode mais ni l'un ni l'autre ne doit être utilisé car Sudo-mode est la valeur par défaut.
  • Vous voudrez peut-être d'abord tester cela avec une commande plutôt inoffensive, pour vous assurer qu'il fait ce que vous voulez. (Ce sera le cas, mais vous n’avez pas besoin de me faire confiance à ce sujet.) Par exemple:
    gksu -w -u admin gksu xclock
    xclock est une application simple et agréable de fenêtre d’horloge.
28
Eliah Kagan

Une façon qui fonctionnera probablement est d'utiliser "sux" plutôt que "su" lorsque vous basculez pour la première fois sur l'utilisateur admin. sux corrige le problème de l'exécution de x applications à partir de l'utilisateur usurpé. Il se trouve dans le référentiel standard et peut être installé en entrant Sudo apt-get install sux sur une ligne de commande.

Ensuite, utilisez simplement "sux" au lieu de "su" et cela devrait fonctionner comme vous le souhaitez.

Permet de réutiliser l'exemple de l'application xclock:

sux admin
gksu xclock
11
Marty Fried

pkexec

Il existe une alternative omniprésente à kdesudo et gksu - pkexec qui provient du package policykit-1 qui est requis par de nombreux packages.

2
int_ua

Au lieu de

su admin 
 gksu n'importe quelle application ...

Je vous suggère d'essayer gksu -u admin anyapplication, où vous faites tout en utilisant la commande gksu. Veuillez également noter que vous devez entrer le mot de passe de l'utilisateur mentionné dans la commande, c'est-à-dire que, dans ce cas, vous devez entrer le mot de passe de admin.

0
l0n3sh4rk