TrueCrypt for Red Hat Enterprise Linux 4 (RHEL4)

Windows XP/2000/2003 と Linux で利用できる無料のオープンソースディスク暗号化ソフトウェア

TrueCrypt の特徴:

  • 仮想暗号化ディスクイメージファイルを作成することができ、通常のディスクとしてマウントすることができる。
  • ハードディスクパーティションやUSBメモリースティック、フロッピーディスクなどのデバイスを暗号化することができる。
  • “敵”があなたにパスワードを強制的に聞き出してきた場合に備えて、2レベルのもっともらしい否認能力を提供する:
    1. 隠しボリューム(詳細な情報は、ここで見つかるかもしれない)。
    2. TrueCrypt ボリュームは、確認されることがない。(TrueCrypt ボリュームは、ランダムなデータを区別されることができない)。
  • 複数の暗号化アルゴリズム: AES-256、Blowfish(448-bit key)、CAST5、Serpent(256-bit key)、Triple DES と Twofish(256ビットのキー)。カスケードしたものもある(例えばAES-Twofish-Serpent)。
  • 暗号化の基礎は、the Messes(E4M)2.02a のために1997年に考えられた。

ソフトウェアの特徴に関する更なる情報は、ドキュメンテーションを参照のこと。
TrueCrypt – Free Open-Source On-The-Fly Disk Encryption Software for Windows XP/2000 and Linux


Red Hat Enterprise Linux 4 のバイナリがない…

TrueCrypt – ダウンロードページ では、以下のバイナリコードが提供されている。

  • Windows XP/2000/2003
  • Fedora Core 4 x86
  • OpenSuSE 10.0 x86
  • SuSE 9.2 x86
  • SuSE 9.3 x86
  • Ubuntu 5.04 x86
  • Ubuntu 5.10 x86
  • Ubuntu 5.10 x86-64

・・・ RHEL4 用がないやんけ! ッテナンデヤネン┌(`Д´)ノ)゚∀゚ )

“Fedora Core 4 x86” のコードが流用できないかなぁ~と、、、

$ tar zxvf truecrypt-4.0-fedora-core-4-x86.tar.gz
truecrypt-4.0/
truecrypt-4.0/truecrypt-4.0-0.i386.rpm
truecrypt-4.0/Readme.txt
truecrypt-4.0/License.txt
$ cd truecrypt-4.0/
$ rpm -qps truecrypt-4.0-0.i386.rpm
normal /lib/modules/2.6.11-1.1369_FC4/extra/truecrypt.ko
normal /usr/bin/truecrypt
normal /usr/share/man/man1/truecrypt.1.gz

、、、あ、残念、ドライバがいるのね。さすがに FC4 と RHEL4 ではカーネルのバージョンが違うので無理だろう。 (´・ω・`)ガッカリ・・・

というわけで素直にソースからコンパイルすることにする。


Red Hat Enterprise Linux 4 でコンパイル

TrueCrypt – ダウンロードページ から “truecrypt-4.0-source-code.tar.gz” をダウンロードして、configure と言いたかったがなかったので、ドキュメント(Readme.txt)を読んでみる。

$ tar zxf truecrypt-4.0-source-code.tar.gz
$ cd truecrypt-4.0/
$ less Readme.txt
Instructions for Building TrueCrypt for Linux:
———————————————-

To build TrueCrypt execute the following commands:

cd Linux
./build.sh

The build script will first verify requirements for building TrueCrypt.
You may be prompted for additional information, which cannot be determined
automatically. Then the building process will start.

ふむふむ、これを見る限り、Linux ディレクトリで build.sh を動かせばよいらしい。

$ cd Linux/
$ ./build.sh
Checking build requirements…
Error: Administrator (root) privileges required

root じゃないとダメぽ。

# ./build.sh
Checking build requirements…
Linux kernel (2.6.9-22.EL) source directory [/usr/src/linux]:

む、カーネルソースがいるらしい。 RHEL4 では、”/usr/src/kernels/2.6.9-22.0.1.EL-i686″かな?

