我有一个非 root 用户,我需要能够启动/停止/重新启动系统上的服务子集,而无需提示输入授权密码。理想情况下,我希望通过 polkit 完成此操作,但如果需要,我会选择 sudo。无论如何,我在这里看到了解决方案,包括向 localauthority 添加文件并添加 .rules 文件以/etc/polkit-1/rules.d
指定要运行的服务。我应该提到这是在 CentOS7 系统上。
然而,地方当局的解决方案是全部服务和 .rules 文件解决方案(取自此处:systemd:授予非特权用户更改一项特定服务的权限) 仍将提示输入密码,因为中的“manage-units”操作设置为“auth_admin” /usr/share/polkit-1/actions/org.freedesktop.systemd1.policy
。
有没有办法让 polkit 允许特定用户无需密码即可运行特定服务?无需为该用户提供管理单元操作的完全开放权限?我基本上想要有条件的管理单元权限。
我还注意到一些有趣的事情:如果我运行这个函数
polkit.addRule(function(action, subject) {
if (action.id == "org.freedesktop.systemd1.manage-units" && subject.user == "alice")
{
return polkit.Result.YES;
}
});
它对所有服务都有效。但如果我尝试通过将其更改为以下内容来深入了解服务:
polkit.addRule(function(action, subject) {
if (action.id == "org.freedesktop.systemd1.manage-units" &&
action.lookup("unit") == "example.service" &&
subject.user == "alice") {
return polkit.Result.YES;
}
});
突然它提示输入密码。不知道为什么它不会在第一个函数中提示输入密码,因为它仍然按照管理单元操作进行操作。