Mac OS X 二进制应用程序(打包在 .app 中)如何在不要求密码的情况下更改系统配置?
Mac OS X how can binary application (packaged in .app) change System Configuration without asking for password?
我正在编写一个应用程序,运行ning 应该修改 SystemConfiguration 以设置系统范围的代理。
我知道使用 Apple 提供的 "Authorization Services" 框架可以做到这一点,但是我看到它一直要求输入用户密码以允许更改。
另一方面,我有第 3 方应用程序(不是我正在编写的应用程序)执行相同的操作,但不需要用户密码。该应用程序甚至不是用 Objective-C 编写的,而是用 FreePascal (FPC) 编写的。不幸的是,我没有此应用程序的源代码,无法了解它是如何实现这一技巧的。
我知道我应该能够通过应用程序随附的 Privileged Helper Tool(也许首先安装它 运行)或甚至Nastier 正在加载 kext。
但是我发现此应用程序没有执行上述任何操作。它只执行系统调用,不询问密码!我完全不明白他们是如何做到这一点的,我想找到一种方法来做到这一点。
所以问题是 - 如何通过应用程序在 Mac OS X 上完成 "no password asked" 更改系统配置?
PS:我手头的应用程序 运行s 是用户,不是 root。而且sudoers也没有任何修改。
这很愚蠢,但在连续 2 天搜索解决方案后,我发现既不需要特殊代码也不需要任何技巧。
这很容易通过将 setuid
位设置为需要升级权限的二进制文件并在执行需要权限的操作之前在代码中调用 setuid(0) 来轻松完成(不确定是否需要第二部分)。
相关链接:
- Apple documentation
- Related question on SO
PS:这基本上适用于任何类 Unix 系统(BSD、Linux Solaris 等),但有一个细节 - 这不适用于脚本(需要 hash-bang [的脚本) =11=] 以便执行解释器),除了 Solaris,它似乎工作得很好。
我正在编写一个应用程序,运行ning 应该修改 SystemConfiguration 以设置系统范围的代理。
我知道使用 Apple 提供的 "Authorization Services" 框架可以做到这一点,但是我看到它一直要求输入用户密码以允许更改。
另一方面,我有第 3 方应用程序(不是我正在编写的应用程序)执行相同的操作,但不需要用户密码。该应用程序甚至不是用 Objective-C 编写的,而是用 FreePascal (FPC) 编写的。不幸的是,我没有此应用程序的源代码,无法了解它是如何实现这一技巧的。
我知道我应该能够通过应用程序随附的 Privileged Helper Tool(也许首先安装它 运行)或甚至Nastier 正在加载 kext。
但是我发现此应用程序没有执行上述任何操作。它只执行系统调用,不询问密码!我完全不明白他们是如何做到这一点的,我想找到一种方法来做到这一点。
所以问题是 - 如何通过应用程序在 Mac OS X 上完成 "no password asked" 更改系统配置?
PS:我手头的应用程序 运行s 是用户,不是 root。而且sudoers也没有任何修改。
这很愚蠢,但在连续 2 天搜索解决方案后,我发现既不需要特殊代码也不需要任何技巧。
这很容易通过将 setuid
位设置为需要升级权限的二进制文件并在执行需要权限的操作之前在代码中调用 setuid(0) 来轻松完成(不确定是否需要第二部分)。
相关链接:
- Apple documentation
- Related question on SO
PS:这基本上适用于任何类 Unix 系统(BSD、Linux Solaris 等),但有一个细节 - 这不适用于脚本(需要 hash-bang [的脚本) =11=] 以便执行解释器),除了 Solaris,它似乎工作得很好。