Comment puis-je configurer dbus pour permettre à ssh-user de suspendre le serveur?

9

J'essaie de suspendre mon serveur en utilisant dbus et UPower. Le serveur exécute Ubuntu LucidLynx 64bit.

Bien que tout fonctionne bien si je suis assis directement sur la machine, cela ne fonctionnera pas via ssh. Si je me connecte au serveur via ssh et essaie de suspendre la machine en utilisant dbus et upower, cela rend

dbus.exceptions.DBusException: org.freedesktop.UPower.GeneralError: non autorisé

Quelqu'un pourrait-il me dire comment configurer dbus afin de permettre aux utilisateurs ssh de suspendre la machine?

Produnis
la source
btw: JE FAIS grep et utilise l'adresse actuelle de la session dbus ...
Produnis
2
Pouvez-vous donner des détails sur la méthode que vous utilisez? Quelle ligne de commande, outils, etc.
Kees Cook

Réponses:

12

Il existe deux méthodes de base et une solution de contournement:

Vous devez soit modifier /usr/share/polkit-1/actions/org.freedesktop.upower.policy, définir la XDG_SESSION_COOKIEvariable d'environnement sur la valeur appropriée, soit utiliser pm-suspend:

Modifier /usr/share/polkit-1/actions/org.freedesktop.upower.policy

Appliquez ce patch:

--- /usr/share/polkit-1/actions/org.freedesktop.upower.policy.orig  2011-11-16 19:06:59.274055248 +0100
+++ /usr/share/polkit-1/actions/org.freedesktop.upower.policy   2011-11-16 19:11:15.178864922 +0100
@@ -21,6 +21,7 @@
     <defaults>
       <allow_inactive>no</allow_inactive>
       <allow_active>yes</allow_active>
+      <allow_any>yes</allow_any>
     </defaults>
   </action>

(À la <action id="org.freedesktop.upower.suspend">balise / section), et ça marchera aussi ...

ou

XDG_SESSION_COOKIE

Lorsque vous utilisez le bureau, vous verrez qu'il $XDG_SESSION_COOKIEa une valeur, mais dans une session ssh, il en a une autre. Stockez XDG_SESSION_COOKIEpar exemple dans un fichier .dot ou quelque chose au démarrage du bureau et sourcez-le dans votre script qui doit le faire sur ssh.

pm-suspend

Ou vous pouvez simplement renoncer à le faire avec dbuset UPoweret simplement émettre en pm-suspendtant que root et en finir avec! :-)

Peter V. Mørch
la source
1
+1 pour "lancez pm-suspend en tant que root et finissez-en!" - disponible dans le package pm-utils.
Bjoern Dahlgren
5

Les fichiers sous /usr/share/polkit-1/actionsne sont pas destinés à être modifiés.

Créez un fichier nommé /etc/polkit-1/localauthority/50-local.d/allow_all_ssh-users_to_upower.pkla

[Allow all ssh-users to upower]
Identity=unix-group:ssh-users
Action=org.freedesktop.upower.policy
ResultInactive=no
ResultActive=yes
AllowAny=yes
user1435828
la source
Il y a une faute de frappe dans la réponse - la dernière ligne devrait dire ResultAnynon AllowAny.
Emil Styrke