Develop and Download Open Source Software

OpenSource Downloads

7-Zip  (4,208)  
HandBrake Japanese Language Version  (3,353)  
CrystalDiskInfo  (1,743)  
CotEditor  (1,120)  
CrystalDiskMark  (866)  
Boookends  (788)  
SMPlayer  (642)  
えこでこツール  (599)  
Tera Term  (595)  
10  FFFTP  (579)  
11  Cabos  (530)  
12  BathyScaphe  (494)  
13  ffdshow  (481)  
14  MergeDoc  (464)  
15  ギコナビ  (438)  
More >>

最近ブックマークされた記事

コマンドライン版パスワード・ロッカーの作り方

2007年03月20日 10:07 Duane-Odom(2007年3月16日(金))
 ご多分に漏れず、私もパスワードが多すぎて覚えきれない。そこで、dialogGnuPG(GNU Privacy Guard)を使って、パスワードを整理・保管するための簡易パスワード・ロッカー・スクリプトを作ってみた。はじめにマスター・パスワードを尋ねるダイアログ・ボックスを表示し、そこで入力されたパスワードを使ってパスワード・ファイルを復号しテキスト・エディターで開く。ユーザーがエディターを閉じたらパスワード・ファイルを再び暗号化する、というスクリプトだ。

 dialogというのはテキスト・ベースのメッセージと入力ボックスを表示するncursesベースのユーティリティーだ。GnuPGはOpenPGP規格のフリー実装で、どちらもDebianベース・システム上でバイナリー・パッケージとして入手可能である。

 さて、何はともあれ、暗号化キーがなければ始まらない。そこで、コマンド「gpg --gen-key」を実行すると、生成するキーの種類を尋ねるプロンプトが表示された。選択肢には「sign only」(署名のみ)という注記のあるものもあるが、今はデータを暗号化するためのキーが必要なので「DSA and Elgamal」(「sign only」の注記はない)を選んだ。この後、質問がいくつか続いたが、重要なのは「Real Name」に対する入力だ。これは暗号化する際に使うので、覚えておくこと。

 暗号化キーの準備ができたので、次にパスワード・ファイルを暗号化する。そこで、URLとパスワードを含むファイルを作って「paswords」という名前で保存し、コマンド「gpg -e -r "Duane Odom" passwords」を実行した。このコマンドは、パスワード・ファイルを「Duane Odom」(暗号化キーを生成する際に「Real Name」として入力したもの)宛に暗号化し、passwords.gpgというファイルを作る。そして忘れずに、平文のパスワード・ファイルを削除した。

 これで、GnuPGキーと暗号化パスワード・ファイルの用意ができたので、いよいよパスワード・ロッカー・スクリプトの作成に取りかかる。下のコードはその冒頭部分だ。1行目はtempfileコマンドを使って適切な一時ファイル名を生成している。2行目は、スクリプトの終了の仕方に関わらず、この一時ファイルが必ず削除されるようにする仕掛けだ。3行目は、dialogコマンドを使ってユーザーにGnuPGパスワードを尋ね、その入力を標準エラー出力にリダイレクトして、先ほど作っておいた一時ファイルに書き出す。ユーザーが「Ok」ボタンまたは「Cancel」ボタンのいずれを押したか、あるいは異常が発生したかは、戻り値で判断できる。「0」は「Ok」ボタンの押下、「1」は「Cancel」ボタンの押下、「-1」は異常の発生または「Esc」キーの押下を意味する(dialogコマンドのmanページにあるように、ほとんどのシェル・スクリプトは-1と255を区別しない。そこで、このスクリプトでは「-1」ではなく、より標準的な「255」を使っている)。

TEMPFILE=`tempfile 2>/dev/null` || TEMPFILE=/tmp/`basename $0`.tmp
trap "rm -f $TEMPFILE" 0 1 2 5 15
dialog --backtitle "Password Database" --title "Master Password" --clear --insecure --passwordbox "Enter the Password Database master password." 10 51 2> $TEMPFILE

 次に重要なのはパスワード・ファイルを復号するところで、コードは次の通り。catコマンドを使って、ファイル中のパスワードをgpgに流し込んでいる。パラメーター--passphrase-fd 0は、パスワードが標準入力で与えられることを意味する。

cat $TEMPFILE | gpg -d -r "$KEY_RECIPIENT_NAME" -o $PASSWD_LIST_UNENCRYPTED --passphrase-fd 0 $PASSWD_LIST &> /dev/null

 最後に、復号したパスワード・ファイルをユーザーのデフォルト・エディターで開く。そして、エディターが終了する(用が済んでユーザーがエディターを閉じる)のを待ち、終了したらパスワードを再度暗号化し、平文のファイルを削除する。

$EDITOR $PASSWD_LIST_UNENCRYPTED 2> /dev/null; gpg -e -r "$KEY_RECIPIENT_NAME" -o $PASSWD_LIST $PASSWD_LIST_UNENCRYPTED; rm $PASSWD_LIST_UNENCRYPTED;;

 このスクリプトは便利に使える。というのは、(ちょっと変更すれば)文書や画像やスライドショーなどを暗号化して保存しつつ、編集も簡単にできるからだ。暗号化したいファイルがたくさんある場合は、Truecrypt翻訳記事)を使ってファイル内に仮想暗号化ディスクを作り、本当のディスクとしてマウントする方法もある。

 ところで、他人が作ったスクリプトを盲目的に信用してはならない。それがセキュリティーに関するスクリプトなら、なおさらだ。いつもやっているように、gpgコマンドとdialogコマンドのmanページを読み確認すること。

NewsForge.com 原文
最終更新:2007年07月01日 19:05