我想防止用户在另一个用户登录时开始关机或重新启动。用户可以是 TTY 用户 (Ctrl+Alt+F3) 或客户端主机的 ssh 用户。
在 OpenBSD 中,我使用org.xfce.session.policy
带有规则文件的 polkit 来防止此类操作。
我需要在 Debian 测试(又名 Buster)中找到如何做到这一点。
我org.freedesktop.login1.policy
用行动 发现
org.freedesktop.login1.power-off
org.freedesktop.login1.power-off-multiple-sessions
。
并为这些操作制作了规则文件,但它不会阻止关闭或重新启动。
在我看来,polkit 并不单独对这些行为负责。
我不知道去哪里寻找这个;也许是 systemd 或 PAM ?
编辑
在 OpenBSD 和 NetBSD 上,默认情况下,任何人都不允许从 GUI 关闭或重新启动。
您必须创建一个规则文件,/usr/local/share/polkit-1/rules.d/
如下所示:
polkit.addRule (function (action, subject) {
if (action.id == "org.xfce.session.xfsm-shutdown-helper")
{
return polkit.Result.YES;
}
});
在 Debian 上,默认情况下,所有用户都可以从 GUI 关闭或重新启动。
没有org.xfce.session.xfsm-shutdown-helper
或 的规则文件org.freedesktop.login1.power-off
。
我尝试添加我的规则文件,但return polkit.Result.NO;
没有效果。
在 debian 上,我使用lightdm
,在 BSD 上,我使用xdm
.
答案1
Debian Testing Buster 使用 polkit 1.05,因此没有规则文件,也没有 js 语法。
您必须使用旧的policykit ini 样式。
为了防止用户在另一个用户登录时开始关机或重新启动,
您必须在 /etc/polkit-1/localauthority/50-local.d/ 中创建两个 pkla 文件
cat /etc/polkit-1/localauthority/50-local.d/Reject_All_Users_To_login1_power-off-multiple-sessions.pkla
[Reject all users to use login1_power-off-multiple-sessions]
Identity=unix-user:*
Action=org.freedesktop.login1.power-off-multiple-sessions
ResultAny=no
ResultInactive=no
ResultActive=no
cat /etc/polkit-1/localauthority/50-local.d/Reject_All_Users_To_login1_reboot-multiple-sessions.pkla
[Reject all users to use login1_reboot-multiple-sessions]
Identity=unix-user:*
Action=org.freedesktop.login1.reboot-multiple-sessions
ResultAny=no
ResultInactive=no
ResultActive=no
但是,这还不够,因为 xfce 也在 /usr/share/polkit-1/actions/org.xfce.session.policy 中安装了关闭或重新启动的操作。
您还必须在 /etc/polkit-1/localauthority/50-local.d/ 中为此操作创建一个 pkla 文件
cat /etc/polkit-1/localauthority/50-local.d/Reject_All_Users_To_Use_Xfce_Session_Policy.pkla
[Reject all users to use xfce_session_policy]
Identity=unix-user:*
Action=org.xfce.session.xfsm-shutdown-helper
ResultAny=no
ResultInactive=no
ResultActive=no