2008年5月20日火曜日

ubuntuで暗号化ファイルシステム、TrueCryptを試してみた

linux では暗号化ファイルシステムがけっこいいろいろあって、よりどりみどりです。
そのなかでも TrueCrypet は、
  • クロスプラットフォーム
    WindowsでもlinuxでもMacでも使える。
  • 隠し属性の暗号化ボリュームを作れる
といった特徴があり、特にWindowsとUSBメモリでデータのやり取りをしている人には打って付けでしょう。
 隠し属性については、暗号化したボリュームのなかに隠し属性の暗号ボリュームを潜ませることができます。そしてこの隠蔽した暗号ボリュームを検出することは不可能です。
 このことは、例えばこの記事、
米国税関が新制度を近くスタート、入国者が所持するPCのデータを丸ごとコピー
のように暗号化フォルダのパスワードを言わざるをえない場合でも、ダミーのほうを教えて、大事な隠し暗号化フォルダの存在には気づかれずに済むといったメリットがあります。

もちろんメリットばかりでなく、いろいろと使い勝手の悪い部分もあって、
  • linux版では日本語化されていない
    Windows版では日本語ランゲージパックを入れれば、日本語化出来る
  • CUIで使うときは、optionの先頭に -t optionを付けないといけない
  • manドキュメントがなくなった
  • オープンソースだがライセンスが独自
  • 現在のVer5だとlinuxで隠し属性のボリュームが作れない
    Ability to create hidden volumes on Mac OS X and Linux


前書きはこんな感じで実際に使ってみます。

インストール


http://www.truecrypt.org/downloads.php から ubuntu 用のパッケージをダウンロードしてきます。落したら、
tar zxvf truecrypt-5.1a-ubuntu-x86.tar.gz
cd truecrypt-5.1a
sudo dpkg -i truecrypt_5.1a-0_i386.deb
としてインストールします。

使い方


 暗号化ボリュームは、ハードディスクのパーティション丸ごと一つでもいいし、ファイルでもかまいません。ファイルの場合はそのファイルが暗号化ボリュームとしてマウントします。
 ここではお試しに使ってみるので、foobar.tc というファイルを作って、~/crypt にマウントしてみます。
truecrypt -t -c
とすると、
Volume type:
1) Normal
2) Hidden
Select [1]:
ノーマルか隠し属性か聞いてきます。隠しは非対応なので、ノーマルを選択します。
Enter volume path:
ボリュームパスを聞いてきますので、foobar.tc と入れます。
Enter volume size (sizeK/size[M]/sizeG):
ボリュームサイズを聞いてくるので、適当に入れます。
Encryption algorithm:
1) AES
2) Serpent
3) Twofish
4) AES-Twofish
5) AES-Twofish-Serpent
6) Serpent-AES
7) Serpent-Twofish-AES
8) Twofish-Serpent
Select [1]:
暗号アルゴリズムを聞いてきます。デフォルトでいいでしょう。
Hash algorithm:
1) RIPEMD-160
2) SHA-512
3) Whirlpool
Select [1]:
ハッシュアルゴリズムを聞いてきます。おなじくデフォルトにします。
Filesystem:
1) FAT
2) None
Select [1]:
ファイルシステムを聞いてきます。あとからフォーマットすることもできます。ここもデフォルトで。
Enter password:
パスワードを聞いてきますので、なにか適当なパスワードを入力します。20文字以下だと警告してきます。
WARNING: Short passwords are easy to crack using brute force techniques!

We recommend choosing a password consisting of more than 20 characters. Are you sure you want to use a short password? (y=Yes/n=No) [No]:
まあ、テストなので20文字以下でもOKなのでYesと解答します。
再度確認のためにパスワードを聞いてきますので、入力します。
Enter keyfile path [none]:
鍵ファイルの場所を聞いてきます。使いませんのでそのまま空欄でエンター。
Please type at least 320 randomly chosen characters and then press Enter:
鍵を生成するためのランダムな文字列の入力を求められす。320文字も適当にキーボードをがちゃがちゃ叩きます。疲れます・・・
Done: 100.000% Speed: 7.7 MB/s Left: 0 s
The TrueCrypt volume has been successfully created.
無事暗号化ボリュームが作成されました。

マウントしてみる

