Как я могу программно «извлечь» связку ключей в OS X?

762
ELLIOTTCABLE

Я использую скрипт для извлечения небольшого USB-ключа, который я использую в качестве «идентификационного» диска, который содержит некоторую защищенную информацию. Следует отметить, что в нем есть файл «связки ключей» OS X, в котором содержатся некоторые из моих более безопасных и важных паролей (те, которые я готов посвятить программе управления паролями вообще, но которые слишком важны, чтобы оставлять их в покое). на моих компьютерах или синхронизированы с Dropbox.)

Этот файл связки ключей имеет символическую ссылку из ~/Library/Keychains/папки Apple на этот мой ключ, скажем так /Volumes/Key/SECURE.keychain. Когда я извлекаю диск, эта символическая ссылка исчезает, и цепочка для ключей, очевидно, перестает быть доступной в рамках Keychain Access:

отсутствует значок брелка

Это все хорошо… за исключением того, что я не могу извлечь этот диск, не закрыв половину программ на моем 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 )

4

2 ответа на вопрос

2
Daniel Beck

Only unlocked keychains will prevent you from unmounting the volume they're stored on. If you lock the keychain, you'll be able to unmount without any problems.

To do this from a shell (script), use the command line tool security:

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

This will lock the keychain and allow you to unmount the volume (as long as Keychain Access isn't running).

0
dezzeus

I don't know why those apps retain the keychain, but you should try to force the ejection of the USB key using:

diskutil unmountDisk force /Volumes/Key 

Without any problem (as long as those application shouldn't use that file in any way).


P.S.: If you deserve from re-linking the keychain each time, you may want to add the path of the keychain to

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