我有一个小型诊断 OSX 程序 - 一个小型菜单托盘应用程序 - 我需要将其提供给客户。该程序使用 dtrace。因此,它在其 MacOS 目录中有一个辅助可执行文件,其 suid 位设置和所有权设置为 root:wheel。助手的唯一作用是立即使用包含的 dtrace 脚本执行 exec() 到 dtrace。
我的问题是我想不出一个很好的方法来把它交给客户。天真地将其放入 .zip 存档中会消除所有特殊权限。
当我试图将它放入 DMG 时,root:wheel 所有权被重置为我的 (ted:staff)。我发现我应该在 DMG 上使用diskutil
toenableOwnership
来让它开始尊重文件对象所有权设置。所以现在我可以看到在 DMG 内部,我的帮助程序具有所需的 root:wheel 和 +s suid 权限集。
但是,现在,我发现当我将应用程序包从 DMG 拖放到桌面上时,权限会再次重置。此外,当我尝试从 DMG 运行应用程序时,它的行为就像帮助程序没有设置 suid 位一样。
稍微退后一步,我不明白为什么这应该起作用。允许开发人员分发具有这样设置的 suid 位的应用程序包似乎是一个令人讨厌且非常明显的安全漏洞。
那么这到底是怎么做的呢?我需要软件包安装程序吗?这会保留 suid 位吗?有人可以教我这应该如何工作吗?