Можно ли разрешить "systemctl halt" для всех пользователей?

На данный момент только команды:

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

Когда я вызываю systemctl halt как обычный пользователь, я получаю следующее сообщение:

Failed to start halt.target: Access denied

Я попробовал следующие методы:

  1. Метод - я попытался добавить новое действие в: /usr/share/polkit-1/actions/org.freedesktop.login1.policy

Я скопировал действие

<action id="org.freedesktop.login1.power-off"> to
<action id="org.freedesktop.login1.halt">
  1. Метод (и который работал) был для chmod u+s /sbin /halt, но поскольку /sbin /halt является ссылкой на -> /bin /systemctl, это, вероятно, не очень хорошая идея

1 ответ1

2

Шаг 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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .