web-dev-qa-db-ja.com

OS Xでキーチェーンをプログラムで「イジェクト」するにはどうすればよいですか?

スクリプトを使用して、「ID」ドライブとして使用する小さなUSBキーを取り出しています。このキーには、安全な情報が含まれています。注目すべきことに、OS Xの「キーチェーン」ファイルがあります。このファイルには、私のより安全で重要なパスワード(パスワード管理プログラムにコミットしたいもの)が含まれています。 しかし、これは重要すぎて、コンピューターに座ったままにしたり、Dropboxに同期したりすることはできません。)

そのキーチェーンファイルは、Appleの~/Library/Keychains/フォルダから私のこのキー(たとえば、/Volumes/Key/SECURE.keychain)にシンボリックリンクされています。ディスクを取り出すと、このシンボリックリンクが消え、キーチェーンアクセス内でキーチェーンにアクセスできなくなります。

missing keychain icon

これはすべてうまくいっています…Macのプログラムの半分を終了せずにこのディスクをejectできないことを除いて。私が知ることができる正当な理由はありませんが、anyのキーチェーンにアクセスするすべてのアプリケーションany理由、システムが認識しているすべての.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

そのファイルを開いているすべてのプロセスをkillingせずに、このドライブを安全に排出するにはどうすればよいですか?どういうわけか、ファイルをプロセスから、リモートで、またはその性質のものから排出できますか?

(関連:これが私の現在の受け入れられないアプローチです: https://github.com/elliottcable/System/blob/2a5917e/Dotfiles/profile#L73-L94

4
ELLIOTTCABLE

ロック解除されたキーチェーンのみが、保存されているボリュームをアンマウントできなくなります。キーチェーンをロックすると、問題なくアンマウントできます。

シェル(スクリプト)からこれを行うには、コマンドラインツールsecurityを使用します。

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

これにより、キーチェーンがロックされ、ボリュームをアンマウントできるようになります(キーチェーンアクセスが実行されていない場合)。

2
Daniel Beck

これらのアプリがキーチェーンを保持する理由はわかりませんが、次の方法を使用してUSBキーを強制的に取り出す必要があります。

diskutil unmountDisk force /Volumes/Key

問題なく(それらのアプリケーションがそのファイルを使用してはならない限り)。


追伸:毎回キーチェーンを再リンクする価値がある場合は、キーチェーンのパスをに追加することをお勧めします

~/Library/Preferences/com.Apple.security.plist
0
dezzeus