objective-c - 使用 root 权限部署应用程序

标签 objective-c cocoa macos permissions libpcap

我编写了一个 Cocoa 应用程序,它使用 libpcap 来监控网络流量。由于 libpcap 需要 root 权限,我想知道赋予它 root 权限的最佳方法是什么(例如使用 Package Maker?)。我可以使用拖放式安装程序部署它吗?还是 Package Maker 是我唯一的选择?

此外,我想知道授予我的应用根权限所带来的安全风险。该应用程序还写入磁盘(sqlite 数据库),我读到给写入磁盘根权限的应用程序不是一个好主意。

最佳答案

推荐的 Apple 方法如下:

  • 将需要特权操作的内容分解为单独的可执行文件(即为您使用 libpcap 的内容)。
  • 当应用程序需要启动特权 exe 时,它​​会创建一个授权引用并检查用户是否可以授权(称为预授权),并将对授权的外部引用传递给特权 exe。
  • 当它第一次启动时,特权 exe 在尝试执行特权操作之前再次获得授权。

要使上述工作正常,特权 exe 必须安装为 root 拥有并设置 setuid 位。您可以使用 package maker 来完成此操作,也可以创建 Apple 所说的 self repairing helper tool .这是一个检查它是否以 root 身份运行的工具,如果不是,则通过 AuthorizationExecuteWithPrivileges 调用自身。修复其 setuid 位和所有权。然后它为操作授权并执行操作。

如果您使用 self 修复工具,您可以将它与您的应用程序捆绑在一起并使用拖放安装过程。

我强烈建议您阅读整个 Authorization Programming Guide .它更详细地讨论了所有这些内容,并包含一些示例代码。

关于objective-c - 使用 root 权限部署应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4396249/

相关文章:

python - 导入错误 : No module named cryptography. hazmat.backends - Mac 上的 boxsdk

ios - 在两个现有 View 层之间插入模糊层

cocoa - 如何使菜单栏项显示表格中有多少行?

objective-c - 加载 webview 时显示 NSWindow

cocoa - NSNumberFormatter 删除尾随零

macos - 每毫秒更新一次 NSView 帧

objective-c - 使用发件人和对象发布通知

javascript - 在 Obj C 中,如何添加 SVG 蓝图图像并渲染 UIWebView 中的数据?

c++ - C++ 中的 Objective C "autorelease"——控制对象生命周期的标准方法?

ios - init中返回nil会导致内存泄漏吗?