4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Linuxで暗号化ボリュームを作るためにzuluCryptを使ってみた

Posted at

使ってみた系の記事を書くのはあまり好きじゃないのですが、日本語の情報が少なかったので投稿します。

要件と選定の理由

  • ファイルを透過的に暗号化し、ディスクとしてマウントできること
  • Linux (Debian) で簡単に使え、WindowsやmacOSでも使えること

この分野のソフトは古くはTrueCryptが有名でしたが、2014年に開発が終了し今は後継としてVeraCryptがよく使われているようです。VeraCryptはLinux版、Windows版、macOS版すべてあるのですが、TrueCryptのフォークでTrueCrypt Licenseを含んでおりソースコードは公開されていますが、オープンソースライセンスとして問題が少しあるためDebian等で公式パッケージが用意されていません。

Debian公式パッケージがあるという条件で見つけたのがzuluCryptです。zuluCryptは(今の所)Linux版しかありませんが、標準のLUKSに加え、TrueCrypt、VeraCrypt、dm-crypt、BitLockerのボリュームを扱うことができます。そこで暗号化ボリュームとしてVeraCryptを使い、ソフトウェアはLinuxではzuluCrypt、WindowsやmacOSではVeraCryptを使用することとしました。

またファイルシステムとしてはWindowsやmacOSでも使えるように(少々不安が残りますが)NTFSを使用しています。FAT系でないのはシンボリックリンクが使えないためです。

使い方

まずzuluCryptはGUIが用意されていますが、GUIは使っていません。あしからず。

zuluCryptを使用するにはzuluCrypt-cliコマンドを使用します。オプションに癖があって少々分かりづらいですがman zuluCrypt-cliのexamplesが参考になると思います。

examples:
create volume: zuluCrypt-cli -c -d /dev/sdc1 -z ext4 -t luks -p xxx
open volume  : zuluCrypt-cli -o -d /dev/sdc1 -m sdc1 -e ro -p xxx
close volume ; zuluCrypt-cli -q -d /dev/sdc1
remove key   ; zuluCrypt-cli -r -d /dev/sdc1 -p xxx
add key      : zuluCrypt-cli -a -d /dev/sdc1 -y xxx -l yyy
get device path from mapper  : zuluCrypt-cli -P -d /dev/mapper/zuluCrypt-sdc1
check if partition with UUID is present : zuluCrypt-cli -w -d UUID="d2d210b8-0b1f-419f-9172-9d509ea9af0c"

暗号化ボリュームの作成

今回は(デバイスではなく)ファイルをVeraCrypt暗号化ボリュームでNTFS(別途ntfs-3gパッケージが必要)で作成したかったので以下のコマンドで作成しました。

$ # 空ファイル作成
$ dd if=/dev/zero of=ファイル bs=10MB count=1

$ # 暗号化ボリュームファイルにする
$ zuluCrypt-cli -c -d ファイル -k -z ntfs -t vcrypt 

暗号化ボリュームのマウント

マウント(正確には暗号化ボリュームのオープンとマウント)は以下のように実行します。

$ # オープンとマウント
$ zuluCrypt-cli -o -d 暗号化ボリュームファイル -t vcrypt

zuluMount-cliというマウント・アンマウント専用のコマンドもあるのですが、zuluCrypt-cliコマンドでもできるため使用していません。

コマンドを実行すると、/dev/mappter/zuluCrypt-で始まるデバイスが作成(オープン)され/run/media/private/$USER/マウント名以下にマウントされます。デフォルトのマウント名は(ディレクトリ部分を除いた)暗号化ボリュームファイル名です。マウント名を指定したい場合は、-m fooのように指定します。

マウント場所などがこれで良ければこのまま使用できるのですが、マウントオプションとマウント場所を変更したかったので、暗号化ボリュームのオープンとマウントを別々に行っています。

$ # オープン
$ zuluCrypt-cli -O -d 暗号化ボリュームファイル -t vcrypt

$ # マウント
$ mount -t ntfs -o permissions,windows_names /dev/mappter/zuluCrypt-デバイス名 /var/data

ただ一つ問題があって、暗号化ボリュームをオープンしたときに作成されるデバイス名を簡単に知る方法がわかりませんでした。一応-sオプションでわかるのですが、メッセージの一部なので将来フォーマットが変わる可能性がある気がします。

$ zuluCrypt-cli -s -d 暗号化ボリュームファイル名
/dev/mapper/zuluCrypt-省略 is active and is in use.
 type:          Nil
 cipher:        aes-xts-plain64
 keysize:       512 bits
 offset:        256 sectors / 128.0 KB
 device:        /dev/loop0
 loop:          暗号化ボリュームファイル名
 mode:          read and write
 active slots:  Nil

-Lオプションにprint a list of all opened volumes and their mount point.The list is not formattedとあるので zuluCrypt-cli -L と実行してみましたが、使い方が間違っているのかこちらは何も表示されず。

逆にデバイス名から暗号化ボリュームファイル名を知るのはzuluCrypt-cli -P -d /dev/mapper/zuluCrypt-デバイス名で出来たので、/dev/mapper/zuluCrypt-*を列挙してファイル名が一致したデバイス名を取得しています。

get_zulucrypt_device() {
  for device in /dev/mapper/zuluCrypt*; do
    device_path=$(zuluCrypt-cli -P -d "$device")
    [ "$device_path" = "$1" ] && echo "$device" && return 0
  done
  return 1
}
device=$(get_zulucrypt_device 暗号化ボリュームファイル)

暗号化ボリュームのアンマウント

正確には暗号化ボリュームのアンマウントとクローズです。マウントしたままクローズしようとするとエラーになります。オープンと違って暗号化ボリュームのアンマウントとクローズを同時にやってくれるコマンドはなさそうです。

$ # アンマウント
$ umount /run/media/private/$USER/マウント名

$ # クローズ
$ zuluCrypt-cli -q -d 暗号化ボリュームファイル

さいごに

以上、私が使用した最低限のコマンドだけなので少ないですが、誰かが使用するきっかけになれば幸いです。

4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?