如何以root,现代方式推出NSTask?

时间:2017-06-29 20:17:12

标签: macos cocoa

我需要一些帮助来弄清楚如何给我的程序一些特权。我正在编写一个小实用程序来包装GUI openVPN 。它实际上只是我作为 NSTask sudo openvpn --config clientUDP.conf启动的bash脚本。 在互联网上搜索了几个小时之后,我想我应该使用授权服务任务并写一个 PrivilegedHelper 。这对我来说很尴尬,伙计们(基本上我是iO开发者,这是我第一次尝试迷你mac os应用程序)。

我的问题是 - 是否有任何现代教程可以找出如何编写PrivilegedHelper(在swift或objc中)以使用root权限启动我的NSTask?

P.S。我已经下载了SMJobBless示例并启动了它。但我没有找到任何类型的进程间通信,我无法弄清楚如何以root身份启动我的进程。

我真的需要你的建议,并依靠你的经验。

1 个答案:

答案 0 :(得分:1)

在"生命周期的某些时刻"在您的应用中,您需要获得管理员用户的授权。您可以将openvpn命令打包为安装在/ Library / LaunchDaemons中的launchd作业,这需要管理员授权才能安装。查看launchd.plist(5),然后创建一个以:

开头的plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>com.example.startopenvpn</string>
    <key>Program</key>
    <string>/path/to/openvpn</string>
    <key>ProgramArguments</key>
    <array>
        <string>--config</string>
        <string>clientUDP.conf</string>
    </array>
</dict>
</plist>

您需要添加启动触发器(马赫消息或其他触发器)才能启动作业。更多信息可以在Daemons and Services Guide

找到

您可以使用授权API并设置GUI以在运行时从管理员处获取授权。 Haven没有使用这种方法,所以我没有任何直接的建议。 Authorization Guide