使用图形 sudo 提示符停止 systemctl

使用图形 sudo 提示符停止 systemctl

我的问题是,我该如何配置 systemd(?),让它在我忘记输入 sudo 时不再弹出这个烦人的弹窗。只要给我一个基于文本的 sudo 提示或显示错误,我就可以快速纠正错误。

这是 Arch Linux,最新版本(systemd 238.133)。

在此处输入图片描述

答案1

这不是“sudo”提示,而是“polkit”提示。避免它的一种方法是全局全部软件,而不仅仅是 systemctl – 是编写一个 polkit 规则,立即拒绝该操作(或立即允许它)。

polkit.addRule(function(action, subject) {
    if (subject.user !== "root") {
        if (/^org\.freedesktop\.systemd1\./.test(action.id)) {
            return polkit.Result.NO;
        }
    }
});

subject.user可以省略测试,因为 root 调用的操作可以完全绕过 polkit 检查。)

polkit 规则存储在 中/etc/polkit/rules.d/*.rules,通常命名为80-custom.rules(按升序处理)。有关更多信息,请参阅波尔基特(8)


(也就是说,如果你的 sudo 配置是无密码的,那么使用 'sudo' 与让 polkit 立即允许操作之间没有实际的安全差异。反之亦然,如果你的 sudo需要密码...那么为什么不直接将其输入到 polkit 对话框中呢?它是相同的密码。)

答案2

有一个选项--no-ask-password。创建别名:

alias systemctl='systemctl --no-ask-password'

(在 Bash、Kubuntu 中测试)。

答案3

不要对 systemctl 使用 sudo,曾经; 如果你允许进行维护,正确设置 polkit。

基本原理sudo使程序由请求的用户(通常:)有效运行root。包括所有链接的工具包。程序、库或 ...sudo 配置中的任何错误都会让你受到攻击。在 的情况下systemdsystemctl二进制文件只是一个控制器(一般而言)。它才不是需要 root 权限(对于大多数用例),因为它本身不执行特权操作,而是要求init。使用实际root帐户(直接或通过sudo)是全有或全无原子(炸弹)解决方案,而仅有的需要做的事情是授权不:验证反对systemd.因为systemd理解polkit授权, 使用已认证root授予的权限太多了。

考虑 中的一个错误systemctl,它允许直接调用任意命令(不是通过systemd)。当root授予权限时sudo,可以运行任何 EUID=0 的命令。以systemctl非特权用户身份运行时,只能使用他之前获得访问权限的帐户运行此类命令。这是一些基本安全规则的简单结果:

  • 仅使用所需的权限集(而不是全集 == root),
  • 仅向需要它的代码授予这些权限(授权systemd而不授予权限systemctl)。

至于成为机器的唯一用户 - 如果您使用非特权帐户工作,而不是一个root帐户,我假设您想限制您运行的程序获得多余的权限。systemctl仅因为root帐户要authorized命令而授予这些systemd权限是多余的权限。

此外,polkit您可以针对不同的操作(启动/停止/重新加载/其他)和不同的服务设置不同的访问标准。您可以在 中输入精确的命令sudoers,但 polkit 解决方案知道这些命令的具体部分。

结论sudo:如果有任何较低权限的方法可用,请不要使用。sudo是全有或全无的最后手段解决方案。

如果您希望密码提示以文本而不是图形显示,只需取消设置显示,例如:解除终端与运行身份验证代理的图形会话的绑定。

相关内容