macos - 如何以 root 身份启动 NSTask,现代方法?

标签 macos cocoa

伙计们。

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

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

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

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

最佳答案

在应用程序“生命周期”的某个时刻,您需要获得管理员用户的授权。您可以将 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>

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

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

关于macos - 如何以 root 身份启动 NSTask,现代方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44834251/

相关文章:

objective-c - 测试 NSDocument

iphone - 如何从 iPhone 项目中的代码编译 OSX Cocoa 框架?

macos - 在使用 dlopen() 加载的 DLL 中覆盖 @executable_path

objective-c - 替换 NSString 特定部分内的文本

objective-c - xib中基于嵌套 View 的NSTableViews

objective-c - 配置 log4Cocoa

objective-c - predicateWithBlock : used for? 中 block 的绑定(bind)参数是什么

python - Pip 正在尝试构建 numpy 而不是在 M1 Mac 上使用预构建的版本

macos - 阻止 Emacs 修改 OS X 剪贴板?

macos - 如何从命令行Mac OS X编辑文件?