Existe-t-il un gksudo indépendant du bureau?

17

Il existe différents outils pour différents bureaux qui visent à exécuter une application graphique en tant que root. gksudo, kdesudo, empower, Etc ...

Mais que se passe-t-il si j'écris un script qui pourrait être utilisé sur n'importe quel bureau Linux? Y a-t-il une xdg-sudosorte de ..? Une norme pour obtenir l'accès sudo dans un environnement de bureau?

Oli
la source

Réponses:

16

Suite à la suggestion de @Tachyons, j'ai fait beaucoup de recherches pkexecet c'est génial !

  • Il fait partie de PolicyKit , un package largement utilisé.
  • Hébergé et parrainé par freedesktop.org
  • Par défaut dans Gnome , Unity , MATE , Cinnamon , KDE , LXDE et XFCE , et éventuellement d'autres
  • Fonctionne via D-Bus, il est donc totalement indépendant du bureau, avec un protocole bien défini.
  • Dans de nombreux DE, il est utilisé dans plusieurs services comme l'écran de connexion, l'arrêt / redémarrage, la gestion des disques (udisks / automount) et ainsi de suite.

Alors oui, il répond à toutes les exigences, et je suppose que c'est la chose la plus proche qu'un "gksudo universel" puisse être.

Cela dit, pkexecc'est l'interface de ligne de commande de PolicyKit. Il existe 2 modes de fonctionnement de base:

  • Exécutez-le simplement comme vous le feriez avec sudo, et vous obtenez une belle invite graphique:

    $ pkexec rm -rf /

invite graphique pkexec

  • Ou créez un fichier d'autorisation PolicyKit pour votre application, déposez /usr/share/polkit-1/rules.d-le et cela permettra de nombreuses options de personnalisation et de sécurité, par exemple l'accès root pour certaines actions uniquement, pas besoin de mot de passe pour d'autres, accès limité à certains chemins , etc. Vous pouvez affiner vos paramètres avec une granularité incroyable.
MestreLion
la source
6

Une manière plus générale serait d'écrire un "programme d'aide". Un tel programme inviterait l'utilisateur à saisir un mot de passe; si vous êtes sûr que, par exemple, Zenity, est installé, vous pouvez l'utiliser, sinon vous devrez écrire le programme d'assistance en Python ou autre chose qui peut interagir avec l'interface graphique.

Lisez le sudomanuel des options -A("askpass") et -S(stdin).

Et rappelez-vous que lorsque vous exécutez à sudopartir de votre script, vous avez besoin de l' -Hoption (home) pour simuler gksudo.

Cette méthode fonctionne bien, mais vous devez tester soigneusement le programme d'aide pour vous assurer qu'il est exempt de bogues.

Paddy Landau
la source
1
Vous devez également gérer le passage du jeton xauth dans votre programme - ce qui n'est pas anodin.
symcbean
4

Non, il n'existe aucun moyen standard d'obtenir les privilèges root (ou tout autre utilisateur).

Si vous voulez être compatible avec autant de systèmes que possible, ne présumez rien, mais dites à l'utilisateur qu'il doit exécuter votre script en tant qu'utilisateur spécifique. Ensuite, c'est à l'utilisateur / administrateur de configurer le système afin que votre script soit exécuté de manière appropriée.

Faire des suggestions sur la façon d'utiliser les systèmes d'authentification les plus courants, comme su, sudo et ConsoleKit, serait bien.

Florian Diesch
la source
Vrai pour le début de 2009, mais heureusement maintenant polkit(anciennement PolicyKit) est suffisamment répandu pour être considéré comme une norme.
MestreLion