Consenti "systemctl stop" per tutti gli utenti? (systemd + debian)


0

È possibile consentire "systemctl halt" per tutti gli utenti?

Attualmente solo i comandi:

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

Quando chiamo systemctl halt come un normale utente, ricevo il seguente messaggio:

Failed to start halt.target: Access denied

Ho provato i seguenti metodi:

  1. Metodo: ho provato ad aggiungere una nuova azione in: /usr/share/polkit-1/actions/org.freedesktop.login1.policy

Ho copiato l'azione

<action id="org.freedesktop.login1.power-off"> to
<action id="org.freedesktop.login1.halt">
  1. Il metodo (e che ha funzionato) è stato quello di chmod u + s / sbin / halt ma poiché / sbin / halt è un collegamento a -> / bin / systemctl questa probabilmente non è una buona idea

Si noti che halte systemctl haltsono due diversi comandi. Anche se uno è un collegamento simbolico all'altro, si comportano comunque diversamente.
Grawity,

Risposte:


2

Passaggio 1: attendere diversi mesi fino al rilascio di Debian Stretch - è necessario almeno systemd v227, con commit 2ac3930f (controllo polkit per /sbin/halt) e 88ced61b (dati polkit estesi per systemctl haltecc.)

Passo 2: Crea una regola polkit in ...In realtà, no, questo non sarà abbastanza perché anche Stretch ha ancora polkit v0.105 , che non supporta ancora le regole basate su JS; solo il .pklaformato considerevolmente più limitato . Detto questo, v0.113 è finalmente in "sperimentale".

Ma se ti capita di passare a systemd ≥v227 e polkit ≥v0.113, una regola come questa dovrebbe funzionare:

/* 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;
    }
});

Quindi, insegnati a digitare systemctl poweroffinvece. "Halt" non è il normale comando di spegnimento; è il comando di arrestare letteralmente la macchina - senza spegnerla. Non è molto utile

Se lo trovi utile, usa invece sudo :

# /etc/sudoers

ALL ALL=(root) NOPASSWD: /usr/bin/systemctl halt, /sbin/halt
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.