"Systemctl halt" für alle Benutzer zulassen? (systemd + debian)

0

Ist es möglich, "systemctl halt" für alle Benutzer zuzulassen?

Derzeit nur die Befehle:

systemctl poweroff & systemctl reboot work on my system (Debian Jessie)

Wenn ich als normaler Benutzer systemctl halt aufrufe, wird folgende Meldung angezeigt:

Failed to start halt.target: Access denied

Ich habe folgende Methoden ausprobiert:

  1. Methode - Ich habe versucht, eine neue Aktion in /usr/share/polkit-1/actions/org.freedesktop.login1.policy hinzuzufügen

Ich habe die Aktion kopiert

<action id="org.freedesktop.login1.power-off"> to
<action id="org.freedesktop.login1.halt">
  1. Die Methode (und welche funktionierte) war chmod u + s / sbin / halt aber weil / sbin / halt ein link zu ist - & gt; / bin / systemctl Das ist wahrscheinlich keine gute Idee
David Stark
quelle
Beachten Sie, dass halt und systemctl halt sind zwei verschiedene Befehle. Auch wenn jemand ein Symlink zum anderen ist, verhalten sie sich trotzdem anders.
grawity

Antworten:

2

Schritt 1: Warten Sie einige Monate, bis Debian Stretch veröffentlicht ist - Sie benötigen mindestens systemd v227 mit Commits 2ac3930f (polkit prüft auf /sbin/halt ) und 88ced61b (erweiterte Polkit - Daten für systemctl halt usw.)

Schritt 2: Erstellen Sie eine Polkit-Regel in… Eigentlich nein, das wird nicht reichen, denn auch Stretch hat es noch polkit v0.105 , die die JS-basierten Regeln noch nicht unterstützten; nur die deutlich eingeschränkteren .pkla Format. Das heißt, v0.113 ist endlich in "experimentell".

Wenn Sie jedoch ein Upgrade auf systemd ≥v227 und polkit ≥v0.113 durchführen, sollte eine Regel wie diese funktionieren:

/* copy to /etc/polkit-1/rules.d/systemd-allow-halt.rules */

polkit.addRule(function(action, subject) {
    if (action.id == "org.freedesktop.systemd1.manage-units" &&
        action.lookup("unit") == "halt.service")
    {
        return polkit.Result.YES;
    }
});

Bringen Sie sich also das Tippen bei systemctl poweroff stattdessen. "Halt" ist nicht der normale Befehl zum Herunterfahren. Es ist der Befehl, im wahrsten Sinne des Wortes Halt die Maschine - ohne sie auszuschalten. Es ist nicht sehr nützlich.

Wenn Sie es nützlich finden, verwenden Sie sudo stattdessen:

# /etc/sudoers

ALL ALL=(root) NOPASSWD: /usr/bin/systemctl halt, /sbin/halt
grawity
quelle