有选择地请求一个(打包的)python .app的root访问权限

问题描述 投票:1回答:2

这个问题涉及几个问题的碰撞,我所理解的只是一些问题,但我将它们包括在一起,因为它们都可以作为解决方案的切入点。这是我能给出的最佳描述。

我有一个应用程序,在python中。 (我想我理论上可以通过学习Cocoa和ObjectiveC来解决所有这些问题,但对于这个问题,这似乎是一个提升 - 并且,如下所述,这个问题实际上可能与python无关,实际上,根本没有我只是不知道。)这个应用程序的核心功能是使用热键触发迷你游戏 - 这意味着,热键本身是所需功能的基础。此外,我真的想打包这个应用程序,让其他人使用它。 (在本地,它很棒!嘿!)

问题始于添加热键 - 我正在做的事情

import keyboard
keyboard.add_hotkey('windows+shift+y', trigger_minigame)

- 需要root访问权限。由于另一个SO帖子Forcing a GUI application to run as root的DIRE警告(老实说,我只是模糊地理解),我想只允许访问这部分程序。我想象一下,这样的方法看起来像这样:

# needs_root.py
import keyboard
from shouldnt_have_root import trigger_minigame
keyboard.add_hotkey('windows+shift+y', trigger_minigame)

# shouldnt_have_root.py
def minigame():
    buncha pygame, GUI stuff (which is dangerous???)
def trigger_minigame():
    adds event to minigame's event queue

# bash script
sudo python needs_root.py

但是 - 有几个主要挑战!最大的问题是我甚至不知道这是否安全,因为我不知道安全性和权限(特别是进口)是如何工作的!更一般地说,进口有多危险?事实上,我可能实际上必须导入更多,以明确触发器添加事件TO的事件队列 - 我不知道如何进行通信,同时仍然隔离GUI部分(或来自不必要和危险的访问。

还有另一层;通过pyinstaller打包它意味着我不能直接定位脚本,因为它们已经变成了二进制文件,但根据这个答案,Packaging multiple scripts in PyInstaller看起来我可以直接定位二进制文​​件,即有第一个二进制调用

osascript -e 'do shell script "python needs_root_binary" with admin.'

让用户只祝福必要的部分,但我不知道是否会在其他方面存在其他障碍或漏洞(或文件间通信困难)。

最后,我可以尝试以root身份启动,然后在设置热键时(在其他任何事情发生之前)立即切换它 - 但这样会安全吗?我仍然担心它涉及在整个应用程序上运行sudo。

在任何情况下 -

这感觉真是一团糟吗?

我如何只对一个打包的.app进行root访问,我用python写的?

python macos security keyboard-shortcuts pyinstaller
2个回答
1
投票

我建议你:

  1. 启用root访问权限,
  2. 写剧本,
  3. 禁用root访问权限

正如在here中更接近描述的那样。

Pyinstaller是另一章。当我制作需要使用热键的软件时,我不得不使用键盘以外的其他功能,因为没有Python它在PC上无法正常工作,因此我使用tkinter内置函数canvas.bind()制作了一个热键(更多信息) here)。

希望我帮忙。


-1
投票

您不能像root一样运行特定的Python函数,只能执行脚本的Python进程可以使用提升的权限运行。

所以我的答案是:你所描述的问题无法解决。

© www.soinside.com 2019 - 2024. All rights reserved.