~/crypt にマウントしてみます。
$ truecrypt -t foobar.tc ~/crypt
  Enter password for /home/yama/foobar.tc:
  Protect hidden volume? (y=Yes/n=No) [No]:
  Enter system administrator password:
foobar.tc のパスワードは? 隠し属性があるかどうか? rootのパスワードは? など聞かれますので、順番に答えていけば無事マウントされます。

作成した暗号化ボリュームは、
~$ truecrypt -t -v -l foobar.tc
Slot: 1
Volume: /home/hoge/foobar.tc
Virtual Device: /dev/loop1
Mount Directory: /home/hoge/crypt
Size: 32.0 MB
Type: Normal
Read-Only: No
Hidden Volume Protected: No
Encryption Algorithm: AES
Key Size: 256 bits
Block Size: 128 bits
Mode of Operation: XTS
PKCS-5 PRF: HMAC-RIPEMD-160
PKCS-5 Iteration Count: 2000
Volume Created: 2008年05月20日 18時57分38秒
Header Last Modified: 2008年05月20日 18時57分38秒
Data Read since Mount: 191 KB
Data Written since Mount: 0 B
としてプロパティが閲覧できます。

アンマウント

truecrypt -t -d foobar.tc
としてアンマウントします。

GUIで使う


 Vre5 からlinuxでもGUIで使えるようになりました。たんに truecrypt を実行するだけで常駐で起動します。
 manページがなくなってしまったみたいで、代わりに、/usr/share/truecrypt/doc/TrueCrypt User Guide.pdf が入っています。いちいちPDFを見ろということですね。面倒くさいですね。
 当然PDFの中身は英語です。ですが、ランゲージパックの中にこのPDFを和訳したものが同梱されていますので、GUIで使いたい方は是非こちらを見ることをお勧めします。

参考

2008年5月19日月曜日

ubuntuでHDDの温度を計る。

これから暑い季節を迎えるにあたり、ハードディスクの温度を測定してみます。

インストール

sudo apt-get install hddtemp
インストール時に
  • sguidをセットするか?(rootユーザ以外でも実行できるようにするか?)
  • syslog にログを残すか?
  • 残すなら記録間隔を何秒にするか?
  • デーモンとして起動するか?
などを聞いてきます。聞いてこなくても後から、
sudo dpkg-reconfigure hddtemp
とすれば、いつでも再設定できます。

使ってみる


 さっそくHDDの温度を測ってみましょう。ただし古いHDDなどHDD自体にセンサーがないものは無理です。USB接続のHDDも無理でしょう。
$ hddtemp /dev/sd?

/dev/sda: HDS722512VLAT80: 44°C
/dev/sdb: ST380020A: 47°C
/dev/sdc: ST3120023A: 47°C
とでました。まあ、窒息ケースでリムーバブルケースに入れて、しかも4cmファンが壊れているので、温度が高いです・・・なんとかしようorz

GUIでも見られるように


 パネルの上で右クリックし、パネルの追加をクリックします。その中から、hardware sensor monitor を選択して追加ボタンを押せば、パネル上に追加されます。
 なければ、
sudo apt-get install sensors-applet
とすればインストールされます。

2008年5月14日水曜日

ubuntuのSSHに脆弱性

Debianの過去のパッチによるバグの影響でDebian系、つまりubuntuにも重大な脆弱性が発見されました。
この脆弱性は、opensshによる鍵の生成で予測可能な鍵ペアが生成されてしまうというもので、辞書攻撃によって侵入されるリスクが大変大きいものとなっています。

さっそく
wget http://security.debian.org/project/extra/dowkd/dowkd.pl.gz
wget http://security.debian.org/project/extra/dowkd/dowkd.pl.gz.asc
gpg --keyserver subkeys.pgp.net --recv-keys 02D524BE
gpg --verify dowkd.pl.gz.asc
gunzip dowkd.pl.gz
としてチェックツールをダウンロードし、鍵の検査。
./dowkd.pl host localhost
及び、
./dowkd.pl user ユーザ名
として、weak key と表示されたら鍵を作り直しましょう。
その前にopenssh系パッケージのアップデートも忘れずに。

詳しくはURL参照。



