我使用NameAndPassword授权插件通过OS X锁定屏幕登录(插件的固定版本,因为原来是坏的)。我需要它能够以某种方式访问存储的密码,目前我正试图通过使用钥匙链来实现这一点。
我设法创建了钥匙链,并在里面保存了一些密码,以及访问密码所需的ACL,而无需提示用户。添加到ACL的任何应用程序都可以正常工作,没有提示,但是当我尝试使用此NameAndPassword授权插件访问钥匙链时,我在调用SecKeychainFindGenericPassword
以获取密码时获得-25293 The user name or passphrase you entered is not correct
错误。
我尝试将/Library/Security/SecurityAgentPlugins/NameAndPassword.bundle
包和/Library/Security/SecurityAgentPlugins/NameAndPassword.bundle/Contents/MacOS/NameAndPassword
可执行文件本身添加到ACL,但错误总是相同的。
我相信这可能是由于这个插件是作为另一个用户运行的(或者根本没有用户)。我怎么做才能消除这个错误呢?或者这是不可能的?在这种情况下,我应该如何存储和访问密码从这个插件,当它不能访问主目录?我已经纠结了好几个星期了
检查是否更改了插件包的所有权为root:wheel使用这个命令:
sudo chown -R root:wheel /Library/Security/SecurityAgentPlugins/NameAndPassword.bundle
插件可能需要配置为特权以访问存储钥匙链的文件系统位置。
如果您需要访问主目录,您的机制可能需要在HomeDirMechanism之后运行。
为了从钥匙链中读取,您需要先解锁它。对于默认的登录密钥链,您通常可以使用登录窗口中的密码解锁它,因为默认情况下这与登录密码保持同步。
你需要指定你从哪个keychain读取,否则它会尝试使用root用户的默认keychain,而这个默认keychain可能不存在。
苹果的技术说明涵盖了很多关于这个话题的内容。https://developer.apple.com/library/content/technotes/tn2228/_index.html