objective-c - 运行具有提升权限的进程 OS X 10.7 & 10.8

标签 objective-c xcode macos cocoa osx-lion

我正在尝试以提升的权限运行一个进程 - 特别是 OpenVPN,它需要 root 权限才能将路由添加到系统。

四处寻找现有的例子让我找到了 AuthorizationExecuteWithPrivileges,它现在似乎已被弃用。

我尝试了新的 SMJobBless 方法,但我对它为此目的的可行性有一些疑问。据我了解,我可以创建一个单独的特权工具并通过套接字与其通信以请求该工具执行特权命令。但是,我似乎无法弄清楚如何启动 OpenVPN 进程并以这种方式实时捕获其标准输出,因为主应用程序本身不会启动该进程。

另一种选择是在 OpenVPN 可执行文件上使用 setuid。我可以使用 SMJobBless 安装的帮助程序来设置可执行文件的文件权限和 setuid,然后通过 NSTask 正常运行它吗?

编辑:

最后,有没有什么方法可以只使用特权运行一个命令而无需永久安装任何东西?虽然这种新方法更安全,但看起来很笨重。

最佳答案

我设法通过使用助手并将其与 XPC 通信(Nathan de Vries's Blog 中显示的方法)来使用 SMJobBless 方法。使用这个助手,我将外部进程的权限设置为 04555(setuid,rx)。然后删除 SMJob,因为不再需要它。本质上模拟“一次性”特权工作。

之后,我能够使用 NSTask 启动进程并在我的主应用程序中捕获其输出。

此外,我在开始时检查是否在可执行文件上正确设置了权限,如果没有,则重新启用 SMJob 助手并设置权限。

如果有人有更简洁的解决方案,请随时分享。谢谢!

关于objective-c - 运行具有提升权限的进程 OS X 10.7 & 10.8,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11497806/

相关文章:

objective-c - UISearchBar 搜索包含文本、副文本和图像的表格行

iOS模拟器7.1和8.3窗口高度差

android - Lg-H500f 麦格纳 USB 调试 Android Studio

objective-c - 如何测量 NSRunAlertPanel 控件之间的间距

c - 只是一个循环,还有 33 个泄漏

iOS - UITableViewCell,高亮时设置 subview 背景图片

objective-c - 当 int 在另一个循环中递增时如何管理它?

iphone - 错误 - Objective-C - 'Application tried to present modally an active controller <splitViewDetailViewController:'

ios - 向 TableView 单元格添加副标题

objective-c - 在 Objective c .m 文件中声明一个 char 数据类型的字符串,并在 Swift 中使用它