Wie kann ich verhindern, dass Benutzer ohne Rootberechtigung Herunterfahren oder Neustarts ausführen?

5548
thomasrutter

Angenommen, Sie haben ein System mit mehreren Sitzen für die Verwendung in einer Schule oder Bibliothek eingerichtet, sodass GDM mehrere X-Sitzungen gleichzeitig mit verschiedenen Benutzern / Tastaturen / Monitoren ausführen kann.

In Debian / Ubuntu in Gnome müssen Sie nicht standardmäßig root sein, um herunterzufahren oder neu zu starten. Dies bedeutet jedoch, dass jeder Benutzer "Neustart" oder "Herunterfahren" wählen und die anderen drei Benutzer starten kann.

Sie haben den physischen Zugriff auf den Server blockiert, sodass der Benutzer nicht einfach die Ein- oder Zurück-Taste drücken muss.

Was ist der richtige Weg, um die Funktionen "Herunterfahren" und "Neustart" zu deaktivieren, die normalen Benutzern über GDM / Gnome / den von Ihnen verwendeten Fenstermanager zur Verfügung gestellt werden?

7
Was ist, wenn sie den Stecker ziehen? wizlog vor 12 Jahren 1
@wizlog, siehe "Sie haben den physischen Zugriff auf den Server blockiert". Dies gilt auch für den Netzstecker. thomasrutter vor 12 Jahren 2

2 Antworten auf die Frage

4
rofrol
  • pklocalautority ist veraltet
  • Sie benötigen systemd mit logind und polkit.

Mögliche Aktionen

pkaction # or /usr/share/polkit-1/actions/ 

Sie sollten sich anschauen /usr/share/polkit-1/actions/org.freedesktop.login1.policy

Regel hinzufügen

Beginnen Sie zuerst mit der Überwachung der Systemmeldungen, damit wir sehen können, ob unsere neue Regel funktioniert:

journalctl -f 

Dann erstellen Sie eine Datei /etc/polkit-1/rules.d/60-noreboot_norestart.rules(in Javascript).

In dieser Datei fügen wir Logik für Aktionen zu überprüfen und erlauben usersin powerGruppe oder erfordern suGenehmigung:

polkit.addRule(function(action, subject) { if (action.id == "org.freedesktop.login1.reboot" || action.id == "org.freedesktop.login1.reboot-multiple-sessions" || action.id == "org.freedesktop.login1.power-off" || action.id == "org.freedesktop.login1.power-off-multiple-sessions") { if (subject.isInGroup("power")) { return polkit.Result.YES; } else { return polkit.Result.AUTH_ADMIN; } } }); 

Die Regel sollte geladen sein und funktionieren. Referenzen unten.

  1. https://lists.fedoraproject.org/pipermail/users/2013-September/440457.html
  2. https://wiki.archlinux.org/index.php/Polkit#Authorization_rules
  3. http://www.freedesktop.org/software/polkit/docs/latest/polkit.8.html
  4. https://bbs.archlinux.org/viewtopic.php?pid=1335204#p1335204
Sind Sie sicher, dass "polkit.Result.NO" zurückgegeben werden muss? Ich hätte gedacht, es wäre `polkit.Result.YES`, um Benutzern in der Gruppe" Power "zu erlauben ffledgling vor 9 Jahren 2
@ flackern Das ist richtig. Ich habe die Antwort bearbeitet, um dies zu berücksichtigen und eine fehlende geschweifte Klammer hinzuzufügen. Legooolas vor 9 Jahren 0
Es ist auch möglich, "NO" anstelle von "AUTH_ADMIN" zu verwenden, um das Menü auf dem Anmeldebildschirm vollständig zu deaktivieren, und die Optionen "org.freedesktop.login1.suspend" und "org.freedesktop.login1.suspend-multiple-sessions" für den Suspend-Menüpunkt steuern. Legooolas vor 9 Jahren 1
Ich wünschte, ich könnte das mehrmals bestätigen Mark K Cowan vor 7 Jahren 0
2
grawity

Beachten Sie zunächst, dass die Herunterfahren-Funktion von ConsoleKit "Einzelbenutzer" und "Mehrere Benutzer" als zwei verschiedene Situationen betrachtet : Das Herunterfahren des Systems erfordert immer eine Administratorauthentifizierung, wenn andere Benutzer angemeldet sind.


Alle derartigen Aktionen werden von PolicyKit verwaltet. Wenn Sie die Richtlinien anpassen möchten, können Sie dies wie in polkit (8) beschrieben tun /etc/polkit-1/rules.d/20-disallow-shutdown.rules:

polkit.addRule (Funktion (Aktion, Betreff) { if ((action.id == "org.freedesktop.consolekit.system.stop" || action.id == "org.freedesktop.consolekit.system.restart") && subject.isInGroup ("Benutzer") ) { Betreff zurückgeben? polkit.Result.AUTH_ADMIN: polkit.Result.NO; } }); 

PolicyKit 0.105 und frühere Versionen dokumentieren dies in pklocalautority (8) - /etc/polkit-1/localauthority/50-local.d/20-disallow-shutdown.pkla:

[Herunterfahren nicht zulassen] Identität = Unix-Gruppe: Benutzer Aktion = org.freedesktop.consolekit.system.stop; org.freedesktop.consolekit.system.restart ErgebnisAny = Nein ResultInactive = nein ResultActive = auth_admin 

Die Actions werden in der ConsoleKit- Richtliniendatei aufgelistet oder ausgeführt pkaction.