20080515:追記:


  • その後のアップデートでopenssh-blacklistパッケージが追加されました。
    脆弱な鍵は自動的に拒絶されるようになりました。出来る範囲で。
  • ssh-vulnkey コマンドが追加されました。
    このコマンドで鍵の脆弱性を確かめることが出来ます。
    sudo ssh-vulnkey -a
    とすればすべての鍵を検査してくれます。
  • 参照
    http://www.debian.org/security/2008/dsa-1576

2008年5月10日土曜日

ubuntuでもNTFSの圧縮フォルダ機能を

WindowsのNTFSはよく出来ていて、銀行のATMのHDDなんかもNTFSが使われたり、世界中で一番使われているファイルシステムなわけで信頼性が高かったりします。そのぶん読み書きがあまり速くなく、断片化もしやすいといた欠点もありますけどね。

 で、NTFSの便利な機能として、透過的に扱えるフォルダの圧縮機能があります。2chの過去ログを圧縮するなど用途によってはこの圧縮機能は便利なのですが、残念ながらubuntuの標準ファイルシステムである ext3 には圧縮機能がありません。
 まーいまどき500GBのHDDが七千円で買えちゃうんですから、ストレージ買えってことになっちゃうのかもしれませんが、でもねえ、4Gもの過去ログが半分のサイズになんかNTFSでなっているのをみると、ubuntuでもやりたくなるわけで・・・

ということで以下実験メモ。
残念ながらlinuxではあまり圧縮ファイルシステムは不毛なようです。ROMなど組み込み系で使用を前途にした読取専用ファイルシステムは結構あるんですけどねえ。
 色々調べた結果、こちらの記事を参考に FUSE を利用した LZOlayer ファイルシステム を試用してみることにしました。といってもやっていることはそのままなんですけどねw
LZOlayerFS の特徴はFUSE を利用したユーザランドで動く透過的な圧縮ファイルシステムです。圧縮アルゴリズムに lzo を採用し、高速な圧縮速度で通常のファイルシステムと違和感なく扱えます。
 lzo の圧縮速度についてはこちらのレポートが参考になります。

導入手順

LZOlayerFSをダウンロードし、ビルドします。あらかじめ開発環境と必要なライブラリを導入しておいて下さい。少なくてもfuse,zlib,lzo(liblzo2-dev) のライブラリが必要です。私の環境ではなぜか全部入っていましたw
wget http://north.one.pl/~kazik/pub/LZOlayer/LZOlayer_fs-20060306.tar.gz
tar zxvf LZOlayer_fs-20060306.tar.gz
cd LZOlayer_fs-20060306
make
sudo cp lzo_fs /usr/local/bin/
なのですが、そのままではエラーが出てコンパイルが通りませんので以下のように修正。

--- LZOlayer_fs.c.org
+++ LZOlayer_fs.c
@@ -7,13 +7,13 @@
Use it at your OWN RISK
Absolutely NO WARANTY
*/
+#define _LARGEFILE64_SOURCE
#define FUSE_USE_VERSION 22
#include <fuse.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
-#define __USE_LARGEFILE64
#include <fcntl.h>
#include <dirent.h>
#include <sys/types.h>
@@ -31,7 +31,7 @@
#define max_packets 2048
off_t block_size = 131072;
#define __LZOlayer_DEBUG 0
-#define VERSION "20060202-2"
+#define VERSION "20060306"

static char *srcPath;
static int zlibCompression = 0;
これで一応make通りました。出来た lzo_fs を~/bin なり /usr/local/bin なりにコピーしておいて下さい。

マウントしてみる

さっそく実験です。
まずはマウントポイントと、実際に圧縮されたファイルを格納するディレクトリを作成しておきます。
mkdir ~/lzo ~/lzo_compressed
さっそくマウント
lzo_fs ~/lzo_compressed ~/lzo -s

テスト

圧縮ディレクトリに2chのdatファイルを ~/lzo ディレクトリにコピーしてみます。datファイルのサイズは244Kバイト。
stat -c %s lzo/1208334590.dat
244031
stat -c %s lzo_compressed/1208334590.dat
112651
テキストファイルなので約半分に圧縮されてディスク上に格納されています。

アウンマウント

アウンマウントは、
fusermount -u ~/lzo


実際に使ってみて、普通に使えました。違和感なく。便利ですね。
ただ使用実績がないので信頼性は?ですけど。
大量のログファイルにHDDを占有されている人には一考の価値ありかも。