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

33

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

  • une avec les privilèges d'administrateur (avec le sudodroit) => permet de l'appeler adminuser.
  • un 2e sans aucun privilège => permet de l'appeler et je configure la connexion automatique sur ce 2e utilisateur . normaluser
    normaluser

Ainsi, lorsque j'ouvre une normalusersession et que je veux exécuter une application avec le privilège administrateur,
j'ouvre un terminal Ctrl+ Alt+ Tet:

su adminuser
sudo anyapplication ...

Cela fonctionne bien, sans avoir à quitter la normalusersession (pas besoin d'ouvrir une adminusersession).


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
Boris
la source
La question est donc: pourquoi avez-vous configuré votre système de cette façon? Pensez-vous que cela améliore la sécurité? Ce n'est pas :) Au lieu de cela, vous auriez pu configurer la connexion automatique sur votre compte "admin" afin qu'il ne vous demande pas de mot de passe lorsque vous vous connectez; il vous faudra tout de même un mot de passe pour effectuer des tâches administratives.
Sergey
5
@Sergey Si normaluserest parfois utilisé par quelqu'un qui ne devrait pas être capable d'exécuter des commandes avec root, faire en sorte normaluserqu'un non-administrateur améliore définitivement la sécurité . Les dangers de donner à quelqu'un un compte d'utilisateur sans lui faire savoir son propre mot de passe vont bien au-delà de la situation de Boris en termes de complexité et de tracas. Si vous souhaitez une explication complète de la cause de ce problème, je suggère de poser une nouvelle question, mais 3 des raisons en sont qu'un utilisateur doit pouvoir verrouiller et déverrouiller l'écran, se déconnecter et se reconnecter avec un type de session différent, et déchiffrer les ecryptfsdonnées.
Eliah Kagan
2
pour moi, cela n’a aucun sens d’utiliser le PC de ma famille en informant tout le monde du mot de passe administrateur pour déverrouiller l’écran. Ceci normaluseret le adminuserréglage est la règle d'or.
Boris
1
Très bien, je viens d'avoir l'impression que le PO utilisait le normalusercompte pour le travail quotidien et le admincompte pour l'exécution de tâches administratives, ce qui n'améliorait vraiment rien. Sur une machine multi-utilisateur, cela est tout à fait logique.
Sergey

Réponses:

5

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.

Gerben
la source
Confirmer que cela fonctionne également sur Kubuntu 16.04. Merci!
akhmed
Merci, ça marche aussi pour moi le 18.04! il semble être la meilleure alternative à suxet gksuqui ne sont plus disponibles.
Boris le
29

Terminologie

Dans cette réponse:

  • normaluserest un utilisateur normal qui n'est pas administrateur et ne peut pas exécuter les commandes rootavec sudo.
  • adminest un administrateur qui peut exécuter des commandes comme rootavec sudo. (Bien entendu, toute commande graphique doit utiliser une interface graphique telle que gksu/gksudo , et non sudodirectement.)
  • anyapplicationest le nom de l'application graphique qui normaluserveut s'exécuter en tant que root. normalusersait adminle mot de passe 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 la plupart des autres réponses à ce jour ne pas le travail (à l'exception de Marty Fried de excellente réponse ), est:

  • gksupeut être configuré pour utiliser l'une sudo ou su comme arrière - plan. Le comportement par défaut de gksudans Ubuntu est d’agir comme une interface pour sudo, pas pour su. C'est à dire que, par défaut, gksuet gksudose comportent exactement les mêmes . Voir la page de manuel .
  • normalusern'est pas un administrateur et ne peut donc pas exécuter de commandes comme rootavec sudo. sudodemande 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 être en mesure d'utiliser votre mot de passe pour effectuer des actions en tant que personnes qui ne le sont pas, cela signifie ne pas être administrateur .
  • normaluser, À condition qu'il n'est pas un compte invité, peut exécuter des commandes comme un autre utilisateur avecsu , mettre dans le mot de passe d' un autre utilisateur . Mais gksuagit comme une interface pour sudo, pas su.
  • normaluserne peut exécuter directement aucune commande en tant que root, car normaluserne peut pas utiliser sudo, et personne ne peut devenir rootavec sucar il n'y a pas de rootmot de passe .

La solution

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

  • normaluserdoit devenir adminpour exécuter une commande graphique. Pour ce faire, vous normaluserdevez l'exécuter gksuavec l' -windicateur afin qu'il s'exécute en mode suo au lieu du mode sudo par défaut , et l' -uindicateur d'exécution de la commande au adminlieu de root.
  • La piste de commande comme admininvoke doit gksu sans le -wdrapeau à utiliser sudopour devenir root.

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

gksu -w -u admin gksu anyapplication

On vous demandera un mot de passe deux fois :

  1. Tout d'abord, vous devez entrer adminle mot de passe, pour laisser normaluserexécuter une commande comme adminavec le subackend.
  2. Deuxièmement, vous devez entrer adminle mot de passe, pour laisser adminexécuter une commande comme rootavec le sudobackend.

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

Notes diverses:

  • Si vous le souhaitez, vous pouvez remplacer le second gksupar gksudopour le rendre moins déroutant. Dans Ubuntu, ils sont équivalents. (Vous pouvez également remplacer le premier gksupar gksudo, mais ce serait extrêmement contre-intuitif et déroutant.)
  • -west la forme abrégée de --su-mode.
  • -Sest la forme abrégée de --sudo-modemais ne doit pas être utilisée 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 belle application simple de fenêtre d'horloge.
Eliah Kagan
la source
1
PARFAIT, j'ajoute immédiatement un alias dans mon .bashrc pour ne pas oublier cette astuce intelligente
Boris
Je ne sais pas pourquoi, mais maintenant (avec Ubuntu 14.04), je dois commencer par sudole faire fonctionner. Exemple:sudo gksu -w -u thedude gksu xclock
Boris
FYI: kdesudocherche à travailler plus propre, au moins sur KUbuntu.
MDTech.us_MAN
malheureusement, il semble que ce gksun’est plus disponible
Boris
11

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 d'applications x à partir de l'utilisateur usurpé. Il est dans le référentiel standard et peut être installé en entrant sudo apt-get install suxen 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
Marty Fried
la source
3
Il n'y a plus de version de suxUbuntu 14.04 64bits;(
Boris
2
On dirait qu'il y a une alternative
Boris
@Boris C'est un script shell, vous pouvez simplement le télécharger depuis un dépôt historique et le mettre dans votre chemin, par exemple depuis packages.debian.org/source/wheezy/sux
Personne, le
2

pkexec

Il existe une alternative omniprésente à kdesudo et à gksu - pkexecqui provient d'un policykit-1paquet requis par de nombreux paquets.

int_ua
la source
Je recommande d’élargir cette réponse pour expliquer comment un utilisateur habituel (qui n’est pas administrateur et ne peut pas devenir root avec sudopolkit), qui connaît le mot de passe d’un administrateur (c’est-à-dire de quelqu'un qui peut devenir root avec sudopolkit), peut utiliser pkexecpour lancez un programme graphique en tant que root. C'est ce que la question ici pose. Il est pas clair pour moi que le pkexecfera, au moins sans modifier largement les fichiers de configuration, d' autant plus que pkexecne peut généralement pas être utilisé pour exécuter des programmes graphiques arbitraires (sans profils de polkit) du tout . Y a-t-il un moyen?
Eliah Kagan
@EliahKagan Cela fonctionne sur Ubuntu avec la configuration par défaut - il suffit de lancer pkexec commandet cela fonctionne. La configuration est dans le fichier /usr/share/polkit-1/actions/org.freedesktop.policykit.policyqui est installé par le paquet nommé. Et il vous oblige en fait à écrire le mot de passe administrateur une seule fois
pqnet
0

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 gksucommande elle-même. 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 l' administrateur .

l0n3sh4rk
la source
1
Sur un système Ubuntu configuré par défaut, s’il est normaluserexécuté , le système gksu -u admin anyapplicationinvitera normaluserle mot de passe à adminutiliser le sudobackend, tout comme le gksu anyapplicationferait normaluserle mot de passe à rootutiliser le sudobackend. Les deux vont échouer pour la même raison - normalusern'a pas le pouvoir d'exécuter des commandes avec sudo.
Eliah Kagan
-1

Voici la commande pour accomplir ceci.

gksu app-name

Exécutez-le sans courir en supremier. Vous devez uniquement exécuter la commande ci-dessus à partir d'une session utilisateur normale et l'application s'exécutera en tant que root.

SirCharlo
la source
1
ça ne marche pas - notez que je suis en train d’essayer à partir d’une session utilisateur sans privilège
Boris
Quel est le message d'erreur?
SirCharlo
entrer mon normalmot de passe utilisateur - Je reçois le message "Impossible de lancer en tant qu'utilisateur root"
Boris
saisie de mon superuser/adminmot de passe - Je reçois le message "mot de passe incorrect, essayez à nouveau"
Boris
-1

Tu devrais utiliser:

gksudo AppName

Cela appelle d'abord une requête graphique de mot de passe (le mot de passe de votre utilisateur), puis lance l'application GUI en tant qu'utilisateur root (je viens d'essayer, c'est vraiment le cas. Drôle: j'ai gksu AppNameimmédiatement essayé par la suite, et cela a fonctionné aussi bien tel qu'il est comme le suggère probablement le préfixe "gk" (je ne suis donc pas tout à fait sûr de la localisation de votre problème).

Izzy
la source
1
cela fonctionne dans votre cas parce que vous avez essayé depuis une session utilisateur admin avec sudo right. Qu'en est-il d'une session utilisateur non administrateur sans droit sudo?
Boris
J'ai utilisé gksudo à partir d'une fenêtre de terminal normale avec un utilisateur non administrateur (mon propre utilisateur). Vous avez cependant raison pour le deuxième essai, car il me restait alors des permanentes sudo. Mais le problème de Boris est différent: son application ne peut pas se connecter à X, ce qui dans mon cas a fonctionné les deux fois. Comme vous pouvez le constater à partir de la question initiale, le sudomode texte fonctionne pour lui.
Izzy
-1

Il n'y a qu'un seul super utilisateur et c'est root.

L'utilisateur 1 est un administrateur et a des droits sudo.
L'utilisateur 2 n'est pas un administrateur et n'a pas de droits sudo.

Essayez de vous connecter en tant qu'utilisateur 1, puis utilisez la commande

gksudo app-name  

(en remplaçant nom-app par le nom de l'application)
J'espère que cela aide - faites-le-moi savoir. : o)

EDIT: Plus d'infos à la demande

S'il ne s'agit que de vous sur l'ordinateur, l'
utilisation de l'utilisateur 1 (qui est autorisé à utiliser sudo)
n'est pas différente de celle de l'utilisateur 2 (qui n'a pas l'autorisation d'utiliser sudo).
L'utilisateur 1 a les mêmes droits que l'utilisateur 2.
À moins que l'utilisateur 1 n'émette une commande précédée de sudo et / ou fournisse son mot de passe pour permettre aux applications de s'exécuter avec des privilèges root.
La seule différence est que l'utilisateur 2 ne peut pas exécuter d'applications en tant que root.

J'espère que cela aide à l'expliquer un peu pour vous. : o)

Fernhill Linux Project
la source
merci pour la clarification entre super utilisateur et admin, je vais modifier ma question. Qu'entendez-vous par "se connecter en tant qu'utilisateur 1" => ouvrir la session avec l'utilisateur 1? Eh bien c'est ce que je voudrais éviter.
Boris
ajout de plus d'informations pour répondre à la demande: o)
Fernhill Linux Project
Ma femme et mes enfants utilisent bien user2 avec la connexion automatique. C’est pourquoi j’aime bien ne pas avoir le droit d’utiliser sudo avec cet utilisateur.
Boris
Cela semble être une bonne idée - j'ai aussi des enfants; o). Avez-vous déjà essayé de vous connecter en tant qu'utilisateur1 et d'exécuter la commande?
Fernhill Linux Project
1
Oui, je peux mais il est difficile de changer de session utilisateur. Je dois généralement le faire plusieurs fois: passez à la session administrateur pour définir certains paramètres, passez en session utilisateur normale à tester, et encore et encore, il est très agréable de pouvoir le faire en restant sur la session normale. La plupart du temps, je le traite avec su admin+ sudo ...exemple sudo vi file, sauf pour les applications avec interface graphique
Boris