如何从 GUI 启动根服务

如何从 GUI 启动根服务

所以我知道在 Linux 环境中以 root 身份运行 GUI 应用程序是一个坏主意,普遍的观点似乎是最好通过单独的进程来运行这样的服务:GUI 界面进程和后台、root 特权执行实际工作的守护进程。

我正在创建一个程序面向不精通技术的 Linux 环境桌面用户。我不想要求他们打开命令行并运行命令来启动我的程序。他们应该能够单击菜单项(或 .desktop 文件)并简单地让该程序运行。因此,GUI 程序需要启动根进程,反之亦然。他们当然需要输入管理员密码,但我不确定如何以安全、与分发无关的方式允许输入。

这是一个备份程序,因此需要对目标驱动器进行分区以复制源驱动器上的分区,这需要 root 权限。完成该步骤后,只需安装和卸载分区即可将文件从源驱动器复制到目标。该程序将通过包管理器安装,大概至少在初始安装时具有管理权限。

如何安全地允许 GUI 程序运行 root 权限的守护程序?

注意:如果重要的话,我使用的语言是 Python 3。

答案1

很简单——你将程序完全分成两部分。

首先是您的服务器/服务及其守护进程。这应该是可独立安装的,并集成到主机使用的任何进程管理器中 - systemd、upstart、initd 等

然后你就有了 GUI 程序。将其设置为通过本地计算机上的网络(使用环回)或运行守护程序的远程主机进行连接。

有关此示例,请查看 mysql 服务器和 mysql-workbench。两个完全独立的应用程序,一个 GUI,不需要 root,一个服务,可能需要 root。

答案2

如果您需要启动 root 特权作业,您可以使用“sudo”。它可以配置为“运行 GUI 进程的特定用户 ID 可以使用这些参数运行某个根命令”。

相关内容