Wie kann ich das Herunterfahren vornehmen, ohne dass ein Administratorkennwort erforderlich ist?

49

Wenn mehr als eine Person an meinem Computer angemeldet ist, benötigt Ubuntu eine Superuser-Authentifizierung, wenn der Computer heruntergefahren wird. Wie kann ich dafür sorgen, dass jeder Benutzer den Computer herunterfahren kann, ohne nach einem Kennwort gefragt zu werden?

Jesaja
quelle
3
+1 Ich vermute, dass die Eingabe eines Kennworts zum Herunterfahren viele Benutzer auf einem Heim-PC stört.
Richard Holloway
7
Wenn Sie einen Computer herunterfahren, während andere angemeldet sind, was passiert mit den geöffneten Fenstern? Ihre offenen Dokumente? Ich denke, alles, was nicht automatisch gespeichert wird, ist einfach verloren. Dies ist eine Überlegung wert.
Torben Gundtofte-Bruun
"Ubuntu erfordert eine Superuser-Authentifizierung, wenn der Computer heruntergefahren wird", in Ubuntu 11.10 wird keine Superuser-Autorisierung angefordert, wenn das Herunterfahren über das Menü erfolgt, wird nur die Abmeldung ausgeführt und die Anmeldeseite aufgerufen , wie in der folgenden Frage dargestellt: askubuntu.com/ q / 64073/11995 , ich bin daran interessiert, Ubuntu so zu konfigurieren, dass ich nach einem Superuser-Passwort gefragt werde.
Mikl
1
Für 14.04 und später: siehe askubuntu.com/questions/454039/…
Takkat

Antworten:

27

Sie benötigen keine Problemumgehung. Ändern Sie einfach die Richtlinie, damit Sie herunterfahren können, ohne sich beim Herunterfahren als Administrator zu authentifizieren, und starten Sie den Computer neu, wenn mehrere Benutzer angemeldet sind.

Bearbeiten Sie die Datei /usr/share/polkit-1/actions/org.freedesktop.consolekit.policy mit Ihrem bevorzugten Texteditor. Sie benötigen Root-Berechtigungen.

Ändern Sie den Abschnitt zum Herunterfahren, wenn andere Benutzer angemeldet sind

  <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>

zu

  <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>

und den Abschnitt zum Neustart, wenn andere Benutzer angemeldet sind

  <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>

zu

  <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>

Auf diese Weise können Sie den PC herunterfahren und neu starten, wenn mehrere Benutzer angemeldet sind. Ob Sie dies möchten, ist eine andere Frage.