Linux kernel (2.6.9-22.EL) source directory [/usr/src/linux]: /usr/src/kernels/2.6.9-22.0.1.EL-i686

(コンパイル中、、、省略)

make[2]: *** [/home/—–/src/truecrypt-4.0/Linux/Kernel/Dm-target.o] Error 1
make[1]: *** [_module_/home/—–/src/truecrypt-4.0/Linux/Kernel] Error 2
make: *** [truecrypt] Error 2
Error: Failed to build kernel module

やはりそう簡単にはコンパイルできんらしい。世の中そんなに甘くないということか。 ( ゚Д゚)マンドクセー

エラーログからつぶしていくか、、、

Building kernel module… /home/—–/src/truecrypt-4.0/Linux/Kernel/Dm-target.c:16:16: dm.h: No such file or directory

ってのがまず目に付くね。”dm.h”とはなんぞや?わからないので、Google様に聞いてみよう
“linux-2.5.72/drivers/md/dm.h”、”linux-2.6.6-rc2-udm1-original/drivers/md/dm.h”、、、ふむふむ、どうも Linux カーネルソースに含まれているらしい。

僕の Linux には入ってないのかな?

find /usr/src/kernels/2.6.9-22.0.1.EL-i686 -name dm.h
find /usr/include -name dm.h

あ、ないね。。。どうして?

あ!!そういえば、FC3 以降は、kernel-source がなくなった関係で、/usr/src/kernels は役立たずだったっけな? RHEL4 で kernel をいぢくる を参考にちゃんとしたカーネルソースを呼び出す。

$ rpm -Uvh kernel-2.6.9-22.0.1.EL.src.rpm
$ cd /home/—–/src/rpms/SPEC
$ rpmbuild -bp –target i686 kernel-2.6.spec

これで、/home/—–/src/rpms/BUILD にカーネルソースが展開される。

※ ここでは利便上、一般ユーザーの権限で rpmbuild の設定がしてあるので、/usr/src/redhat は使わない。

今度は、/usr/src/kernels/2.6.9-22.0.1.EL-i686 ではなく、/home/—–/src/rpms/BUILD/kernel-2.6.9/linux-2.6.9 を指定してみよう。

$ cd /home/—–/src/truecrypt-4.0/Linux
# ./build.sh
Checking build requirements…
Linux kernel (2.6.9-22.EL) source directory [/usr/src/linux]: /home/—–/src/rpms/BUILD/kernel-2.6.9/linux-2.6.9

(コンパイル中、、、省略)

make[2]: *** [/home/—–/src/truecrypt-4.0/Linux/Kernel/../../Crypto/Aescrypt.o] Error 1
make[1]: *** [_module_/home/—–/src/truecrypt-4.0/Linux/Kernel] Error 2
make: *** [truecrypt] Error 2
Error: Failed to build kernel module

むむむ?頑固者だなぁ?

Building kernel module… In file included from /home/—–/src/truecrypt-4.0/Linux/Kernel/../../Crypto/Aesopt.h:159, from /home/—–/src/truecrypt-4.0/Linux/Kernel/../../Crypto/Aescrypt.c:38:
/home/—–/src/truecrypt-4.0/Linux/Kernel/../../Common/Endian.h:22:29: asm/byteorder.h: No such file or directory

これかな? “Aescrypt.c” → “Aesopt.h” → “Endian.h” → “asm/byteorder.h” って連鎖が続いてるんだけど、”asm/byteorder.h” がねーって言ってる。

