在传统的 Unix 系统上,非 root 用户无法执行此操作。是什么让用户在现代桌面环境中拥有这种能力?我该如何针对每个用户或每个组禁用此功能?
我见过很好的预防方法任何人关闭/暂停,但理想情况下,我想要的是阻止某些用户(例如,通过从某个用户组添加/删除他们)执行关机、重启、暂停。
答案1
正如另一个问题中提到的,您可以通过 PolicyKit 的本地权限系统控制这些操作。
如果你创建一个包含如下内容的文件/etc/polkit-1/50-local.d/restrict-shutdown.pkla
:
[Disable shutdown/etc for group restricted]
Identity=unix-group:restricted
Action=org.freedesktop.consolekit.system.stop;org.freedesktop.consolekit.system.restart;org.freedesktop.upower.suspend;org.freedesktop.upower.hibernate
ResultAny=no
ResultInactive=no
ResultActive=no
这将阻止组中的任何成员restricted
执行匹配的操作。或者,如果您想限制单个用户,请将其替换unix-group:restricted
为unix-user:user1;unix-user:user2;...
。任何不符合此策略的用户都应采用默认行为。
答案2
以 root 身份创建并编辑此文件:
/etc/polkit-1/localauthority/50-local.d/power-management.pkla
复制并粘贴以下内容:
[Disable shutdown/restart for users jim jane]
Identity=unix-user:jim;unix-user:jane
Action=org.freedesktop.login1.reboot;org.freedesktop.login1.reboot-multiple-sessions;org.freedesktop.login1.power-off;org.freedesktop.login1.power-off-multiple-sessions
ResultAny=no
ResultInactive=no
ResultActive=no
[Disable suspend/hibernate for users jim jane]
Identity=unix-user:a;unix-user:vvpinker
Action=org.freedesktop.login1.suspend;org.freedesktop.login1.suspend-multiple-sessions;org.freedesktop.login1.hibernate;org.freedesktop.login1.hibernate;org.freedesktop.login1.hibernate-multiple-sessions
ResultAny=no
ResultInactive=no
ResultActive=no