tho*_*ter 10 linux privileges reboot gdm multiseat
假设您已经设置了一个用于学校或图书馆的多座位系统,允许 GDM 启动多个 X 会话以与不同的用户/键盘/显示器同时运行。
默认情况下,在 Gnome 的 Debian/Ubuntu 中,您不必以 root 身份关闭或重新启动。但这意味着任何用户都可以选择“重新启动”或“关闭”并启动其他三个用户。
您已阻止对服务器的物理访问,因此他们无法简单地按下电源或重置按钮。
禁用通过 GDM/Gnome/您使用的任何窗口管理器向普通用户公开的“关闭”和“重新启动”功能的正确方法是什么?
pkaction
# or /usr/share/polkit-1/actions/
Run Code Online (Sandbox Code Playgroud)
你应该看看 /usr/share/polkit-1/actions/org.freedesktop.login1.policy
首先开始监控系统消息,这样我们就可以看看我们的新规则是否有效:
journalctl -f
Run Code Online (Sandbox Code Playgroud)
然后创建文件/etc/polkit-1/rules.d/60-noreboot_norestart.rules(在javascript中)。
在这个文件中,我们添加逻辑检查行动,并允许users在power组或需要su授权:
pkaction
# or /usr/share/polkit-1/actions/
Run Code Online (Sandbox Code Playgroud)
应该加载规则并且它应该可以工作。参考如下。
首先请注意,ConsoleKit 的关闭功能将“单用户”和“多用户”视为两种不同的情况- 如果其他用户登录,则关闭系统始终需要管理员身份验证。
所有此类操作均由 PolicyKit 管理。如果你想调整策略,你可以按照 polkit(8) 中的描述进行操作 – /etc/polkit-1/rules.d/20-disallow-shutdown.rules:
polkit.addRule(函数(动作,主题){
if ((action.id == "org.freedesktop.consolekit.system.stop" ||
action.id == "org.freedesktop.consolekit.system.restart") &&
subject.isInGroup("用户") ) {
返回主题.活动?polkit.Result.AUTH_ADMIN : polkit.Result.NO;
}
});
PolicyKit 0.105 及更早版本在pklocalauthority(8)中记录了这一点– /etc/polkit-1/localauthority/50-local.d/20-disallow-shutdown.pkla:
[禁止关机] 身份= unix-group:用户 操作=org.freedesktop.consolekit.system.stop;org.freedesktop.consolekit.system.restart 结果任意=否 结果无效=否 结果活动= auth_admin
这些Action在 ConsoleKit策略文件中或通过运行pkaction.