$ find /
home/—–/src/rpms/BUILD/kernel-2.6.9/linux-2.6.9 -name byteorder.h
/home/—–/src/rpms/BUILD/kernel-2.6.9/linux-2.6.9/include/asm-x86_64/byteorder.h
/home/—–/src/rpms/BUILD/kernel-2.6.9/linux-2.6.9/include/asm-v850/byteorder.h
/home/—–/src/rpms/BUILD/kernel-2.6.9/linux-2.6.9/include/asm-sparc/byteorder.h
/home/—–/src/rpms/BUILD/kernel-2.6.9/linux-2.6.9/include/asm-sh64/byteorder.h
/home/—–/src/rpms/BUILD/kernel-2.6.9/linux-2.6.9/include/asm-parisc/byteorder.h
/home/—–/src/rpms/BUILD/kernel-2.6.9/linux-2.6.9/include/asm-s390/byteorder.h
/home/—–/src/rpms/BUILD/kernel-2.6.9/linux-2.6.9/include/asm-sparc64/byteorder.h
/home/—–/src/rpms/BUILD/kernel-2.6.9/linux-2.6.9/include/asm-sh/byteorder.h
/home/—–/src/rpms/BUILD/kernel-2.6.9/linux-2.6.9/include/asm-mips/byteorder.h
/home/—–/src/rpms/BUILD/kernel-2.6.9/linux-2.6.9/include/asm-i386/byteorder.h
/home/—–/src/rpms/BUILD/kernel-2.6.9/linux-2.6.9/include/asm-arm/byteorder.h
/home/—–/src/rpms/BUILD/kernel-2.6.9/linux-2.6.9/include/asm-ppc64/byteorder.h
/home/—–/src/rpms/BUILD/kernel-2.6.9/linux-2.6.9/include/asm-alpha/byteorder.h
/home/—–/src/rpms/BUILD/kernel-2.6.9/linux-2.6.9/include/asm-um/byteorder.h
/home/—–/src/rpms/BUILD/kernel-2.6.9/linux-2.6.9/include/asm-h8300/byteorder.h
/home/—–/src/rpms/BUILD/kernel-2.6.9/linux-2.6.9/include/asm-m68knommu/byteorder.h
/home/—–/src/rpms/BUILD/kernel-2.6.9/linux-2.6.9/include/asm-arm26/byteorder.h
/home/—–/src/rpms/BUILD/kernel-2.6.9/linux-2.6.9/include/asm-ppc/byteorder.h
/home/—–/src/rpms/BUILD/kernel-2.6.9/linux-2.6.9/include/asm-m32r/byteorder.h
/home/—–/src/rpms/BUILD/kernel-2.6.9/linux-2.6.9/include/asm-m68k/byteorder.h
/home/—–/src/rpms/BUILD/kernel-2.6.9/linux-2.6.9/include/asm-ia64/byteorder.h
/home/—–/src/rpms/BUILD/kernel-2.6.9/linux-2.6.9/include/asm-cris/arch-v10/byteorder.h
/home/—–/src/rpms/BUILD/kernel-2.6.9/linux-2.6.9/include/asm-cris/byteorder.h

あーほんとだー、”asm-*” ってディレクトリはあるけど、肝心の “asm/”がない!

ないものは作ってしまえ!! おそらく i686 環境で必要なのは、”asm-i386″ だろう。

$ cd /home/—–/src/rpms/BUILD/kernel-2.6.9/linux-2.6.9/include/
$ ln -s asm-i386 asm

$ cd /home/—–/src/truecrypt-4.0/Linux
# ./build.sh
Checking build requirements…
Linux kernel (2.6.9-22.EL) source directory [/usr/src/linux]: /home/—–/src/rpms/BUILD/kernel-2.6.9/linux-2.6.9

(コンパイル中、、、省略)

make[2]: *** [/home/—–/src/truecrypt-4.0/Linux/Kernel/Dm-target.o] Error 1
make[1]: *** [_module_/home/—–/src/truecrypt-4.0/Linux/Kernel] Error 2
make: *** [truecrypt] Error 2
Error: Failed to build kernel module

まだ反抗期らしい。

Building kernel module… /home/—–/src/truecrypt-4.0/Linux/Kernel/Dm-target.c:13:27: linux/version.h: No such file or directory

今度は、”version.h” か?

$ find /home/—–/src/rpms/BUILD/kernel-2.6.9/linux-2.6.9 -name version.h
/home/—–/src/rpms/BUILD/kernel-2.6.9/linux-2.6.9/arch/i386/math-emu/version.h
/home/—–/src/rpms/BUILD/kernel-2.6.9/linux-2.6.9/include/linux/dvb/version.h
/home/—–/src/rpms/BUILD/kernel-2.6.9/linux-2.6.9/include/sound/version.h
/home/—–/src/rpms/BUILD/kernel-2.6.9/linux-2.6.9/include/pcmcia/version.h

