如何实现 Mac app 安装后以 root 启动一个 daemon?

2023-01-05 20:30:31 +08:00
 vczyh

作为 Apple 开发新手,想做一个 Mac App ,有个需求想咨询大家:

  1. 启动 daemon,类似这样,请问怎么实现。我目前只是知道将 .plist 文件放到 /Library/LaunchDaemons 下可以实现后台运行,但是这个需要 root 权限,请问 app 安装包权限有这么高吗

  2. 怎么在图片中的 允许在后台 列表添加我自己的 App ,目前看到了 SMAppService.daemon() 这个 API

  3. 我的 daemon 程序必须要求 root 账号,因为他会操作 Tun

1643 次点击
所在节点    macOS
11 条回复
SenLief
2023-01-06 00:35:33 +08:00
你可以在站里找一下 clash x pro 的开发者老哥,看看他愿不愿意传授几手,增强模式的 tun 就是 root 权限的。
zhaoxin
2023-01-06 06:28:12 +08:00
你的思路错了。不是你手动将 plist 放到那里的问题,是你需要创建启动程序。请参考我这篇博客。

https://zhaoxin.pro/15782726304661.html
vczyh
2023-01-06 09:52:59 +08:00
感谢 @zhaoxin

现在有了新的 API: https://developer.apple.com/documentation/servicemanagement/smappservice

请问如何以 root 运行后台 LoginItems 程序呢?
zhaoxin
2023-01-06 10:09:47 +08:00
@vczyh 你有仔细看我的博客吗?都和你说了你的思路是错的,根本不需要 root 权限。因为你调用系统提供的 API ,那个文件是系统自动生成的,不需要你手动放。
vczyh
2023-01-06 10:32:14 +08:00
@zhaoxin
我的理解是,最后系统会把你的应用程序拉起来对吧?那么这个程序的运行权限是 root 吗?
ihwbunny
2023-01-06 11:31:48 +08:00
我的理解“登录时启动”,是针对用户的,类似用户的 Agents ,而不是 daemons ,相当于 OP 主题中贴图的登录项中的“登录时打开”
daemons 运行于 root ,所以安装的时候也是需要 root 的。即便是全局的 Agents ,也是需要 root 的。

pkg 安装包可以设置需要 root 权限,这样在安装这个 pkg 的时候,系统会自动提示用户输入管理员账户,这样就可以拥有 root 权限了。
zhaoxin
2023-01-06 11:41:40 +08:00
@vczyh 当然不是 root 权限。只是用户权限。启动根本不需要 root ,应用都是运行在沙盒。
vczyh
2023-01-06 12:35:04 +08:00
@zhaoxin
感谢!
vczyh
2023-01-06 12:36:14 +08:00
@ihwbunny
能不能分享一下如何在 pkg 安装的时候索要 root 权限?
ihwbunny
2023-01-07 08:30:39 +08:00
@vczyh
你使用什么方式制作 pkg 的?
jdjingdian
2023-01-07 17:30:57 +08:00
刚好在研究类似的问题,我想做一些需要 sudo 执行的命令行工具,懒得手动输命令,是不是通过 SMAppService.daemon()这个 api 给 helper 赋予 root 权限,实际上 gui 还是用户权限,控制的时候要用 xpc 通讯呢?看低版本苹果官方的 SMJobless 有点头大,不知道新的 api 会不会简单一点

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/906843

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX