Mac OS X如何在不询问密码的情况下更改系统配置二进制应用程序(打包在.app)?

时间:2015-12-04 07:54:45

标签: objective-c macos privileges

我正在编写一个应用程序,在运行时应修改SystemConfiguration以设置系统范围的代理。

我知道可以使用"授权服务" Apple提供的框架,但我发现它一直要求用户密码允许更改。

另一方面,我有第三方应用程序(不是我正在编写的应用程序),但它不需要用户密码。该应用程序甚至不是用Objective-C编写的,而是用FreePascal(FPC)编写的。不幸的是,我没有这个应用程序的源代码,看看它是如何做到的。

我知道我应该能够通过在应用程序中提供Privileged Helper Tool(并且可能在首次运行时安装它)或者甚至更糟糕并加载kext来实现相同的(没有sudo密码的系统配置更改)。

但是我看到这个应用程序都没有上面的内容。它只执行系统调用,没有密码问!我完全不知道他们是如何实现这一目标的,并希望找到一种方法来做同样的事情。

所以问题是 - 如何实现完整"没有密码问"使用应用程序更改Mac OS X上的系统配置?

PS:我手头的应用程序以用户身份运行,而不是root用户。而且也没有修改sudoers。

1 个答案:

答案 0 :(得分:1)

这很愚蠢,但在寻找解决方案2天后,我发现没有特殊代码,也没有任何技巧。

通过将setuid位设置为需要升级权限的二进制文件并在执行需要权限的操作之前调用代码中的setuid(0)(不确定是否需要第二部分),可以轻松完成此操作。

相关链接:

PS:这基本上适用于任何类Unix系统(BSD,Linux Solaris等),但有一个细节 - 这不适用于脚本(需要hash-bang #!以执行解释器的脚本)除了Solaris之外,它似乎工作正常。