web-dev-qa-db-fra.com

Existe-t-il un gksudo neutre sur le bureau?

Il existe divers outils pour différents ordinateurs de bureau qui ont pour objectif d’exécuter une application graphique en tant qu’utilisateur root. gksudo, kdesudo, empower, etc ...

Mais que se passe-t-il si j'écris un script qui pourrait être utilisé sur n'importe quel poste de travail Linux? Y at-il un xdg-Sudo de quelque sorte ..? Un standard pour obtenir un accès Sudo dans un environnement de bureau?

16
Oli

Suivant la suggestion de @Tachyons, j’ai fait beaucoup de recherches sur pkexec et c’est génial !

  • Il fait partie de PolicyKit , un package largement utilisé.
  • Hébergé et sponsorisé par freedesktop.org
  • Par défaut dans Gnome , Unity , MATE, Cannelle , 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 s’agit tilisé dans plusieurs services comme l’écran de connexion, l’arrêt/le redémarrage, la gestion de disque (udisks/automount), etc.

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

Cela dit, pkexecest 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 obtiendrez une invite graphique agréable:

    $ pkexec rm -rf /

pkexec GUI Prompt

  • Ou créez un fichier d’autorisation PolicyKit pour votre application, déposez-le dans /usr/share/polkit-1/rules.d et vous autoriserez de nombreuses options de personnalisation et de sécurité, par exemple un accès root pour certaines actions uniquement, aucun mot de passe nécessaire pour les autres, accès limité à certains chemins, etc. Vous pouvez affiner vos paramètres avec une granularité incroyable.
14
MestreLion

Une manière plus générale serait d'écrire un "programme d'aide". Un tel programme demanderait à l'utilisateur 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 dans Python ou autre chose pouvant interagir avec l'interface graphique.

Lisez le manuel Sudo pour les options -A ("askpass") et -S (stdin).

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

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

6
Paddy Landau

Non, il n'y a pas de moyen standard d'obtenir les privilèges root (ou ceux d'un autre utilisateur).

Si vous voulez être compatible avec autant de systèmes que possible, ne supposez rien, mais dites à l'utilisateur qu'il doit exécuter votre script en tant qu'utilisateur spécifique. Ensuite, il appartient à l'utilisateur/admin de configurer le système pour que votre script soit exécuté correctement.

Nice serait bien de suggérer comment utiliser les systèmes d’authentification les plus courants, tels que su, Sudo et ConsoleKit.

4
Florian Diesch