我如何以编程方式在 OS X 上“弹出”钥匙串?

我如何以编程方式在 OS X 上“弹出”钥匙串?

我正在使用一个脚本弹出一个用作“身份”驱动器的小型 USB 密钥,其中包含一些安全信息。值得注意的是,它上面有一个 OS X“钥匙串”文件,其中包含一些我更安全、更重要的密码(我愿意将这些密码提交给密码管理程序根本,但它们太重要了,不能留在我的电脑上或同步到 Dropbox。)

该 Keychain 文件从 Apple~/Library/Keychains/文件夹符号链接到我的这个密钥,比方说/Volumes/Key/SECURE.keychain。当我弹出磁盘时,此符号链接消失,并且显然无法在 Keychain Access 中访问该 Keychain:

缺少钥匙串图标

这一切都很好……只是我不能喷射无需退出 Mac 上的一半程序即可访问此磁盘。我不知道为什么,任何访问任何钥匙扣任何原因,打开(并保持打开状态).keychain系统知道的每个文件。例如,当我插入磁盘时,没有任何文件请求访问我的这个辅助安全钥匙串:

> lsof '/Volumes/Key/SECURE.keychain'
COMMAND    PID         USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
Spotify   2801 elliottcable  txt    REG    1,8    89096  319 /Volumes/Key/SECURE.keychain
syncdefau 4267 elliottcable  txt    REG    1,8    89096  319 /Volumes/Key/SECURE.keychain

我怎样才能安全地弹出此驱动器,而无需杀害每个打开该文件的进程?我能以某种方式弹出文件从流程、远程,还是类似这样的事情?

(相关:这是我目前不可接受的方法:https://github.com/elliottcable/System/blob/2a5917e/Dotfiles/profile#L73-L94

答案1

只有解锁的钥匙串才会阻止您卸载存储它们的卷。如果您锁定钥匙串,您将能够毫无问题地卸载。

要从 shell(脚本)执行此操作,请使用命令行工具security

security lock-keychain /Volumes/Key/SECURE.keychain

这将锁定钥匙串并允许您卸载卷(只要钥匙串访问未运行)。

答案2

我不知道为什么这些应用程序保留钥匙串,但你应该尝试使用以下方法强制弹出 USB 密钥:

diskutil unmountDisk force /Volumes/Key

没有任何问题(只要这些应用程序不应以任何方式使用该文件)。


PS:如果你不想每次都重新链接钥匙串,你可能需要将钥匙串的路径添加到

~/Library/Preferences/com.apple.security.plist

相关内容