【问题标题】:Forcing a GUI application to run as root强制 GUI 应用程序以 root 身份运行
【发布时间】:2014-09-11 15:15:32
【问题描述】:

我正准备在 OS X 上部署一个应用程序。这是我第一次在这个平台上编写一个需要 root 权限才能正常运行的应用程序,所以我需要为每次启动尝试集成该功能。

应用程序本身是用 Python 2.7 编写的,然后使用 PyInstaller 编译为二进制文件。到目前为止,我已经尝试过:

  • 使用 sudo pyinstaller -w --icon=/path/to/icon /path/to/script.py 运行 PyInstaller

  • 使用sudo su调用 PyInstaller 命令

我现在不知道还能尝试什么。是否可以使用符号链接来实现?

【问题讨论】:

    标签: python macos root pyinstaller


    【解决方案1】:

    Apple 建议不要以 root 身份运行 GUI 应用程序,因为此类应用程序中包含的库会增加恶意软件的攻击媒介。

    相反,建议将您的代码重构为两部分,即 Gui 和一个单独的帮助应用程序,该应用程序被授予 root 权限。

    有一个示例应用程序here

    【讨论】:

      【解决方案2】:

      当您以后以普通用户身份启动应用程序本身时,以 root 身份运行 installer 将不起作用。

      改用sudo python /path/to/script.py

      如果可行,则将其放入 shell 脚本并运行它以从现在开始以 root 身份启动应用程序(了解 MacOS 的人可能会告诉你如何为脚本创建一个漂亮的图标)。

      警告这样做会使您的系统容易受到攻击。如果您在自己的 Mac 上执行此操作,那很好。如果您正在开发要出售给其他人的产品,那么您需要重新审视您的设计,因为它已严重损坏。

      【讨论】:

      • 这很有帮助,但这会导致终端窗口打开,提示输入 root 密码。鉴于此应用程序的目标受众,最好让通常的 GUI 弹出窗口询问密码。有没有办法做到这一点?附带说明一下,.py 脚本不在最终产品中。这一切都被 PyInstaller 编译成二进制文件。
      • 好吧,你即将破坏系统的安全性,所以它应该不舒服。我现在的猜测是,您并不真正知道自己在做什么,并且“以 root 身份运行”似乎是解决您遇到的任何问题的“解决方案”。 不是。您的应用必须在没有 root 的情况下运行。如果您遇到错误或对此有疑问,请向我们寻求解决方案。但是以 root 身份运行数百万行不安全的代码就像邀请世界上的每个罪犯参加家庭聚会。
      • 我的应用程序是围绕一个主要的第三方组件构建的包装器,该组件需要 root 权限才能运行,其源代码太大,我无法进行更改,只要求权限通过终端。如果我的 cmets 似乎不了解情况,那是因为我通常不是 Objective-C 开发人员——正如我所提到的,包装器的所有源代码都是 Python,使用 PyInstaller 编译的。
      • 无论您使用 Python 还是 Objective-C,安全性的工作方式都是一样的。这个第三方组件是什么,为什么需要root?
      • @AaronDigulla 我想隔离这些部分,但无法从链接代码转换为 python。你能添加一个简单的例子吗?特别是,我只想授予“keyboard.add_hotkey”权限;我只是把它放在一个单独的文件中,只给那个文件根吗?我仍然需要从另一个文件中导入它触发的函数。
      猜你喜欢
      • 2011-04-20
      • 1970-01-01
      • 1970-01-01
      • 2010-09-08
      • 1970-01-01
      • 1970-01-01
      • 2016-04-11
      • 1970-01-01
      相关资源
      最近更新 更多