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 情報の確認
$ 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.
暗号化ボリュームをマウント
# 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 メモリは金庫等に厳重に保管しておく、等のアイデアも無くはないです。自分はやりませんが。
自分の場合はこの手のパスワードはあくまでも頭の中に入れておくことにしています。
おしまい
世界に情報化時代という言葉が生まれてからずいぶんと年月が経ちました。情報の取り扱いにはくれぐれもご注意を。
センシティブな情報の暗号化は大事ですが、最悪のパターンとしてはパスワード紛失してデータ復旧が不可能になるケースも考えられます。情報の管理に唯一の正解というものはありません。ケースバイケースで適切な判断と管理を心がけましょう。