Как правильно предотвратить отключение или перезагрузку пользователей без полномочий root?

5463
thomasrutter

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

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

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

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

7
Что если они вытащат вилку? wizlog 12 лет назад 1
@wizlog, см. «Вы заблокировали физический доступ к серверу». Это касается и его штепсельной вилки. thomasrutter 12 лет назад 2

2 ответа на вопрос

4
rofrol
  • pklocalauthority is deprecated
  • You need systemd with logind and polkit.

Available actions

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

You should look at /usr/share/polkit-1/actions/org.freedesktop.login1.policy

Add rule

First start monitoring system messages, so we can see if our new rule works:

journalctl -f 

Then create file /etc/polkit-1/rules.d/60-noreboot_norestart.rules (in javascript).

In this file we add logic to check for actions and allow users in power group or require su authorization:

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

Rule should be loaded and it should work. References below.

  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
Вы уверены, что нужно вернуть `polkit.Result.NO`? Я бы подумал, что это будет `polkit.Result.YES`, чтобы разрешить пользователям в группе" власть " ffledgling 9 лет назад 2
@ffledgling Это правильно. Я отредактировал ответ, чтобы отразить это и добавить отсутствующую фигурную скобку. Legooolas 9 лет назад 0
Также можно использовать «НЕТ» вместо «AUTH_ADMIN», чтобы полностью отключить меню на экране входа в систему, и параметры «org.freedesktop.login1.suspend» и «org.freedesktop.login1.suspend-множественные сеансы» для управление пунктом меню Suspend. Legooolas 9 лет назад 1
Жаль, что я мог бы проголосовать это несколько раз Mark K Cowan 7 лет назад 0
2
grawity

Во-первых, обратите внимание, что функция выключения 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") ) { вернуть субъект. активный? polkit.Result.AUTH_ADMIN: polkit.Result.NO; } }); 

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

[Запретить выключение] Идентичность = unix-группа: пользователи Действие = org.freedesktop.consolekit.system.stop; org.freedesktop.consolekit.system.restart ResultAny = нет ResultInactive = нет ResultActive = auth_admin 

Они Actionперечислены в файле политики ConsoleKit или при запуске pkaction.

Похожие вопросы