在 CentOS 7 上禁用 polkit.service 的正确方法

在 CentOS 7 上禁用 polkit.service 的正确方法

为什么?

我的服务是通过适当的单元文件或 init 脚本启动的。我不需要普通用户在我的服务器上做任何特殊的事情su。我特别想找到一种方法来完全关闭 polkit,而不会在其他服务重新启动时自行启动它。

我预见到在我们的 PCI 环境中向审计人员解释这一点也会有问题。我们必须描述每项服务的用途。我们没有在 PCI 环境中合法使用 polkit 的案例。

补充说明:我没有安装 polkit。这些服务器的安装非常少大约 670MB 这是一个 systemd 更新,似乎安装了 polkit,并且该规范显然对所有 systemd 管理的服务都有依赖关系。安装后,我必须重建机器才能将其删除,就像nss安装后尝试删除一样。我担心的是,如果我强制卸载,它可能会留下一些文件,这些文件会让 systemd 误以为它在那里。

我已尝试过:

创建/etc/polkit-1/rules.d/99-deny-all.rules

polkit.addRule(function(action, subject) {
    return polkit.Result.YES;
});

然后

systemctl daemon-reload && systemctl daemon-reexec

这不执行任何操作,/usr/lib/polkit-1/polkitd --no-debug当 systemd 下的其他服务重新启动时继续启动。

[更新] 正如亚历山大提到的,重新启动 polkit 将会把设置应用于 polkit 本身,这很好,但我正在寻找一种方法来告诉 polkit 不要启动而不会破坏其他服务。

[更新2] 这实际上可能会阻止某些服务正确重新启动。


屏蔽或者禁用服务:

这会导致其他服务在启动和关闭时挂起,等待 polkit。


編輯/usr/share/dbus-1/sstem-services/org.freedesktop.PolicyKit1.service

[snip]
Exec=/bin/false
[snip]

然后

systemctl daemon-reload && systemctl daemon-reexec

这不执行任何操作,/usr/lib/polkit-1/polkitd --no-debug当 systemd 下的其他服务重新启动时继续启动。


我读过几次手册页。我可能忽略了一些非常简单的东西。我更倾向于使用在 systemd 软件包更新后仍然有效的方法。

我想要的最终目标是当其他守护进程重新启动时,polkit.service 不会启动,例如 unbound、bind、dhcp 等。

答案1

更新

Redhat 已更改 Polkit 周围的 RPM 依赖关系。即使在之前的升级或安装过程中有其他东西将其引入,现在也可以从服务器上卸载它。

我现在可以从其他人从 CentOS 7.6 构建的服务器上卸载 Polkit。

工作站上仍需要它,并且它似乎适合桌面使用。

答案2

添加规则后,/etc/polkit-1/rules.d/99-deny-all.rules您应该通过 重新启动 polkit 服务systemctl restart polkit。此后,systemctl 将执行来自非特权用户的任何请求。

答案3

作为系统的所有者,我们通常不关心发行版构建者的意图。很多人可能会不同意,但我认为供应商对启动/停止/安装/删除系统组件等的限制侵犯了我的财产,我会按照自己的意愿处理我的系统。

如果您发现自己处于这样一种情况,即删除是polkit最合适的选择,而发行版构建者没有为您提供“支持”的方法,那么您可以搜索polkitd并重命名该文件,然后发出服务停止命令。

在我的特定情况下,polkit我倾向于在不需要时固定一个 CPU 核心,我使用上述方法将其移除。欢迎您,为用户提供动力!

相关内容