Comment puis-je faire en sorte que l'arrêt ne nécessite pas de mot de passe administrateur?

49

Si plusieurs personnes sont connectées à mon ordinateur, Ubuntu requiert l’authentification du super-utilisateur lors de l’arrêt de l’ordinateur. Comment puis-je faire en sorte que tout utilisateur puisse éteindre l'ordinateur sans qu'un mot de passe ne lui soit demandé?

Isaïe
la source
3
+1 Je soupçonne que la saisie d'un mot de passe pour arrêter gêne de nombreux utilisateurs sur un PC à domicile.
Richard Holloway
7
Si vous éteignez un ordinateur alors que d'autres sont connectés, qu'advient-il de leurs fenêtres ouvertes? Leurs documents ouverts? Je pense que tout ce qui n'est pas sauvegardé automatiquement est tout simplement perdu. Cela mérite d'être considéré.
Torben Gundtofte-Bruun
"Ubuntu requiert l’authentification du super-utilisateur lors de l’arrêt de l’ordinateur", dans Ubuntu 11.10, il ne demande pas d’autorisation de superutilisateur; lorsqu’il est arrêté à l’aide du menu, il ne fonctionne que comme une déconnexion et conduit à la page de connexion, comme dans cette question: askubuntu.com/ q / 64073/11995 , je suis intéressé par comment configurer Ubuntu pour qu'il me demande un mot de passe de superutilisateur?
Mikl
1
Pour les versions
Takkat le

Réponses:

27

Vous n'avez pas besoin d'une solution de contournement, il vous suffit de modifier la stratégie pour vous permettre de vous arrêter sans vous authentifier en tant qu'administrateur pour arrêter et redémarrer lorsque plusieurs utilisateurs sont connectés.

Editez le fichier /usr/share/polkit-1/actions/org.freedesktop.consolekit.policy à l'aide de votre éditeur de texte préféré. Vous aurez besoin d'autorisations root.

Modifier la section relative à l’arrêt lorsque d’autres personnes sont connectées depuis

  <action id="org.freedesktop.consolekit.system.stop-multiple-users">
    <description>Stop the system when multiple users are logged in</description>
    <message>System policy prevents stopping the system when other users are logged in</message>
    <defaults>
      <allow_inactive>no</allow_inactive>
      <allow_active>auth_admin_keep</allow_active>
    </defaults>
  </action>

à

  <action id="org.freedesktop.consolekit.system.stop-multiple-users">
    <description>Stop the system when multiple users are logged in</description>
    <message>System policy prevents stopping the system when other users are logged in</message>
    <defaults>
      <allow_inactive>no</allow_inactive>
      <allow_active>yes</allow_active>
    </defaults>
  </action>

et la section relative au redémarrage lorsque d’autres utilisateurs sont connectés depuis

  <action id="org.freedesktop.consolekit.system.restart-multiple-users">
    <description>Restart the system when multiple users are logged in</description>
    <message>System policy prevents restarting the system when other users are logged in</message>
    <defaults>
      <allow_inactive>no</allow_inactive>
      <allow_active>auth_admin_keep</allow_active>
    </defaults>
  </action>

à

  <action id="org.freedesktop.consolekit.system.restart-multiple-users">
    <description>Restart the system when multiple users are logged in</description>
    <message>System policy prevents restarting the system when other users are logged in</message>
    <defaults>
      <allow_inactive>no</allow_inactive>
      <allow_active>yes</allow_active>
    </defaults>
  </action>

Et cela vous permettra d’arrêter et de redémarrer le PC lorsque plusieurs utilisateurs sont connectés. Si vous souhaitez le faire, la question est différente.

