当其他用户登录时如何阻止 Debian xfce 关机或重新启动

当其他用户登录时如何阻止 Debian xfce 关机或重新启动

我想防止用户在另一个用户登录时开始关机或重新启动。用户可以是 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

相关内容