Разрешить "остановка systemctl" для всех пользователей? (systemd + debian)
Можно ли разрешить "systemctl halt" для всех пользователей?
На данный момент только команды:
systemctl poweroff & systemctl reboot work on my system (Debian Jessie)
Когда я вызываю systemctl halt как обычный пользователь, я получаю следующее сообщение:
Failed to start halt.target: Access denied
Я попробовал следующие методы:
- Метод - я попытался добавить новое действие в: /usr/share/polkit-1/actions/org.freedesktop.login1.policy
Я скопировал действие
<action id="org.freedesktop.login1.power-off"> to
<action id="org.freedesktop.login1.halt">
- Метод (и который работал) был для chmod u+s /sbin/halt, но поскольку / sbin / halt является ссылкой на -> /bin/systemctl, это, вероятно, не очень хорошая идея
1 ответ
Шаг 1: Подождите несколько месяцев, пока не выйдет Debian Stretch - вам нужен как минимум systemd v227 с коммитами 2ac3930f (проверка polkit для /sbin/halt
) и 88ced61b (расширенные данные polkit для systemctl halt
так далее.)
Шаг 2: Создать правило polkit в… На самом деле, нет, этого будет недостаточно, потому что даже у Stretch все еще есть polkit v0.105, который еще не поддерживает правила на основе JS; только значительно более ограниченный .pkla
формат. Тем не менее, v0.113, наконец, в "экспериментальной".
Но если вам случится обновить систему до systemd ≥v227 и polkit ≥v0.113, то такое правило должно работать:
/* 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;
}
});
Итак, научите себя печатать systemctl poweroff
вместо. "Останов" не является обычной командой выключения; это команда буквально остановить машину - не выключая ее. Это не очень полезно.
Если вы находите это полезным, используйте вместо этого sudo:
# /etc/sudoers
ALL ALL=(root) NOPASSWD: /usr/bin/systemctl halt, /sbin/halt