推广 热搜: page  关键词  数据分析  服务  数据分析系统  搜索  获取  哪些  链接  搜索引擎 

[macOS]通过代码获取root权限的三种方式

   日期:2024-12-27     作者:35xkp    caijiyuan   评论:0    移动:https://sicmodule.kub2b.com/mobile/news/11115.html
核心提示:macOS有着严格的用户权限管理,一般情况下App都是运行在普通用户权限下,这个时候App是无法修改系统配置,也不能往用户目录以外

macOS有着严格的用户权限管理,一般情况下App都是运行在普通用户权限下,这个时候App是无法修改系统配置,也不能往用户目录以外的目录读写文件。有些操作下我们必须要获取root权限才能执行,比如:

1. 往系统目录安装可执行文件(比如:/usr/bin);

2. 设置App为系统启动项;

3. 修改系统设置;

 

目前主要有三种方式可以获取系统的root权限:

这个接口允许我们在执行命令行命令的时候弹出提示框,用户输入root密码之后能够以root的权限执行命令。

运行效果,提示"xxx 想要进行更改":

需要注意的是这个接口在macOS 10.7以后就是Deprecated了,苹果推荐使用另一种方式进行提权操作。

 

这是苹果用于替换第一种方式的提权方案,它需要我们创建一个命令行程序Helper设置为随launchd启动(拥有root权限),App再通过SMJobBless接口实现和Helper通信,从而将需要root权限执行的命令交由Helper执行:

Helper命令行工具:

1. 配置Info.plist

这里的SMAuthorizedClients是通过官方脚本生成:

2. Launchd.plist 用于配置Helper自启动:

3. 在主程序配置Helper安装(Build Phase):

通过以上3步就完成了Helper的配置,接下来看下如何和Helper通信:

1. Helper 初始化Listener,用于监听主App的连接请求:

其中HelperInterface是实现了协议XPCProtocol的类,就是真正实现功能的类型。

 

2. 主App通过SMJobBless和Helper通信:

XPCProtocol就是主App和Helper之间约定的API,主App创建XPCServiceConnection之后就可以直接通过该API实现接口调用:

XPCProtocol定义:

需要注意使用SMJobBless的方式实现提权需要对Helper程序进行签名,并且要求是正式的付费开发者账号签名才有效,免费的个人开发者账号即使签名成功了,Helper程序也无法被launchd正常启动。

 

这种方式只能同步执行命令,会阻塞当前App主线程(子线程无法实现密码输入),所以只适合那种可以在前台并且不耗时的命令行任务。

 

本文地址:https://sicmodule.kub2b.com/news/11115.html     企库往 https://sicmodule.kub2b.com/ , 查看更多

特别提示:本信息由相关用户自行提供,真实性未证实,仅供参考。请谨慎采用,风险自负。

 
 
更多>同类最新资讯
0相关评论

文章列表
相关文章
最新动态
推荐图文
最新资讯
点击排行
网站首页  |  关于我们  |  联系方式  |  使用协议  |  版权隐私  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报  |  鄂ICP备2020018471号