![我如何以编程方式在 OS X 上“弹出”钥匙串?](https://linux22.com/image/1358806/%E6%88%91%E5%A6%82%E4%BD%95%E4%BB%A5%E7%BC%96%E7%A8%8B%E6%96%B9%E5%BC%8F%E5%9C%A8%20OS%20X%20%E4%B8%8A%E2%80%9C%E5%BC%B9%E5%87%BA%E2%80%9D%E9%92%A5%E5%8C%99%E4%B8%B2%EF%BC%9F.png)
我正在使用一个脚本弹出一个用作“身份”驱动器的小型 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