ん~なんかちょっと違う気がするぞ。

$ find /usr/src/kernels/2.6.9-22.0.1.EL-i686 -name version.h
/usr/src/kernels/2.6.9-22.0.1.EL-i686/include/linux/dvb/version.h
/usr/src/kernels/2.6.9-22.0.1.EL-i686/include/linux/version.h
/usr/src/kernels/2.6.9-22.0.1.EL-i686/include/sound/version.h
/usr/src/kernels/2.6.9-22.0.1.EL-i686/include/pcmcia/version.h

おっ!これだろう!!ないものはコピーしてしまえ!

$ cp /usr/src/kernels/2.6.9-22.0.1.EL-i686/include/linux/version.h /home/—–/src/rpms/BUILD/kernel-2.6.9/linux-2.6.9/include/linux/

# ./build.sh
Checking build requirements…
Linux kernel (2.6.9-22.EL) source directory [/usr/src/linux]: /home/—–/src/rpms/BUILD/kernel-2.6.9/linux-2.6.9
make[2]: *** [__modpost] Error 127
make[1]: *** [modules] Error 2
make: *** [truecrypt] Error 2
Error: Failed to build kernel module

はふ~、まだダメか。

Building kernel module… /bin/sh: scripts/mod/modpost: No such file or directory

次は “modpost” か。。。

$ find /home/shinago/src/rpms/BUILD/kernel-2.6.9/linux-2.6.9 -name modpost
$ find /usr/src/kernels/2.6.9-22.0.1.EL-i686 -name modpost

はい、これもコピー決定!

$ cp /usr/src/kernels/2.6.9-22.0.1.EL-i686/scripts/mod/modpost /home/shinago/src/rpms/BUILD/kernel-2.6.9/linux-2.6.9/scripts/mod/

# ./build.sh
Checking build requirements…
Linux kernel (2.6.9-22.EL) source directory [/usr/src/linux]: /home/—–/src/rpms/BUILD/kernel-2.6.9/linux-2.6.9
Building kernel module… Done.
Building truecrypt… Done.

ふぅぅぅ~、やっとコンパイルできたよ。 (≧∇≦)b


Red Hat Enterprise Linux 4 でインストール

さてと、、、インストール方法は?っと。

$ cd ..
$ less Readme.txt
Installing TrueCrypt:
———————

To build and install TrueCrypt, execute the following commands:

cd Linux
./install.sh

The installation script will first verify requirements for running TrueCrypt.
If successful, you will be prompted for installation options. Afterwards, the
following files will be installed:

Kernel/truecrypt.ko
Cli/truecrypt
Cli/Man/truecrypt.1

Linux ディレクトリで install.sh を実行するだけですか?

# ./install.sh
Checking installation requirements…
Error: modprobe or rmmod not found. TrueCrypt requires kernel module tools.

sbin に PATH がとおってないといけないみたいだな。

$ PATH=$PATH:/sbin:/usr/sbin
# ./install.sh
Checking installation requirements…
Testing truecrypt… Done.

Install binaries to [/usr/local/bin]: /usr/local/truecrypt-4.0/bin
Error: /usr/local/truecrypt-4.0/bin does not exist

あー先に、インストールしたいディレクトリ作っておかないとだめぽ。
(利便上、/usr/local/truecrypt-4.0 にインストールしたい)

# mkdir -p /usr/local/truecrypt-4.0/bin
# ./install.sh
Checking installation requirements…
Testing truecrypt… Done.

Install binaries to [/usr/local/bin]: /usr/local/truecrypt-4.0/bin
Install man page to [/usr/local/man]: /usr/local/truecrypt-4.0/man
Error: /usr/local/truecrypt-4.0/man/man1 does not exist

甘かった。。。

# mkdir -p /usr/local/truecrypt-4.0/man/man1
# ./install.sh
Checking installation requirements…
Testing truecrypt… Done.