Richard Holloway
quelle
1
Hier ist ein Link mit weiteren Informationen zum Policykit: hal.freedesktop.org/docs/PolicyKit/polkit-conf.html
Richard Holloway
4
Werden Ihre Änderungen nicht gelöscht, wenn das Polkit neu installiert oder aktualisiert wird?
Ryan Thompson
3
@Ryan, laut wiki.ubuntu.com/SecurityTeam/PolicyKitPermissions/12.04 könntest du eine .pkla-Datei in / etc / polkit-1 / localauthority schreiben, aber ich bin mir nicht sicher über die Syntax :) (ein paar Infos hier im Wiki. archlinux.org/index.php/PolicyKit#Authorities )
Joril
1
Antwort unten von Flimm ist besser, wird bei einem Update nicht überschrieben askubuntu.com/a/251942/7472
Konstigt
1
Wie kann ich Regeln ohne Neustart neu laden?
Suncatcher
33

Richard Holloways Antwort ist eigentlich nicht die Art und Weise, wie PolickKit-Berechtigungen erteilt werden sollen. Die unter installierten Dateien /usr/share/polkit-1/actionsdürfen nicht verändert werden. Stattdessen sollten Sie die Berechtigungen unter ändern /etc/polkit-1/localauthority/50-local.d/.

Hier ist, wie Sie es für diese Frage tun:

Erstellen Sie eine Datei mit dem Namen /etc/polkit-1/localauthority/50-local.d/allow_all_users_to_shutdown.pklaund bearbeiten Sie sie folgendermaßen sudoedit:

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

Erstellen Sie dann eine weitere .pklaDatei im selben Verzeichnis. Verwenden Sie .pklabeispielsweise einen beliebigen Namen, mit dem Sie enden möchten allow_all_users_to_restart.pkla, und füllen Sie ihn mit den folgenden Inhalten:

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

Verweise:

Flimm
quelle
Dies stellte sich als Lösung für ein sehr seltsames Problem heraus. Am 12.04 nach der Installation von PowerBroker (zur Authentifizierung bei Active Directory) konnten Benutzer einen Computer mit der GUI nicht neu starten oder herunterfahren (weder LightDM noch Anzeigesitzung funktionierten. Es kehrte nur zum Anmeldebildschirm zurück.) Nach dem Hinzufügen dieser Berechtigungen zu Politik-Kit, alles hat funktioniert.
Korylprince
man pklocalauthority hat die Info in Ubuntu
Konstigt
4
Beachten Sie, dass sich die Namen jetzt geändert haben! Dies ist ab 14.04: / usr / share / polkit-1 / actions $ grep multiple * org.freedesktop.login1.policy: <Aktions-ID = "org.freedesktop.login1.power-off-multiple-sessions"> org.freedesktop .login1.policy: <Aktions-ID = "org.freedesktop.login1.reboot-multiple-sessions"> org.freedesktop.login1.policy: <Aktions-ID = "org.freedesktop.login1.suspend-multiple-sessions"> org .freedesktop.login1.policy: <action id = "org.freedesktop.login1.hibernate-multiple-sessions">
Konstigt
1
Für 16.04 mussten zusätzlich zu den Änderungen von @ Konstigt die Dateien für mich vorhanden sein, /var/lib/polkit-1/localauthority/50-local.dund die zusätzliche Zeile ResultAny=yeswar für beide Dateien erforderlich. Die einzige Warnmeldung, die ich jetzt erhalte, ist Failed to set wall message, ignoring: Interactive authentication required., dass das Herunterfahren und Neustarten jetzt korrekt funktioniert.
Sigalor
@ Sigalors Kommentar funktionierte für mich mit dem sysctl poweroff -ierforderlichen Zusatz org.freedesktop.login1.power-off-multiple-sessions, sodass ich eine separate Datei mit den gleichen Zeilen erstellte, außer mitAction=org.freedesktop.login1.power-off-multiple-sessions
wickedchicken
16

Es gibt einen besseren Weg. Wenn Sie dbus-send installiert haben, können Sie das System über dbus herunterfahren, ohne dass Sie zu Root-Berechtigungen eskalieren müssen .

Ich kann mich nicht an die Seite erinnern, auf der sich die Dokumentation befindet, aber ein Archlinux-Benutzer hat dies herausgefunden.

Ausschalten:

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

Neustart:

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

Aussetzen:

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

Überwintern:

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

Grüße.

ibuclaw
quelle
Wow das ist ... verrückt. Genial, aber trotzdem abgedreht ...
Jonathanismus
1
Shutdown and Reboot scheint in 11.10 nicht mehr zu funktionieren
Mikl
@ Mikl versuchen, hal zu installieren (sudo apt-get install hal)
Epeli
12

HAL ist anscheinend veraltet und in den neuesten Ubuntu-Versionen nicht mehr installiert.

Sie müssen ConsoleKit- und UPower- dbus-Dienste zum Verwalten des Energiezustands verwenden

Ausschalten:

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

Neustart:

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

Aussetzen:

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

Überwintern:

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

Vielen Dank an Arch Linux- Foren .

Dies funktioniert vorerst in Precise und Quantal, es ist jedoch nicht bekannt, wie lange der Fokus von Freedesktop offenbar von ConsoleKit auf systemd verschoben wurde. Ich weiß nicht, ob es Canonical interessiert ...

Epeli
quelle
4

Dies funktioniert am 14.04. Eine aktualisierte Variante der vorherigen, IMO, richtige Antwort von 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 

Fügen Sie dies ein:

[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
quelle
1

Es gibt keine Möglichkeit, die Aufforderung zur Eingabe eines Superuser-Kennworts beim Neustart zu umgehen, während andere Benutzer angemeldet sind, ohne ein Terminalfenster zu öffnen und den rebootBefehl als root auszuführen:

sudo reboot

Auch wenn Sie nicht für die Umgehung der Kennwortabfrage für Ihr Benutzerkonto konfiguriert sind, sudowerden Sie auch zur Eingabe Ihres Kennworts aufgefordert.

Keine Sorge, das sind GUTE Dinge. Ein Neustart sollte selten vorkommen und eine einfache Aufforderung zur Eingabe des Administratorkennworts erspart Ihnen das versehentliche Abspritzen!

Jathanismus
quelle
Sie können visudo auch bearbeiten und Ihren Benutzer bei der Eingabe von sudo nicht zur Eingabe eines Kennworts auffordern.
4.
0

Ich glaube, dies ist nur ein Problem, wenn Sie es über die Befehlszeile tun.

Wenn ja, ist hier ein Link , der bei Ihrem Problem helfen kann.

myusuf3
quelle
Nein, es gibt ein Popup-Fenster, in dem Sie nach dem Administratorkennwort gefragt werden, wenn beim Herunterfahren ein anderer Benutzer angemeldet ist. Verwenden der GUI.
Jesaja
0

Fügen Sie in die sudoers-Datei, die der Gruppe / dem Benutzer zugeordnet ist, die / der Sie für diese Aufgabe zulassen möchten, einen Stopp und / oder einen Neustart hinzu. Auf diese Weise können Sie weiterhin steuern, wer heruntergefahren werden kann, ohne dass diese Benutzer vollständigen Root-Zugriff auf den Computer haben.

http://linux.byexamples.com/archives/315/how-to-shutdown-and-reboot-without-sudo-password/

tommed
quelle
-1

Anscheinend können Sie ohne root von der GUI aus herunterfahren, da gdm als root ausgeführt wird. Gnome weist gdm an, herunterzufahren, und gdm tut es.

Sie könnten etwas Ähnliches mit einem Skript machen. Ich bin mir nicht sicher, wie praktisch Sie mit BASH sind, aber ich glaube, man könnte ein Skript schreiben, das als root ausgeführt wird und bei Erhalt eines bestimmten Signals den Befehl shutdown ausführt.

Beachten Sie, dass dies ein Sicherheitsproblem darstellen kann.

Michael Crenshaw
quelle
Ich denke, das Problem, auf das er wahrscheinlich stößt, ist die Meldung, dass andere noch angemeldet sind und ein sudo-Kennwort erforderlich ist, um das Herunterfahren / Neustarten zu ermöglichen.
David Thomas