我在系统偏好设置中使用了预 Pane (带有授权锁)。我需要将我的首选项写入 /Library/Preferences
。但是,每当我尝试将首选项同步到 kCFPreferencesAnyUser
和 kCFPreferencesCurrentHost
时,即使我的锁已解锁,它也会失败。有没有办法将我的首选项写入 /Library/Preferences
而不创建帮助应用程序?我想避免这种情况,因为它是多余的。
Note that to modify “Any User” preferences requires root privileges (or Admin privileges prior to Mac OS X v10.6)—see Authorization Services Programming Guide.
我阅读了授权服务编程指南,它甚至没有提到首选项。
最佳答案
CFPreferences 使用进程的 euid 来确定“当前用户”的含义。您可以将 euid 设置为 0,但确实不建议这样做,因为这意味着如果您的整个程序包含漏洞,而不仅仅是一个微小的特定用途,那么它现在可能成为权限升级攻击的来源 helper 。这对您的用户不利,进而对您也不利。
此外,XPC 和 seteuid() 并不总是能很好地发挥作用,并且 CFPreferences 使用 XPC。我相信,从 euid 0 切换到非 0 应该可行,但我不会指望其他方向有效。
关于objective-c - CFP 引用/库/首选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9454957/