为什么?
我的服务是通过适当的单元文件或 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 核心,我使用上述方法将其移除。欢迎您,为用户提供动力!