我正在创建一个具有需要root权限的方法的python应用程序.从https://www.freedesktop.org/software/polkit/docs/0.105/polkit-apps.html,我找到了示例2.通过D-Bus访问权限,这是下面代码的python版本,我执行了它我认为输入密码后我可以获得root权限,但我仍然在我的应用程序上获得"权限被拒绝".这是我正在尝试连接的功能
import dbus
bus = dbus.SystemBus()
proxy = bus.get_object('org.freedesktop.PolicyKit1', '/org/freedesktop/PolicyKit1/Authority')
authority = dbus.Interface(proxy, dbus_interface='org.freedesktop.PolicyKit1.Authority')
system_bus_name = bus.get_unique_name()
subject = ('system-bus-name', {'name' : system_bus_name})
action_id = 'org.freedesktop.policykit.exec'
details = {}
flags = 1 # AllowUserInteraction flag
cancellation_id = '' # No cancellation id
result = authority.CheckAuthorization(subject, action_id, details, flags, cancellation_id)
print result
Run Code Online (Sandbox Code Playgroud) 我需要允许非 root 用户启动和停止服务。建议我使用PolicyKit而不是sudoers.d我熟悉的 。
由于我没有使用经验PolicyKit,我想我应该尝试并创建一个规则来允许非 root 用户启动和停止 Docker 服务。我创建了一个文件,/etc/polkit-1/rules.d/10-docker.rules其中包含:
polkit.addRule(function(action, subject) {
if (action.id == "org.freedesktop.systemd1.manage-units" &&
action.lookup("unit") == "docker.service")
{
return polkit.Result.YES;
}
})
Run Code Online (Sandbox Code Playgroud)
但是,每当我执行 时systemctl start|stop|restart docker.service,都会不断提示我输入密码。我缺少什么?
另外,我想限制非 root 用户控制特定组中的此服务,例如blah。我如何将其纳入我的规则中?
我的目标操作系统是 RHEL 7.7。