如何使用通过DMG设置的suid位分发OSX程序?

时间:2014-04-14 20:39:47

标签: macos permissions dmg chown suid

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

我的问题是,我无法找到一个很好的方式来获得客户。天真地将它放入.zip存档中消除了所有特殊权限。

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

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

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

那怎么办呢?我需要包安装程序吗?这会保留suid位吗?有人可以告诉我这是假设的工作吗?

2 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:0)

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