Install binaries to [/usr/local/bin]: /usr/local/truecrypt-4.0/bin
Install man page to [/usr/local/man]: /usr/local/truecrypt-4.0/man
Allow non-admin users to run TrueCrypt [y/N]:
Installing kernel module… Done.
Installing truecrypt to /usr/loca
l/truecrypt-4.0/bin… Done.
Installing truecrypt man page to /usr/local/truecrypt-4.0/man/man1… Done.

おお~。できたぽ。

あとは、利便上の処理をちょこっと。

$ cd /usr/local/
# ln -s truecrypt-4.0 truecrypt
# echo << EOF >> /etc/man.config
> # truecrypt
> MANPATH /usr/local/truecrypt/man
> MANPATH_MAP /usr/local/truecrypt/bin /usr/local/truecrypt/man
> EOF


Red Hat Enterprise Linux 4 で使ってみる

どうやって使うんだ?GUIなんてあるわけねーよな?

$ man truecrypt
TRUECRYPT(1) User Commands TRUECRYPT(1)

NAME
truecrypt – manage TrueCrypt volumes

SYNOPSIS
truecrypt [OPTIONS] VOLUME_PATH [MOUNT_DIRECTORY]
truecrypt [OPTIONS] -d | –dismount | -l | –list [MAPPED_VOLUME]
truecrypt -h | –help | –test | -V | –version

DESCRIPTION
Manages encrypted TrueCrypt volumes, which can be mapped as virtual
block devices and used as any other standard block device. All data
being read from a mapped TrueCrypt volume is transparently decrypted
and all data being written to it is transparently encrypted.

OPTIONS
VOLUME_PATH [MOUNT_DIRECTORY]

Open a TrueCrypt volume specified by VOLUME_PATH and map it as
a block device /dev/mapper/truecryptN. N is the first available
device number if not otherwise specified with –device-number.
The filesystem of the mapped volume is mounted at MOUNT_DIREC-
TORY if specified.

-d, –dismount [MAPPED_VOLUME]

Dismount and unmap mapped volumes. If MAPPED_VOLUME is not
specified, all volumes are dismounted and unmapped. See below
for a description of MAPPED_VOLUME.

-l, –list [MAPPED_VOLUME]

Display a list of mapped volumes. If MAPPED_VOLUME is not spec-
ified, all volumes are listed. By default, the list contains
only volume path and mapped device name pairs. A more detailed
list can be enabled by verbose output option (-v). See below
for a description of MAPPED_VOLUME.

MAPPED_VOLUME

Specifies a mapped or mounted volume. One of the following
forms can be used:

1) Path to the encrypted TrueCrypt volume.

2) Mount directory of the volume’s filesystem (if mounted).

3) Device number of the mapped volume.

4) Device name of the mapped volume.

–device-number N

Use device number N when mapping a volume as a block device
/dev/mapper/truecryptN. Default is the first available device.

–display-password

Display password characters while typing.

–filesystem TYPE

Filesystem type to mount. The TYPE argument is passed to
mount(8) command with option -t. Default type is ‘auto’.

-h, –help

Display help information.

-k, –keyfile FILE | DIRECTORY

Use specified keyfile to open a volume to be mapped. When a
directory is specified, all files inside it will be used
(non-recursively). Additional keyfiles can be specified with
multiple -k options. See also option -K.

-K, –keyfile-protected FILE | DIRECTORY

Use specified keyfile to open a hidden volume to be protected.
See also options -k and -P.

–mount-options OPTIONS

Filesystem mount options. The OPTIONS argument is passed to
mount(8) command with option -o.

-p, –password PASSWORD

Use specified password to open a volume. Additional passwords
can be specified with multiple -p options. An empty password
can also be specified (“” in most shells). Note that passing a
password on the command line is potentially insecure as the
password may be visible in the process list (see ps(1)) and/or
stored in a command history file.

–password-tries NUMBER

Prompt NUMBER of times for a password until the correct pass-
word is entered. Default is to prompt three times.

-P, –protect-hidden

