2011-06-01

秘密鍵を本体内からUSBメモリに移動した

職場の環境が変わったのでこれを機に以前から気になっていたことを試してみた。それは

秘密鍵を本体内に残さない

こと。

Zebedeeはそのまま移動するだけでよかった

トンネルを Zebedee で掘ってるんだけど、Zebedee に関しては

  • 実行バイナリが本体内
  • 設定ファイル、鍵などは USB メモリ

という組み合わせで普通に動いた。起動して detach してしまえば鍵や設定を入れた USB メモリは抜いてしまってもまったく問題ない。

OpenSSHはpermissionがキモ

もともと USB メモリに ssh の秘密鍵は入れてあった。しかしそれは

  • FAT でフォーマットしてある
  • 基本的に緊急時用のもので iniファイル版の putty と putty 用の鍵を用意
  • OpenSSH 用のものも入ってたけど入ってるだけ

という状態だった。今回はここにすでにある OpenSSH の秘密鍵を普段から利用するようにして本体内の秘密鍵は削除してしまおうという作戦。しかし、知ってたけど OpenSSH は鍵の permission をチェックしてくれるので、FAT 上の鍵は使えない。

MSのfilesystemは結局全滅

  • NTFS
  • exFAT 1
  • FAT32

を試したが、どれも OpenSSH の要求する permission を実現することができなかった。まぁ FAT がダメなのは予想通りなんだけど、NTFS もダメなんだね。

どうしたかというと、結局パーティションを分割して

  1. FAT で Windows 用のツールと鍵のパーティション
  2. ext で OpenSSH 鍵のパーティション

を用意した。

あ、Linux で使う気がないなら別に ext パーティションじゃなくて HFS+ でも UFS でもいいような気がするけど、たぶんそんな人いないよね?

MacFUSE + fuse-ext2でextパーティションを作る

ホストが Mac なのでそのままでは ext パーティションは作れない。そこで

の二つを利用して Mac 上で ext を読み書きできるようにした。

fuse-ext2の注意点

(OS や MacFUSE を含めた)バージョンの問題なのかもしれないけど、MacFUSE + fuse-ext2 の組み合わせでは

ext パーティションを自動で mount すると read only になってしまう

ようだ。今回は目的が OpenSSH の鍵を置くだけなので、普段は read only でまったく問題ない。

手作業でrwでmountする

とは言っても実際に鍵を置く作業をする際には read only では困る。そういうときには fuse-ext2 コマンドを mount コマンドに見立てて

$ fuse-ext2 -o rw+ device mountpoint

で mount してあれげば ok. めっちゃ EXPERIMENTAL って man には書いてあるけど。

MacFUSEの注意点

google code にある official version は 32bit で build されているので 64bit で動かしている場合は使えない。有志による 64bit build があるのでそちらを使う。

残念ながら unofficial version の置き場所は定まってないようなので、あっちこっちの blog などからたどって落として来る形になっているようだ。ちょっと怪しげな感じがするけど仕方ないのかなぁ。

なんでこんなことしたのか

もし秘密鍵を奪われた場合、ローカルでブルートフォースできまくるので、公開鍵暗号方式の接続もまったく安全とは言えなくなってしまう。

ということで銃と弾丸を別管理するように、本体と秘密鍵も別管理にできると良いと思い、やってみた。今のところ職場内のモラルやスキル的にこんな措置は必要ないんだけど、これを応用して、

  • 私物ノートの安全性向上
  • 共用アカウントの安全な運用

などを計っていきたいと思っている。

[2012-10-07 追記] もしLAN内の複数の端末で相互にログイン、認証したいので鍵をあちこちに置いておく必要がある、ということがあるなら「使い方を考え」た方がよいだろうし、それでもどうしても秘密鍵をどこかの端末に置いておく必要があるなら「エージェント転送(-A)」や「netcat mode」などが利用できる。

期待はしていなかったが、「netcat mode」では本来ログインできないはずの端末からログインできるようになる。エージェント転送はエージェント情報が途中の端末に残るので秘密鍵を残すのとどちらが危険か判断が必要になる。

  1. 10.6で対応しててパーティションの作成もできた 

About

例によって個人のなんちゃらです

Recent Posts

Categories

Tool 日々 Web Biz Net Apple MS ことば News Unix howto Food PHP Movie Edu Community Book Security Text TV Perl Ruby Music Pdoc 生き方 RDoc ViewCVS CVS Rsync Disk Mail FreeBSD Cygwin PDF Photo Zebedee Debian OSX Comic Cron Sysadmin Font Analog iCal Sunbird DNS Linux Wiki Emacs Thunderbird Sitecopy Terminal Drawing tDiary AppleScript Life Money Omni PukiWiki Xen XREA Zsh Screen CASL Firefox Fink zsh haXe Ecmascript PATH_INFO SQLite PEAR Lighttpd FastCGI Subversion au prototype.js jsUnit Apache Trac Template Java Rhino Mochikit Feed Bloglines CSS del.icio.us SBS qwikWeb gettext Ajax JSDoc Rails HTML CHM EPWING NDTP EB IE CLI ck ThinkPad Toy WSH RFC readline rlwrap ImageMagick epeg Frenzy sysprep Ubuntu MeCab DTP ERD DBMS eclipse Eclipse Awk RD Diigo XAMPP RubyGems PHPDoc iCab DOM YAML Camino Geekmonkey w3m Scheme Gauche Lisp JSAN Google VMware DSL SLAX Safari Markdown Textile IRC Jabber Fastladder MacPorts LLSpirit CPAN Mozilla Twitter OpenFL Rswatch ITS NTP GUI Pragger Yapra XML Mobile Git Study JSON VirtualBox Samba Pear Growl Mercurial Rack Capistrano Rake Win RSS Mechanize Sitemaps Android JavaScript Python RTM OOo iPod Yahoo Unicode Github iTunes God SBM friendfeed Friendfeed HokuUn Sinatra TDD Test Project Evernote iPad Geohash Location Map Search Simplenote Image WebKit RSpec Phone CSV WiMAX USB Chrome RubyKaigi RubyKaigi2011 Space CoffeeScript Nokogiri Hpricot Rubygems jQuery Node GTD CI UX Design VCS Kanazawa.rb Kindle Amazon Agile Vagrant Chef Windows Composer Dotenv PaaS Itamae SaaS Docker Swagger Grape WebAPI Microservices OmniAuth HTTP 分析基盤 CDN Terraform IaaS HCL Webpack Vue.js BigQuery Middleman CMS AWS PNG Laravel Selenium OAuth OpenAPI GitHub UML GCP TypeScript SQL Hanami Document SVG AsciiDoc Pandoc DocBook Develop Jekyll macOS Node.js Vite Heroku Transformer AI Data Cloud Wasm