【问题标题】:How to run a macOS app as root and use system calls?如何以 root 身份运行 macOS 应用程序并使用系统调用?
【发布时间】:2018-09-10 09:56:38
【问题描述】:

我正在尝试从我的 macOS 应用程序 (objective-c) 运行 setpriority 命令。它永远不会工作,我假设这是因为应用程序没有以 root 用户身份运行。

  • 我已登录计算机上的管理员帐户
  • 我尝试使用sudo 打开应用程序
  • 我尝试在应用上使用chmod
  • 我尝试将应用程序添加到Accessibility 列表Security and Privacy

Xcode 版本 9.2 (9C40b)

如果有任何帮助,我将不胜感激,谢谢!

【问题讨论】:

    标签: xcode macos xcode9.2


    【解决方案1】:

    您想以root 运行,还是以sudo 运行?有区别。绝对不建议以 root 身份运行,您会收到系统的奇怪行为。

    你写道:

    我试过用 sudo 打开应用

    应该可以。你是如何尝试的?您需要在 .app 包中调用二进制文件。对捆绑运行 open 将不起作用。

    例如

    sudo ./Xcode.app/Contents/MacOS/Xcode
    

    【讨论】:

    • 这返回了Illegal instruction: 4。我不确定我做错了什么,我一直在寻找解决这个错误的方法
    • 你的应用是沙盒的吗?删除 Xcode 中的所有权利,然后重试。
    【解决方案2】:

    不建议在 macOS 上以 root 身份运行 GUI 应用程序。相反,您应该将需要 root 访问权限的应用程序部分分解为单独的帮助工具,使用 SMJobBless() 函数以 root 身份启动该工具,然后使用 XPC 与该工具通信。

    Apple 提供了 EvenBetterAuthorizationSample 示例代码,以提供一个很好的基本框架来工作。

    编辑:不久前我决定制作我自己的授权示例项目,它应该比古老的EvenBetterAuthorizationSample 更易于使用。您可以通过CSAuthSample查看。

    【讨论】:

    • 即使不推荐,我仍然想自担风险进行探索。甚至可以以 root 身份使用该应用程序吗?
    • @Quack 在 OS X 的早期,这是可能的,虽然不是一个好主意。现在我认为如果你尝试一下,应用程序将无法连接到窗口服务器。这是最好的;过去有一些非常讨厌的特权提升漏洞利用该机制。
    • 我想这是有道理的,而且会更好。我很想为自己阅读更多相关信息(现在我很好奇)。你会碰巧知道任何关于修改优先级和安全性的文章/论文吗?
    • @Quack EvenBetterAuthorizationSample 代码是一个很好的资源。它没有像我想要的那样记录在案,但是如果您通读代码和 cmets,就可以弄清楚它在做什么。我一直想为我自己自制的 Swift 等价物清理代码,它的界面稍微好一点,所以我可以把它放到网上,但我似乎从来没有解决过它。 :-/
    猜你喜欢
    • 2011-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-08
    • 1970-01-01
    相关资源
    最近更新 更多