clock-up-blog

junk-junction

VeraCrypt コマンドによる USB HDD の暗号化(Ubuntu 18.04)

4TB の外付け USB HDD を Ubuntu 18.04 のマシンに繋ぎ、VeraCryptコマンドによる暗号化を施す手順を紹介します。

一般的な USB HDD であれば単純に USB を繋ぐだけで普通に便利なストレージとして使えるのですが、今回はセンシティブなファイル保管を想定し、ディスク暗号化により情報流出を避ける事を目的として見据えます。

VeraCrypt には GUI 版とコンソール版がありますが、今回はコンソール版のほうを用います。

ソースコード

ソースコードは公開されています。興味があれば仕組みを覗いてみるのも楽しいかと。

今回用いる USB HDD

BUFFALO HD-EDS4.0U3-BA (Gen1)。購入当時2019年9月時点での価格 9,980 円。


あくまでも参考情報です。購入当時である2019年9月時点のリンクを張りましたが、今はもっと良い商品を選べると思うので、実践したい場合には製品選択はよしなに。

暗号化の目的

今更詳しく説明するまでも無い点ですが、OS への認証をどれだけ堅く構築しても、暗号化の施されていないストレージデバイスは普通に抜き取って別のマシンに繋げば簡単に中身は覗かれます。そういう事態を防ぐために暗号化を施します。

他人に見られて困らないデータであれば良いのですが、様々な理由でデータ内容がセンシティブな場合には暗号化を施すのが好ましいでしょう。

  • センシティブなデータ例
    • 認証データ(秘密鍵ファイル等)
    • 個人情報(特に顧客データ等)
    • 非公開システム(銀行システムのソースコード等)
    • いろんな意味でけしからんデータ(補足略)

OS 情報の確認

$ cat /etc/os-release
NAME="Ubuntu"
VERSION="18.04.4 LTS (Bionic Beaver)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 18.04.4 LTS"
VERSION_ID="18.04"
…

Ubuntu 18.04.4 LTS であることが分かります。

VeraCrypt パッケージの探索

VeraCrypt - Free Open source disk encryption with strong security for the Paranoid
このあたりからちょうど良いパッケージを探します。

2020年4月時点の今回は Ubuntu 18.04 用の以下の情報が見つかったのでコレを利用します。

Ubuntu 18.04:
 GUI: veracrypt-1.24-Update4-Ubuntu-18.04-amd64.deb (PGP Signature)
 Console: veracrypt-console-1.24-Update4-Ubuntu-18.04-amd64.deb (PGP Signature)

GUI 版は取り扱いが簡単なのですが、普段使いで毎回デスクトップ画面開くのは面倒なので今回は Console 版を使います。

VeraCrypt パッケージ取得・インストール

上述のページから .deb ファイルの URL を取得し、パッケージのダウンロードおよびインストールを行います。

# apt-get update
# apt update

# cd /var/cache/apt/archives
# wget https://launchpad.net/veracrypt/trunk/1.24-update4/+download/veracrypt-console-1.24-Update4-Ubuntu-18.04-amd64.deb
# apt install ./veracrypt-console-1.24-Update4-Ubuntu-18.04-amd64.deb
Reading package lists... Done
…
…
Unpacking veracrypt-console (1.24.12-1) ...
Setting up veracrypt-console (1.24.12-1) ...

# veracrypt --version
VeraCrypt 1.24-Update4

VeraCrypt 1.24-Update4 がインストールされました。

ディスクのデバイス名を確認

接続する USB HDD のデバイス名を確認します。USB HDD はまだ接続しない状態で以下のコマンドを打ちます。

# dmesg -wH ← システムメッセージをリアルタイムに表示してくれるコマンド

この状態で USB HDD を接続してみます。

[ 4月 2 14:34] usb 4-6: new SuperSpeed Gen 1 USB device number 3 using xhci_hcd
[  +0.022224] usb 4-6: New USB device found, idVendor=0411, idProduct=02cc, bcdDevice= 1.02
[  +0.000006] usb 4-6: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[  +0.000004] usb 4-6: Product: HD-EDS-A
[  +0.000003] usb 4-6: Manufacturer: BUFFALO
…
…
[  +0.000551] sd 6:0:0:0: [sdc] 7814037168 512-byte logical blocks: (4.00 TB/3.64 TiB) ← sdc という名前でドライブが認識された
…
…
[  +0.073436]  sdc: sdc1 ← sdc1 という名前でパーティションが認識された
…
…

ここまで確認できたら一旦 dmesg は Ctrl+C で終了します。

HDD 接続後は以下のコマンドでも同様に名前確認ができます。

# parted -l
…
…
Model: BUFFALO HD-EDS-A (scsi)
Disk /dev/sdc: 4001GB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt
Disk Flags: 

Number  Start  End     Size    File system  Name  Flags
 1      524kB  4001GB  4001GB  ntfs               msftdata


# lsblk
…
…
sdc      8:32   0   3.7T  0 disk 
└─sdc1   8:33   0   3.7T  0 part 


# fdisk -l /dev/sdc
Disk /dev/sdc: 3.7 TiB, 4000787030016 bytes, 7814037168 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: gpt
Disk identifier: ********

Device     Start        End    Sectors  Size Type
/dev/sdc1   1024 7814036479 7814035456  3.7T Microsoft basic data


# fdisk -l /dev/sdc1
Disk /dev/sdc1: 3.7 TiB, 4000786153472 bytes, 7814035456 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: dos
Disk identifier: 0x00000000

