【问题标题】:How to launch NSTask as root, modern approach?如何以root身份启动NSTask,现代方法?
【发布时间】:2017-06-29 20:17:11
【问题描述】:

伙计们。

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

我的问题是 - 是否有任何现代教程来弄清楚如何编写 PrivilegedHelper(在 swift 或 objc 中)以启动具有 root 权限的我的 NSTask?

附:我已经下载了 SMJobBless 示例并启动了它。但是我没有在其中找到任何类型的进程间通信,而且我不知道如何以 root 身份启动我的进程。

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

【问题讨论】:

    标签: macos cocoa


    【解决方案1】:

    在应用程序“生命周期”的某个时刻,您需要获得管理员用户的授权。您可以将 openvpn 命令打包为安装在 /Library/LaunchDaemons 中的启动作业,这需要管理员授权才能安装。查看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>
    

    您需要添加启动触发器(mach 消息或其他触发器)来启动作业。更多信息请访问Daemons and Services Guide

    您可以使用授权 API 并建立一个 GUI,以便在运行时从管理员那里获得授权。没有使用过这种方法,所以我没有任何直接的建议。 Authorization Guide

    【讨论】:

      猜你喜欢
      • 2015-06-18
      • 2014-10-12
      • 2017-01-26
      • 1970-01-01
      • 2013-11-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-14
      相关资源
      最近更新 更多