7

Допустим, вы установили многопользовательскую систему для использования в школе или библиотеке, которая позволяет GDM запускать несколько сеансов X для одновременной работы с разными пользователями / клавиатурами / мониторами.

По умолчанию в Debian/Ubuntu в Gnome вам не нужно быть пользователем root для выключения или перезагрузки. Но это означает, что любой пользователь может выбрать "перезагрузку" или "выключение" и отключить трех других пользователей.

Вы заблокировали физический доступ к серверу, поэтому они не могут просто нажимать кнопки питания или сброса.

Как правильно отключить функции "выключение" и "перезагрузка", доступные обычным пользователям через GDM/Gnome/ любой оконный менеджер, который вы используете?

2 ответа2

4
  • pklocalauthority устарела
  • Вам нужен systemd с logind и polkit.

Доступные действия

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

Вы должны посмотреть на /usr/share/polkit-1/actions/org.freedesktop.login1.policy

Добавить правило

Сначала запустите мониторинг системных сообщений, чтобы мы могли увидеть, работает ли наше новое правило:

journalctl -f

Затем создайте файл /etc/polkit-1/rules.d/60-noreboot_norestart.rules (в javascript).

В этом файле мы добавляем логику для проверки действий и разрешаем users в группе power или требовать su авторизации:

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

Правило должно быть загружено, и оно должно работать. Ссылки ниже.

  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
2

Во-первых, обратите внимание, что функция выключения ConsoleKit рассматривает "одного пользователя" и "нескольких пользователей" как две разные ситуации - выключение системы всегда требует аутентификации администратора, если в систему вошли другие пользователи.


Все такие действия управляются PolicyKit. Если вы хотите изменить политику, вы можете сделать это, как описано в polkit(8) - /etc/polkit-1/rules.d/20-disallow-shutdown.rules:

polkit.addRule(function(action, subject) {
    if ((action.id == "org.freedesktop.consolekit.system.stop" ||
         action.id == "org.freedesktop.consolekit.system.restart") &&
        subject.isInGroup("users")) {
            return subject.active ? polkit.Result.AUTH_ADMIN : polkit.Result.NO;
    }
});

PolicyKit 0.105 и более ранние версии документируют это в pklocalauthority(8) - /etc/polkit-1/localauthority/50-local.d/20-disallow-shutdown.pkla:

[Disallow shutdown]
Identity=unix-group:users
Action=org.freedesktop.consolekit.system.stop;org.freedesktop.consolekit.system.restart
ResultAny=no
ResultInactive=no
ResultActive=auth_admin

Action перечислено в файле политики ConsoleKit или с помощью команды pkaction .

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