Richard Holloway
la source
1
Voici un lien avec plus sur policykit: hal.freedesktop.org/docs/PolicyKit/polkit-conf.html
Richard Holloway
4
Vos modifications ne seront-elles pas effacées chaque fois que polkit sera réinstallé ou mis à niveau?
Ryan Thompson
3
@Ryan, selon wiki.ubuntu.com/SecurityTeam/PolicyKitPermissions/12.04, vous pourriez écrire un fichier .pkla dans / etc / polkit-1 / localauthority, mais je ne suis pas sûr de sa syntaxe :) (quelques informations ici, wiki. archlinux.org/index.php/PolicyKit#Authorities )
Joril
1
La réponse ci-dessous de Flimm est meilleure, ne sera pas écrasée
Date prévue:
1
Comment recharger des règles sans redémarrer?
Suncatcher
33

La réponse de Richard Holloway n’est pas vraiment la manière dont les autorisations PolickKit sont censées être accordées. Les fichiers installés sous /usr/share/polkit-1/actionsne sont pas destinés à être modifiés. Au lieu de cela, vous devez modifier les autorités sous /etc/polkit-1/localauthority/50-local.d/.

Voici comment vous le faites pour cette question:

Créez un fichier nommé /etc/polkit-1/localauthority/50-local.d/allow_all_users_to_shutdown.pklaet éditez-le sudoeditcomme suit:

[Allow all users to shutdown]
Identity=unix-user:*
Action=org.freedesktop.consolekit.system.stop-multiple-users
ResultInactive=no
ResultActive=yes

Créez ensuite un autre .pklafichier dans le même répertoire. Utilisez n'importe quel nom qui se termine .pkla, par exemple allow_all_users_to_restart.pkla, et remplissez-le avec le contenu suivant:

[Allow all users to restart]
Identity=unix-user:*
Action=org.freedesktop.consolekit.system.restart-multiple-users
ResultInactive=no
ResultActive=yes

Références:

Flimm
la source
Cela s'est avéré être la solution à un problème très étrange. Le 12.04 après l’installation de PowerBroker (pour s’authentifier auprès d’Active Directory), les utilisateurs ne pouvaient plus redémarrer ou éteindre un ordinateur avec l’interface utilisateur graphique (ni lightdm, ni indicateur-session ne fonctionnait. Il reviendrait simplement à l’écran de connexion. policykit, tout a fonctionné.
korylprince
l'homme pklocalauthority a l'info dans Ubuntu
Actualités 09
4
Notez que les noms ont changé maintenant! Ceci est à partir de 14.04: / usr / share / polkit-1 / actions $ grep multiple * org.freedesktop.login1.policy: <action id = "org.freedesktop.login1.Power-multiple-sessions"> org.freedesktop .login1.policy: <action id = "org.freedesktop.login1.reboot-plusieurs-sessions"> org.freedesktop.login1.policy: <action id = "org.freedesktop.login1.suspend-plusieurs-sessions"> org .freedesktop.login1.policy: <action id = "org.freedesktop.login1.hibernate-multiple-sessions">
Date limite:
1
Pour 16.04, en plus des modifications apportées par @ Konstigt, les fichiers devaient pour moi être insérés /var/lib/polkit-1/localauthority/50-local.det la ligne supplémentaire ResultAny=yesétait nécessaire pour les deux fichiers. Le seul message d'avertissement que je reçois maintenant est Failed to set wall message, ignoring: Interactive authentication required., mais l'arrêt et le redémarrage fonctionnent correctement maintenant.
Sigalor
Le commentaire de @ sigalor a fonctionné pour moi, avec l'ajout sysctl poweroff -inécessaire org.freedesktop.login1.power-off-multiple-sessions, j'ai donc créé un fichier séparé avec les mêmes lignes, sauf avecAction=org.freedesktop.login1.power-off-multiple-sessions
wickedchicken le
16

Il y a un meilleur moyen. Si vous avez installé dbus-send, vous pouvez vous arrêter via dbus sans avoir à passer aux privilèges root .

Je ne me souviens pas de la page où se trouve la documentation, mais un utilisateur d’Archlinux l’a compris.

Fermer:

dbus-send --system --print-reply --dest=org.freedesktop.Hal \
          /org/freedesktop/Hal/devices/computer \
          org.freedesktop.Hal.Device.SystemPowerManagement.Shutdown

Redémarrer:

dbus-send --system --print-reply --dest=org.freedesktop.Hal \
          /org/freedesktop/Hal/devices/computer \
          org.freedesktop.Hal.Device.SystemPowerManagement.Reboot

Suspendre:

dbus-send --system --print-reply --dest=org.freedesktop.Hal \
          /org/freedesktop/Hal/devices/computer \
          org.freedesktop.Hal.Device.SystemPowerManagement.Suspend int32:1

Hiberner:

dbus-send --system --print-reply --dest=org.freedesktop.Hal \
          /org/freedesktop/Hal/devices/computer \
          org.freedesktop.Hal.Device.SystemPowerManagement.Hibernate

Cordialement.

ibuclaw
la source
Wow c'est ... hacky. Génial, pourtant hacky ...
jathanism
1
Shutdown and Reboot semble ne plus fonctionner dans 11.10
Mikl
@Mikl essayez d'installer hal (sudo apt-get install hal)
Epeli
12

HAL semble être maintenant depcrecated et non installé dans les dernières versions d'Ubuntu.

Vous devez utiliser les services ConsoleKit et UPower dbus pour gérer l'état d'alimentation.

Fermer:

dbus-send --system --print-reply --dest="org.freedesktop.ConsoleKit" /org/freedesktop/ConsoleKit/Manager org.freedesktop.ConsoleKit.Manager.Stop

Redémarrer:

dbus-send --system --print-reply --dest="org.freedesktop.ConsoleKit" /org/freedesktop/ConsoleKit/Manager org.freedesktop.ConsoleKit.Manager.Restart

Suspendre:

dbus-send --system --print-reply --dest="org.freedesktop.UPower" /org/freedesktop/UPower org.freedesktop.UPower.Suspend

Hiberner:

dbus-send --system --print-reply --dest="org.freedesktop.UPower" /org/freedesktop/UPower org.freedesktop.UPower.Hibernate

Merci aux forums Arch Linux .

Cela fonctionne pour le moment dans Precise et Quantal, mais je ne sais pas depuis combien de temps le focus de Freedesktop semble avoir été déplacé de ConsoleKit vers systemd. Je ne sais pas si Canonical se soucie ...

Epeli
la source
4

Cela fonctionne le 14.04. Une variation mise à jour de la précédente, IMO, réponse correcte par Flimm .

sudo mkdir -p /etc/polkit-1/localauthority/50-local.d
sudoedit /etc/polkit-1/localauthority/50-local.d/allow_all_users_to_shutdown_reboot_suspend.pkla 

Collez ceci à l'intérieur:

[Allow all users to shutdown]
Identity=unix-user:*
Action=org.freedesktop.login1.power-off-multiple-sessions
ResultActive=yes

[Allow all users to reboot]
Identity=unix-user:*
Action=org.freedesktop.login1.reboot-multiple-sessions
ResultActive=yes

[Allow all users to suspend]
Identity=unix-user:*
Action=org.freedesktop.login1.suspend-multiple-sessions
ResultActive=yes

[Allow all users to ignore inhibit of shutdown]
Identity=unix-user:*
Action=org.freedesktop.login1.power-off-ignore-inhibit
ResultActive=yes

[Allow all users to ignore inhibit of reboot]
Identity=unix-user:*
Action=org.freedesktop.login1.reboot-ignore-inhibit
ResultActive=yes

[Allow all users to ignore inhibit of suspend]
Identity=unix-user:*
Action=org.freedesktop.login1.suspend-ignore-inhibit
ResultActive=yes
Konstigt
la source
1

Il n'y a aucun moyen de contourner l'invite de mot de passe de superutilisateur lors du redémarrage alors que d'autres utilisateurs sont connectés juste avant d'ouvrir une fenêtre de terminal et d'émettre la rebootcommande en tant que root:

sudo reboot

Même quand même, s'il n'est pas configuré pour ignorer l'invite de mot de passe pour votre compte d'utilisateur, vous sudoserez également invité à entrer votre mot de passe.

Ne vous inquiétez pas, ce sont de bonnes choses. Le redémarrage doit être rare et une simple invite de mot de passe d'administrateur enregistre accidentellement vous-même!

jathanisme
la source
Vous pouvez également modifier visudo et demander à votre utilisateur de ne pas demander de mot de passe lors de la saisie de sudo.
Da1T
0

Je crois que ce n'est un problème que lorsque vous le faites via la ligne de commande.

Si tel est le cas, voici un lien qui peut vous aider à résoudre votre problème.

myusuf3
la source
Non, une fenêtre contextuelle vous demande le mot de passe de l'administrateur si un autre utilisateur est connecté lorsque vous le fermez. Utiliser le GUI.
Isaïe
-1

Apparemment, vous pouvez vous arrêter sans root depuis l'interface graphique, car gdm s'exécute en tant que root. Gnome demande à gdm de fermer et gdm le fait.

Vous pouvez faire quelque chose de similaire avec un script. Je ne sais pas à quel point vous êtes utile avec BASH, mais je crois que l’on pourrait écrire un script qui s’exécute en tant que root et, lorsqu’il reçoit un certain signal, exécute la commande shutdown.

Gardez à l'esprit que cela peut poser un problème de sécurité.

Michael Crenshaw
la source
Je pense que le problème qu'il rencontrera probablement est l'invite qui indique que d'autres personnes sont toujours connectées et qui nécessitent un mot de passe sudo pour activer l'arrêt / le redémarrage.
David Thomas