首页 文章

使用来自守护程序的OSX系统密钥链

提问于
浏览
2

我有一个需要以root身份运行并由launchd启动的守护进程 . 这个守护进程需要存储一些用户提供的凭据,所以我使用SecKeychainOpen和类似的函数将它们写入System keychain .

我很确定,因为它以root身份运行,所以我必须使用系统密钥链(因为使用用户的登录密钥链是不正确的,因为这不像普通用户那样运行) .

我的安装程序在安装结束时使用launchctl将其加载到launchd中 . 问题是它直到重启后才真正启动 . 我在插件中将OnLOad设置为true,但似乎在使用系统钥匙串时我需要重新启动才能使用它 .

我想知道是否有人知道某种方式来解决这个问题,因为如果不需要重新启动,这将是一个更好的用户体验 . 所以要清楚,我可以使用launchd以编程方式从守护进程访问系统密钥链而无需重启吗?

感谢您的任何建议或想法 .

1 回答

  • 3

    因为我最终发现我的问题不是我认为的问题,我想我应该把解决方案放在这里 .

    事实证明(尽管我在一些网站上阅读过),在没有重启的情况下使用launchd以编程方式使用守护程序以编程方式访问System keychain是完全可以的 . 只需以正常方式加载plist(当然是root权限),一切正常 .

    我的问题是我的postinstall脚本从未运行过,在构建某些mac时实际上从未包含在我的.pkg安装程序中 . 显然,如果您没有安装PackageMaker.app,macports仍然会为您安装dmg,但安装程序是一个目录而不是正确的单个文件,它可能缺少某些部分(例如我的postinstall脚本) .

    可以在Apple Developer站点的Xcode AuxTools包中找到PackageMaker.app(然后需要将它放在/ Applications或macports可以找到的其他地方) .

相关问题