我正在用golang编写程序,该程序需要使用ICMP执行任务。它还将在端口80上运行Web服务器。为此,我需要在Linux上具有某些特权。
我正在寻找当非特权用户运行SystemD时通过systemctl
命令获取特权的方式。如果您运行以下示例,则我想模拟的行为是可重现的:systemctl stop sshd
作为非root用户的管理员用户
我的问题是;如何使用policykit升级当前正在运行的程序的特权,而无需按照SystemD的systemctl
命令出现的方式重新启动程序。我已经通过将stdin,stdout和stderr重新绑定到来自以下命令的命令来伪完成此任务:
exec.Command("pkexec", ...)
但是这种方法只是将程序作为子进程再次运行,而让父进程挂起以等待子进程退出。这感觉是不必要的并且过于复杂。在我看来,更好的解决方案是在交互运行时更改进程的权限,我认为policykit允许这样做。
我让父进程挂在子进程上,这样外壳程序将继续等待进程。
我不希望该程序的用户不得不运行sudo或其他控制模式,而只是希望他们能够下载程序的二进制文件,。/可执行文件,然后由程序来执行操作。在我看来,在程序内部提示输入polkit等的密码。