如何以 root 身份运行自己开发的应用程序

如何以 root 身份运行自己开发的应用程序

我开发了一个 GUI 应用程序,有时我想以 root 身份运行它。在 Ubuntu 18.04 中,我使用 sudo 没有任何问题,但在 20.04 中,sudo 不会运行该应用程序:没有错误消息。此外,如果我运行 sudo su,然后尝试从命令行打开该应用程序,什么也不会发生。而且我看不到相关的日志消息。从 18.04 到 20.04,以 root 身份运行应用程序有哪些变化,我如何以 root 身份运行我的应用程序?
更新:我在 main.cpp 中添加了一个跟踪语句,该语句作为第一行代码写入文件。当应用程序以 root 身份运行时,不会将任何内容写入文件。据我所知,当我以 root 身份运行应用程序时,我的任何代码都不会执行。以“正常”方式运行应用程序,跟踪会被执行,应用程序会按预期运行。该应用程序使用 GTKmm。所有其他库都是标准系统或 C++14 库。当我第一次在 20.04 中尝试此操作时,没有系统日志消息。现在(经过多次系统更新)当我在 sudo 下运行它时,日志显示“pam_unix(sudo:session): session closed for user root”,在我 sudo su(即成为 root)后,没有任何消息。我有另一个 GTKmm 应用程序,在 20.04 中以 root 身份运行时可以工作。由于我的代码都没有在不以 root 身份在 20.04 中运行的应用程序中执行,因此我不确定如何追踪它。我也不知道这是 20.04 中的错误(可能已修复)还是 18.04 的故意更改。欢迎提出任何建议。谢谢!
更新 2:使用 strace 运行(如建议的那样)显示当应用程序在 sudo 下运行时文件路径发生了变化。我不知道为什么在没有运行任何引用它的代码的情况下会导致问题,但至少我发现了问题。我假设getenv("HOME") 函数从 18.04 更改为 20.04这样当应用程序以 root 身份运行时,它现在将返回 root 主目录,而不是当前系统用户的主目录。我需要搜索另一个返回当前系统用户的函数。谢谢你的帮助!
我通过 getenv("HOME") 获取用户主目录,并在其中使用用户名。这在 Ubuntu 18.04 中有效,但在 20.04 中更改为 /home/root,当应用程序以 root 身份运行时。一个解决方案是从 getlogin() 获取用户名。从那里,我可以构建主目录。

相关内容