需要实现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>
评论
暂无评论~~