macOS 下修改代理服务器是通过 SystemConfiguration 这个系统库实现的,应该是需要高权限的。
用户空间 APP 内的提权方式一般有两种,一种是随用随授权,比如每次设置系统代理的时候都需要提示用户授权,适用于提权操作比较少的场景。
还有一种是 Privileged Helper 方式,简单来说就是 APP 在首次打开的时候提示用户授权安装一个 helper 程序,这个 helper 本质上是由 launchd 管理的一个拥有高权限的 XPC Service 。这样只需要一次授权安装之后,用户空间的 APP 就可以通过 XPC 这种进程间通信的方式间接的让 helper 去做高权限操作。
Apple 对于提权的文档:
https://developer.apple.com/library/archive/documentation/Security/Conceptual/SecureCodingGuide/Articles/AccessControl.html具体示例可以参考 macOS 下的各种 GUI 翻墙工具,比如 ClashX 、V2rayU 之类的,它们都会在首次打开的时候去安装一个 helper 。