(X)Ubuntu Feisty で dm-crypt と LUKS を使ってディスクドライブを暗号化する方法

重要: この操作は選択したディスク上の全データを完全に消去します。必ず対象デバイスを二重に確認してください。
概要
目的: LUKS(Linux Unified Key Setup)と dm-crypt を使い、追加のハードディスクやパーティションを暗号化して、データ盗難や不正アクセスによる情報漏洩リスクを低減する。
対象読者: (X)Ubuntu Feisty や同系の Debian ベースディストリビューションのコマンドラインに慣れている中級ユーザー。ルート(sudo)権限が必要。
主な変数と用語(1行定義)
- dm-crypt: Linux のブロックデバイス暗号化レイヤ。
- LUKS: dm-crypt の標準的なヘッダと鍵管理フォーマット。
- /dev/HARDDISK: 暗号化対象のデバイス(例: /dev/sdb, /dev/hda)
- /dev/mapper/DEVICENAME: 暗号化を解除して使用する際の仮想デバイス名。
目次
- はじめにと動機
- 法的注意事項の要約
- 必要なソフトウェアのインストール
- 物理ディスクまたはパーティションの準備(乱数で上書き)
- カーネルモジュールの読み込みと永続化
- LUKS パーティションの作成、マッピング、フォーマット
- マウント方法(手動と自動)
- キーの追加/削除
- アンマウントと安全なクローズ
- 追加のベストプラクティス、トラブルシュート、代替手法、チェックリスト
I. はじめにと動機
セキュリティは現代のデジタル生活で重要です。個人情報や企業データを保存する追加ディスクは、盗難・不正取得の対象になりやすく、暗号化することで物理的な漏洩リスクを大幅に下げられます。本チュートリアルは、ディスク全体(またはパーティション)を LUKS で暗号化する実務的な手順を示します。
注意: 本手順はデータを消去するため、元のシステムディスク(OS を格納しているディスク)を誤って暗号化しないでください。目的は追加ストレージの保護です。
法的考慮(要約)
- 多くの国で、暗号化されたデバイスのパスワード開示を巡る法律や手続きは異なります。ヨーロッパの人権関連の文脈では黙秘権が参照されることがありますが、国や事案によって結果は異なります。
- 民事責任(例えば ISP アカウント経由の不正行為に関する責任)では、暗号化は必ずしも法的責任回避にならない可能性があります。
重要: 本情報は法的助言ではありません。法律問題は弁護士に相談してください。
II. 必要なソフトウェアのインストール
このチュートリアルは Xubuntu Feisty を想定していますが、古い *buntu 系や Debian 系でも同様のコマンドが使えます。必要なパッケージをインストールします:
sudo aptitude install cryptsetup hashalot
- cryptsetup: LUKS/dm-crypt を操作するツール。
- hashalot: パスフレーズの作成に便利(任意)。
III. ハードディスクの準備(安全に乱数で上書き)
なぜ乱数で埋めるのか:暗号化前のディスク表面がゼロ塗りなど単純なパターンだと、暗号化された領域と未使用領域の区別が付きやすく、隠蔽効果が弱まります。ランダムデータで埋めるとディスク上の見た目がすべてランダムになり、どの領域にデータがあるか推測しにくくなります。
警告: この操作は対象デバイス上の全データを消去します。必ず正しいデバイス名を指定してください。複数のターミナルや lsblk, fdisk -l で確認すること。
例(時間がかかる):
sudo dd if=/dev/urandom of=/dev/HARDDISK bs=1M status=progress
- bs=1M と status=progress(coreutils バージョン依存)は進行表示を出してくれます。環境によっては status=progress が使えない場合があります。
- 書き込み速度はディスクや USB/SATA インターフェースによる。数 GB から数百 GB の場合、数十分〜数時間要することがある。
パーティションのみを暗号化する場合は、まず fdisk や parted でパーティション(例: /dev/sdb1)を作成し、そのパーティションに対して上書きを行ってください。
例の実行ログ(概念):
hyper@xubi:/dev$ sudo dd if=/dev/urandom of=/dev/hda bs=1M
dd: writing to `/dev/hda': No space left on device
312581809+0 records in
312581808+0 records out
160041885696 bytes (160 GB) copied, 90679.8 seconds, 1.8 MB/s
IV. カーネルモジュールの読み込み
dm-crypt と暗号化アルゴリズムのサポートに必要なカーネルモジュールを読み込みます:
sudo modprobe aes
sudo modprobe dm-crypt
sudo modprobe dm_mod
永続化(ブート時に自動でロードする):
sudo nano /etc/modules
ファイル末尾に以下を追加します(既に存在する行は追加不要):
aes
dm-crypt
dm_mod
システムに応じて fuse や lp など他の行がある場合があります。編集後 Ctrl-X で保存して終了します。
V. LUKS 暗号パーティションの作成
対象デバイス(例: /dev/HARDDISK)に LUKS ヘッダを作成します。※既存データは消えます。
sudo cryptsetup luksFormat /dev/HARDDISK
プロンプトで “YES” と明示入力を求められることがあります(警告確認)。強力かつ忘れにくいパスフレーズを入力してください。パスフレーズは適切に保管し、ヘッダのバックアップも検討してください(下記参照)。
LUKS スロットの概念(説明)
LUKS は複数の鍵スロット(通常 8)を持ちます。1つのスロットにマスターキーを暗号化したキーを保存します。複数のユーザーや復旧キー用に、複数のパスフレーズを登録できます。スロットを使い切ると追加ができなくなるので管理に注意してください。
VI. LUKS コンテナのマッピング
暗号化コンテナを開き、カーネルにマップします。ここで指定した DEVICENAME が /dev/mapper/DEVICENAME になります。
sudo cryptsetup luksOpen /dev/HARDDISK DEVICENAME
その後、マッピングされたデバイスが /dev/mapper/DEVICENAME として利用可能になります。
VII. 暗号化パーティションのフォーマット
マッピングした仮想デバイスに filesystem を作成します。一般的には ext3 / ext4 / xfs などを選びます。ここでは ext3 の例を示しますが、現代的には ext4 を推奨する場合が多いです。
sudo mkfs.ext3 /dev/mapper/DEVICENAME
# または ext4 を使う場合
# sudo mkfs.ext4 /dev/mapper/DEVICENAME
filesystem の選択は用途(大ファイル中心か小さいファイル多数か)に応じて決めてください。
VIII. マウント手順(手動)
まずマウントポイントを作成します:
sudo mkdir /media/DEVICENAME
マウントします:
sudo mount /dev/mapper/DEVICENAME /media/DEVICENAME
再マウント(再起動後など)手順の一例:
# 暗号化コンテナを開く
sudo cryptsetup luksOpen /dev/HARDDISK DEVICENAME
# マウント
sudo mount /dev/mapper/DEVICENAME /media/DEVICENAME
IX. 自動マウント(起動時に復号・マウント)
起動時にパスフレーズ入力で復号して自動マウントするには /etc/crypttab と /etc/fstab にエントリを追加します。
/etc/crypttab の例:
DEVICENAME /dev/HARDDISK none luks,check=ext2,retry=5
- 3列目の “none” はパスフレーズを起動時に手動入力することを意味します。キーを自動で読み込ませたい場合はキーファイルのパスを指定します(ただし自動化はセキュリティリスクを高める)。
- retry=5 はパスワード失敗の再試行回数。
/etc/fstab の例:
# CryptoDevices
/dev/mapper/DEVICENAME /media/DEVICENAME auto defaults 0 0
起動時に crypttab に従って復号が行われ、続けて fstab のエントリでマウントが行われます。復号に失敗した場合、起動は進みますが該当ボリュームはマウントされません。
X. キーの追加と削除
複数ユーザーやリカバリキーを管理するために、追加のパスフレーズ(鍵)を登録できます。
追加:
sudo cryptsetup luksAddKey /dev/HARDDISK
削除:
sudo cryptsetup luksDelKey /dev/HARDDISK
注意: 削除操作は取り消せません。削除する前にどのスロットがどのパスフレーズに対応しているかを確認してください。luksDump でメタ情報を確認できます。
sudo cryptsetup luksDump /dev/HARDDISK
この情報から使用中のスロット状況を確認できます(スロット番号やアクティブ状態など)。
XI. アンマウントと LUKS コンテナのクローズ(安全な解除)
単に umount するだけでは、/dev/mapper/DEVICENAME が残っている可能性があります。マッピングが残っていると、そのデバイスにアクセス権のあるユーザーは中身を読み書きできる状態になります。安全に閉じるには以下を実行します:
sudo umount /media/DEVICENAME && sudo cryptsetup luksClose DEVICENAME
手順を自動化する簡単なスクリプト例(~/umount.sh):
#!/bin/bash
sudo umount /media/DEVICENAME && sudo cryptsetup luksClose DEVICENAME
実行権限を付与:
sudo chmod a+x ~/umount.sh
ランチャー作成の参考(Xfce のスクリーンショット):
(画像説明: Xfce パネルに配置したアンマウントスクリプトのランチャーのスクリーンショット)
XII. 最終ノートとベストプラクティス
- バックアップ: LUKS ヘッダが破損するとデータが復旧不能になります。cryptsetup luksHeaderBackup でヘッダを安全に保管してください。
sudo cryptsetup luksHeaderBackup /dev/HARDDISK --header-backup-file /root/HARDDISK-luks-header.img
- ヘッダを復元する場合:
sudo cryptsetup luksHeaderRestore /dev/HARDDISK --header-backup-file /root/HARDDISK-luks-header.img
キーファイル: パスフレーズ入力を自動化したい場合、暗号化されたキーファイルを使用できます。ただしキーファイル自体を安全に保管し(物理的セキュリティや別媒体へ隔離)、適切なファイルパーミッションを設定してください。
パフォーマンス: 暗号化は CPU を消費します。AES-NI などハードウェア暗号支援がある場合、パフォーマンス影響は小さくなります。暗号モジュール(aes)の存在とカーネル設定を確認してください。
LVM と統合: LUKS の上に LVM を載せる(LUKS → LVM → 複数 LV)構成は一般的です。逆(LVM の上に LUKS)は推奨されません。LVM を利用する場合は、先に luksOpen した /dev/mapper/DEVICENAME を物理ボリュームとして pvcreate し、その上で vgcreate してください。
マスターキー管理: 重要なデータを扱う場合は、復旧キーやオフラインで保管する鍵管理プロセスを整備してください。
付加価値セクション: 代替手法、失敗例、チェックリストなど
代替アプローチ
- TrueCrypt / VeraCrypt: マルチコンテナや隠しボリューム(プラスボード)を提供します。可搬性と機能面で魅力的ですが、運用上の信頼性と法的リスク(国・状況により)を考慮してください。
- ファイル単位の暗号化: eCryptfs、gpg、age、rclone(暗号化バックエンド)など。部分的に暗号化したい場合はこちらが適しています。
- ハードウェア暗号化ドライブ(SED): 自己暗号化ドライブを使うと OS 側の設定が少なくて済みますが、仕様やファームウェアの評価が必要です。
いつこの方法が不向きか(失敗例)
- OS を格納するブートディスクを暗号化しておらず、ブート時に必要な復号手順を自動化したい場合。
- 暗号化される OS イメージや重要ブート情報を誤って消去した場合。
- 法的・業務上、暗号化された情報の開示を求められる場合(国や事案で効果は異なる)。
簡潔なチェックリスト(実行前)
- 対象ディスクを lsblk / fdisk -l で確認した
- 対象ディスクの完全バックアップを別メディアに作成済み
- UUID やデバイス名をメモした
- 暗号ヘッダのバックアップを行う計画がある
- パスフレーズの管理(リカバリ手順)を決めた
- 起動時の自動マウント要否を決めた
運用 SOP(簡易)
- 新しいディスクを接続→lsblk でデバイス名確認
- (任意)パーティションを作成してから上書き
- dd でランダムデータ上書き(時間を確保)
- cryptsetup luksFormat で LUKS ヘッダ作成
- cryptsetup luksOpen でマッピング
- mkfs でファイルシステム作成
- マウントしてデータ移行
- luksHeaderBackup を取得
- /etc/crypttab と /etc/fstab を必要に応じて更新
- アンマウント時は umount → cryptsetup luksClose
トラブルシュートのヒント
- “No space left on device” は通常書き込み完了を示すメッセージ。dd 実行中に出る場合は期待どおりの終了です。
- cryptsetup が “device is busy” を出す場合、lsblk や lsof でどのプロセスがデバイスを保持しているか確認し、適切に停止してから再実行してください。
- マッピングが残る(/dev/mapper/DEVICENAME が存在)場合は luksClose を試す。close に失敗するときはプロセスがファイルを開いていないか確認する。
セキュリティの強化案
- 可能ならハードウェア加速(AES-NI)の有無を確認し、利用するカーネルおよび暗号モジュールを最新に保つ。
- パスフレーズは長く複雑にし(最低 12 文字以上を推奨)、辞書攻撃対策に複数種の文字やフレーズを含める。
- 重要データは複数のバックアップを取り、オフラインでヘッダやリカバリ情報を保管する。
まとめ
本ガイドでは (X)Ubuntu Feisty 上で追加ディスクを LUKS と dm-crypt で暗号化し、安全にマウント・アンマウントする手順を示しました。暗号化は強力な防御手段ですが、ヘッダとキー管理、バックアップ、運用手順の整備が不可欠です。作業前に十分な準備と確認を行ってください。
主なポイント:
- 操作は対象デバイスの全データを消去するため、デバイス名の二重確認とバックアップが必須
- LUKS ヘッダのバックアップや複数キーの管理でリスクを低減
- 自動マウントは便利だが、セキュリティ要件に応じてキーファイルや手動入力を検討
重要: 暗号化は万能ではありません。法的・運用上の要件に応じて適切な対策を組み合わせてください。
Критерии приёмки
- 対象ディスクに LUKS ヘッダを作成できること
- cryptsetup luksOpen で /dev/mapper/DEVICENAME が現れること
- mkfs と mount が成功しデータの読み書きができること
- umount 後に cryptsetup luksClose でマッピングが消えること
短い発表文(約 100–200 単語)
このチュートリアルは、(X)Ubuntu Feisty で追加ディスクを dm-crypt と LUKS を使って暗号化する実践手順を提供します。準備、カーネルモジュール、LUKS の作成、マッピング、フォーマット、マウント、自動マウント設定、キー管理、アンマウント手順、運用上のベストプラクティスとトラブルシュートまでカバーしています。作業前にデータのバックアップと暗号ヘッダのバックアップを必ず行ってください。