Stay Hungry.Stay Foolish.
macOS特权进程创建和XPC调用

背景

需要实现UI进程和服务进程的分离,服务进程拥有root权限,用于执行高权限操作,UI进程只有用户权限

实现

这里使用https://github.com/LeungKinKeung/SMJobBlessDemo的代码 使用Security.framework和ServiceManagement.framework两个库,把需要root权限的操作封装成一个进程,作为项目的子Target,把该子进程注册LaunchdDaemon。

成为LaunchdDaemon后:

子进程会被放在/Library/PrivilegedHelperTools 相应的配置文件.plist被放在/Library/LaunchDaemons,Launchd加载该子进程会需要读取该配置文件

整体分为两步

step1: 使用SMJobBless安装部署特权子Target进程,依赖serviceManagement.framework

step2: 使用XPC进行进程间通信

为了保证两个进程通信安全,需要验证彼此的签名,修改签名脚本使用苹果官方demo的py脚本

修改签名,需要先build代码之后,找到build之后的app,然后执行下面命令将会自动修改plist里面的签名,如果正常,会输出xxx.plist updated

./SMJobBlessUtil.py setreq <path-to-SMJobBlessApp.app> SMJobBlessApp/SMJobBlessApp-Info.plist SMJobBlessHelper/SMJobBlessHelper-Info.plist

验证签名,如果执行之后什么也没有输出,则代表签名没有问题

./SMJobBlessUtil.py check <path-to-SMJobBlessApp.app>

参考

  1. https://blog.csdn.net/dianwang5346/article/details/101638720
  2. https://www.jianshu.com/p/7ee356bcedf8
自由转载-非商用-非衍生-保持署名(创意共享3.0许可证
评论

暂无评论~~