Write-protect a hidden volume when mapping an outer volume.
Before mapping the outer volume, the user will be prompted for
a password to open the hidden volume. The size and position of
the hidden volume is then determined and the outer volume is
mounted with all sectors belonging to the hidden volume pro-
tected against write operations. When a write to the protected
area is prevented, the whole volume is switched to read-only
mode. Verbose list command (-vl) can be used to query the state
of the hidden volume protection. Warning message is displayed
when a volume switched to read-only is being dismounted. See
also option -r.

-r, –read-only

Map and/or mount a volume as read-only. Write operations to the
volume may not fail immediately due to the write buffering per-
formed by the system, but the physical write will still be pre-
vented.

–test

Test all internal algorithms used in the process of encryption
and decryption.

–update-time

Do not preserve access and modification timestamps of volume
containers and access timestamps of keyfiles. By default,
timestamps are restored after a volume is unmapped or after a
keyfile is closed.

-v, –verbose

Enable verbose output. Multiple -v options can be specified to
increase the level of verbosity.

-V, –version

Display version information.

EXAMPLES
truecrypt /root/volume.tc /mnt/tc

Map a volume /root/volume.tc and mount its filesystem at
/mnt/tc.

truecrypt -d

Dismount and unmap all mapped volumes.

truecrypt -d /root/volume.tc

Dismount and unmap a volume /root/volume.tc.

truecrypt -d /mnt/tc

Dismount and unmap a volume mounted at /mnt/tc.

truecrypt -vl

Display a detailed list of all mapped volumes.

truecrypt –device-number=1 /dev/hdc1 && mkfs /dev/mapper/truecrypt1

Map a volume /dev/hdc1 and create a new filesystem on it.

truecrypt -P /dev/hdc1 /mnt/tc

Map and mount outer volume /dev/hdc1 and protect hidden volume
within it.

truecrypt -p “” -p “” -k key1 -k key2 -K key_hidden -P volume.tc

Map outer volume ./volume.tc and protect hidden volume withi
n
it. The outer volume is opened with keyfiles ./key1 and ./key2
and the hidden volume with ./key_hidden. Passwords for both
volumes are empty.

DIAGNOSTICS
Exit status 0 is returned if all requested actions completed success-
fully, otherwise 1 is returned. Kernel module reports errors via sys-
tem log with facility kern. See syslogd(8) for more information.

REPORTING BUGS
Report bugs at .

COPYRIGHT
Copyright (C) 2004-2005 TrueCrypt Foundation. All Rights Reserved.
Copyright (C) 1998-2000 Paul Le Roux. All Rights Reserved.
Copyright (C) 2004 TrueCrypt Team. All Rights Reserved.
Copyright (C) 1995-1997 Eric Young. All Rights Reserved.
Copyright (C) 1999-2004 Dr. Brian Gladman. All Rights Reserved.
Copyright (C) 2001 Markus Friedl. All Rights Reserved.

SEE ALSO
http://www.truecrypt.org/documentation.php
mount(8), umount(8), losetup(8), fuser(1), mkfs(8), fsck(8),
dmsetup(8)

truecrypt 4.0 October 2005 TRUECRYPT(1)

なるほど。truecrypt [OPTIONS] VOLUME_PATH [MOUNT_DIRECTORY] だな。

では、Windows であらかじめ暗号化した FAT の USB メモリーを挿してっと。プスッ。
(NTFS はそもそも論、Linux でマウントできないので、Windows ⇔ Linux の互換性を保とうと思うなら、FAT を使う必要があるので注意。)

$ mkdir usb-crypt
# /usr/local/truecrypt/bin/truecrypt /dev/sdb usb-crypt/
Enter password for ‘/dev/sdb’: (※パスワードを入力)
$ ls tmp/
:(ないしょ)

以上、非常に簡単だな。(/dev/sd* は挿した順番によって毎回変わるので、適時変更が必要。)

unmount は、-d オプションで VOLUME_PATH を指定する。

# /usr/local/truecrypt/bin/truecrypt -d /dev/sdb

(mount と違い、MOUNT_DIRECTORY でない点に注意。)

とりあえず、僕の使用目的は、Windows ⇔ Linux で USB メモリを使って、安全にデータを転送することにあるので、以上。

タイトルとURLをコピーしました