ディスクの自動マウントの解除

対象のディスクが通常マウントされていると VeraCrypt の動作に支障が出るので、これを解除します。

マウント状態の確認

$ df -h
Filesystem      Size  Used Avail Use% Mounted on
…
…
/dev/sdc1       3.7T  298M  3.7T   1% /media/kobake/HD-EDS-A ← 自動マウントされた結果

自動マウント機能の解除

umount コマンドで手動でマウントを外すことはできますが、自動マウントが有効になっているとリブートの毎にマウントされ直されてしまうので、以下のコマンドで自動マウント機能を解除します。

# cat /proc/sys/fs/binfmt_misc/status ← 自動マウント設定の確認
enabled

# echo 0 > /proc/sys/fs/binfmt_misc/status ← 自動マウント設定を OFF にする

# cat /proc/sys/fs/binfmt_misc/status ← 自動マウント設定が OFF になったことを確認
disabled

# reboot ← リブートしてみる

自動マウントされなくなったことの確認

# fdisk -h
(結果一覧の中に該当のパーティション名(今回の場合は /dev/sdc1)が表示されていなければ OK。

USB HDD 内に VeraCrypt による暗号化ボリュームを構築

# veracrypt -t -c --quick
Volume type:
 1) Normal
 2) Hidden
Select [1]: 1

Enter volume path: /dev/sdc

Encryption Algorithm:
 1) AES
 2) Serpent
 3) Twofish
 4) Camellia
 5) Kuznyechik
 6) AES(Twofish)
 7) AES(Twofish(Serpent))
 8) Camellia(Kuznyechik)
 9) Camellia(Serpent)
 10) Kuznyechik(AES)
 11) Kuznyechik(Serpent(Camellia))
 12) Kuznyechik(Twofish)
 13) Serpent(AES)
 14) Serpent(Twofish(AES))
 15) Twofish(Serpent)
Select [1]: 1

Hash algorithm:
 1) SHA-512
 2) Whirlpool
 3) SHA-256
 4) Streebog
Select [1]: 1

Filesystem:
 1) None
 2) FAT
 3) Linux Ext2
 4) Linux Ext3
 5) Linux Ext4
 6) NTFS
 7) exFAT
Select [2]: 5 ← (※1: Linux Ext4 を選択)

Enter password: (新しいパスワードを入力。20文字以上が好ましい)
Re-enter password: (上記と同じパスワードを入力。誤入力防止用)

Enter PIM: (何も入力せずに Enter で OK)

Enter keyfile path [none]: (何も入力せずに Enter で OK)

Please type at least 320 randomly chosen characters and then press Enter: (※2: 320文字のランダム文字列を打ち込んで Enter)


Done: 100.000%  Speed: 1.7 TiB/s  Left: 0 s

The VeraCrypt volume has been successfully created.
  • ※1 … ファイルシステムは好みに合わせて選べますが、Linux ライクなパーミッション制御をしたいのであれば Linux Ext* を選択するのが無難です。
  • ※2 … 320文字を手動で打ち込むのは辛いので「mkpasswd -l 320 -s 0」で生成した文字列をコピペする等の工夫をすると楽です。

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

# mkdir /mnt/usb4tb ← マウントポイント。場所や名前は分かりやすければ何でも良い。

# veracrypt -t --pim=0 --keyfiles="" --protect-hidden=no /dev/sdc /mnt/usb4tb
Enter password for /dev/sdc: (暗号化ボリューム構築時のパスワードを入力して Enter)

# ls -ld /mnt/usb4tb
drwxr-xr-x 3 root root 4096  4月  2 15:08 /mnt/usb4tb ← ※3

# ls -l /mnt/usb4tb
total 16
drwx------ 2 root root 16384  4月  2 15:08 lost+found

※3: この時点では root 以外のユーザはディレクトリ内の読み取りしかできませんが、必要に応じて chmod や chown することで権限はよしなに制御できます。

このマウントが成功した時点で /mnt/usb4tb 配下は暗号化領域になっているので自由にファイルやディレクトリを配置して大丈夫です。

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

# veracrypt -d /mnt/usb4tb ← ※4

※4: マウントポイント名を省略して「veracrypt -d」だけでもマウント解除できます。その際には veracrypt でマウントされていたボリュームの全てがマウント解除されます。

マウント解除後は /mnt/usb4tb 内に暗号化保存していたファイル群は見えなくなります。再マウントすればまた見えるようになります。

マウント・アンマウントのコマンド実行の工夫

アンマウントはともかくとしてマウントのコマンドはけっこう長いので、シェルスクリプトにしておくと捗ります。

パスワード管理の工夫

パスワードを覚えておく自信が無い場合は KeePass 等のパスワード管理ツールを使うのが良いかもしれません。

コマンドオプションにパスワードを含めることも一応できますが、お勧めはできませんね……。仮にそういうことをするとしたら、パスワード入りのシェルスクリプトを USB メモリに保管しておいて、その USB メモリは金庫等に厳重に保管しておく、等のアイデアも無くはないです。自分はやりませんが。

自分の場合はこの手のパスワードはあくまでも頭の中に入れておくことにしています。

おしまい

世界に情報化時代という言葉が生まれてからずいぶんと年月が経ちました。情報の取り扱いにはくれぐれもご注意を。

センシティブな情報の暗号化は大事ですが、最悪のパターンとしてはパスワード紛失してデータ復旧が不可能になるケースも考えられます。情報の管理に唯一の正解というものはありません。ケースバイケースで適切な判断と管理を心がけましょう。