1

我有一个小型诊断 OSX 程序 - 一个小型菜单托盘应用程序 - 我需要将其提供给客户。该程序使用 dtrace。因此,它在其 MacOS 目录中有一个辅助可执行文件,其 suid 位设置和所有权设置为 root:wheel。助手的唯一作用是立即使用包含的 dtrace 脚本执行 exec() 到 dtrace。

我的问题是我想不出一个很好的方法来把它交给客户。天真地将其放入 .zip 存档中会消除所有特殊权限。

当我试图将它放入 DMG 时,root:wheel 所有权被重置为我的 (ted:staff)。我发现我应该在 DMG 上使用diskutiltoenableOwnership来让它开始尊重文件对象所有权设置。所以现在我可以看到在 DMG 内部,我的帮助程序具有所需的 root:wheel 和 +s suid 权限集。

但是,现在,我发现当我将应用程序包从 DMG 拖放到桌面上时,权限会再次重置。此外,当我尝试从 DMG 运行应用程序时,它的行为就像帮助程序没有设置 suid 位一样。

稍微退后一步,我不明白为什么这应该起作用。允许开发人员分发具有这样设置的 suid 位的应用程序包似乎是一个令人讨厌且非常明显的安全漏洞。

那么这到底是怎么做的呢?我需要软件包安装程序吗?这会保留 suid 位吗?有人可以教我这应该如何工作吗?

4

2 回答 2

2

你是对的(如果有一种简单的方法可以做到这一点)这将是一个令人讨厌的安全漏洞。如果不经过一些管理员授权步骤,您将永远无法创建/安装 setuid root 可执行文件。实际上,您甚至不应该能够创建/安装所有权设置为您自己以外的任何用户的文件。

(实际上,在 10.9 中有一个例外:App Store 将允许您在没有管理员权限的情况下安装应用程序。但这被认为是相对安全的,因为 Apple 会在应用程序被允许进入商店之前对其进行审查。)

执行此操作的“正确”方法是使用软件包安装程序。它可以设置为请求安装的管理员授权,并使用它来安装具有您想要的任何所有权和权限的文件(包括 setuid 位)。

于 2014-04-14T21:11:42.300 回答
0

也许使用.tar文件会起作用。它们非常适合保留所有 UNIX 特定的包袱,例如附加到其中的文件夹和文件的所有权。

于 2016-06-09T01:58:40.610 回答