既存のDebian 12で暗号化されたSWAPパーティションを設定する方法

既存のDebian 12システムでスワップ領域を暗号化することは、メモリページ、パスワード、ドキュメントの断片、その他の一時的なデータが平文でディスクに書き込まれるのを防ぎたい場合に有効です。休止状態を必要としないマシンであれば、Debianのドキュメントにはシンプルな設計方法が示されています。スワップパーティションを通常のdm-cryptで暗号化し、起動時に毎回新しいランダムな暗号化キーを生成するというものです。

このガイドでは、その設計を採用しています。Debian 12「bookworm」、専用のスワップパーティション、およびinitシステムとしてsystemdを使用することを前提としています。ブロックデバイスのパスに誤りがあると誤ったパーティションが上書きされる可能性があるため、コマンドは意図的に保守的な記述になっています。まず判断ポイントをよく読んでから、例の値をそのままコピーするのではなく、ご自身のデバイス識別子に置き換えてください。

Debian の cryptsetup ドキュメントでは、暗号化されたスワップについて具体的に説明しており、スワップを無効化し、パーティションを に追加し/etc/crypttab、マッピングされたデバイスに/dev/urandom変更して/etc/fstabから、スワップを再度有効化することを推奨しています。Debian cryptsetup の README を参照してください。Debian 12 のcrypttab(5) マニュアルにも、crypttab フィールドと通常の dm-crypt オプションが記載されています。

ランダムキーで暗号化されたスワップを使用すべきでしょうか?

暗号化されたスワップ領域が必要で、かつ休止状態を必要としない場合に使用します。キーは起動のたびに再生成されるため、シャットダウン後に古いスワップ領域の内容は読み取れなくなります。これは、ほとんどのデスクトップおよびサーバー環境で求められるセキュリティ特性です。

休止状態、サスペンド・トゥ・ディスク、ハイブリッドスリープ、またはサスペンド・アンド・ハイバネートを使用している場合は、この設定をそのまま使用しないでください。再開するには、次の起動時に同じ休止状態イメージを復号化する必要があります。新しいランダムキーを使用すると、それが不可能になります。Debian は、ランダムキーの交換を再開デバイスとして使用できないことを明示的に示しています。Debian 12 のsystemd hibernate-resume のドキュメントにも同様に、再開は永続的な再開デバイスに依存することが示されています。

休止状態が必要な場合は、適切なロック解除および再開設定を備えたLUKSベースのスワップデバイスなどの永続的な暗号化設計を使用してください。これは別の設定であり、意図的にこのガイドの範囲外としています。

スワップ領域は既にディスク暗号化によって保護されていますか?

変更を加える前に必ず確認してください。スワップ論理ボリュームが既にLUKS暗号化コンテナ内に存在する場合、dm-cryptレイヤーを追加しても、複雑さが増すだけで実質的なメリットはほとんどない可能性があります。

swapon --show
lsblk -o NAME,PATH,TYPE,FSTYPE,SIZE,MOUNTPOINTS,PARTUUID

で表示されるデバイスを確認しswapon --show、その親を でたどってくださいlsblk。一般的な暗号化されていないレイアウトでは、/dev/sda3タイプとして直接表示される場合がありますswap。暗号化された LVM インストールでは、代わりに親の下に swap が表示される場合がありますcrypto_LUKS。

Debian 12のターミナル画面に、既存のスワップパーティションとそのPARTUUIDに対するswapon、lsblk、blkidの出力結果を示す図。
変更を加える前に、アクティブなスワップパーティションと安定したパーティション識別子を特定してください。ここに示されているデバイス名と識別子はあくまで例です。

この区別が重要なのは、この記事が暗号化されていない専用スワップパーティションの変換について扱っているためです。swapon --show代わりにスワップファイルが報告された場合は、スワップファイル固有の手順を使用してください。スワップが既に暗号化されたストレージ内にある場合は、まず2層目の暗号化が実際に必要かどうかを判断してください。

スワップをオフにする前に、何を記録しておくべきですか?

パーティションの正確なパス、サイズ、およびPARTUUIDを記録してください。PARTUUIDはパーティションテーブルのエントリを識別するもので、パーティション内のスワップ署名が暗号化されたデータに置き換えられた後でも有効です。

例えば:

sudo blkid /dev/sda3
ls -l /dev/disk/by-partuuid/

次のような値を含む出力が表示される場合があります。

PARTUUID="11111111-2222-3333-4444-555555555555"

以下の例において、対応する安定経路は次のとおりです。

/dev/disk/by-partuuid/11111111-2222-3333-4444-555555555555

ディスク列挙が変更される可能性があるため、それに依存することは避けてください/dev/sda3。また、古いスワップファイルシステムのUUIDを長期的なソース識別子として使用することも避けてください。暗号化されたスワップ設定では、マッピングされた暗号化デバイス上にスワップ署名が再作成されるため、古いraw-swap UUIDは基となるパーティションの適切な永続的な識別子ではありません。

1. システムを安全に準備するにはどうすればよいですか?

cryptsetupがインストールされていない場合はインストールし、編集する2つの設定ファイルをバックアップしてください。

sudo apt update
sudo apt install cryptsetup
sudo cp -a /etc/crypttab /etc/crypttab.before-encrypted-swap 2>/dev/null || true
sudo cp -a /etc/fstab /etc/fstab.before-encrypted-swap

まだ存在しない場合/etc/crypttabでも問題ありません。設定を編集する際に作成してください。

次に、スワップが無効になっている短い期間に十分な空きメモリがシステムにあることを確認してください。その後、変換するスワップパーティションのみを無効にします。swapoff -a複数のスワップ領域を持つマシンよりも、まったく同じデバイスを使用する方が安全です。

sudo swapoff /dev/sda3
swapon --show
Debian 12のターミナル画面で、スワップが無効化され、cryptsetupパッケージがインストールされている様子を示す図。
暗号化を適用する前に、対象のスワップ領域を無効にしてください。複数のスワップ領域を持つシステムでは、不必要にすべてを無効にするのではなく、目的のスワップ領域のみを操作してください。

mkswapこの時点以降は、生のパーティション上で実行しないでください。スワップ署名は、暗号化されたマッパーデバイス上に作成する必要があり、暗号化されていないバッキングパーティション上に作成してはいけません。

2. /etc/crypttab には何を入れるべきですか?

暗号化されたスワップマッピングのエントリを1つ作成または編集して/etc/crypttab追加します。以下はDebianのcryptsetupドキュメントに準拠しています。

cswap /dev/disk/by-partuuid/11111111-2222-3333-4444-555555555555 /dev/urandom plain,cipher=aes-xts-plain64,size=256,swap

例のPARTUUIDを、ご自身のシステムのPARTUUIDに置き換えてください。

各項目の意味は以下のとおりです。

  • cswapはマッパー名で、 を作成します/dev/mapper/cswap。
  • 2番目のフィールドは、実際の基盤となるスワップパーティションです。
  • /dev/urandomマッピングが作成されるたびに、新しいランダムキーを提供します。
  • plain永続的なLUKSヘッダーではなく、プレーンなdm-cryptを選択します。
  • cipher=aes-xts-plain64,size=256変更される可能性のあるデフォルト値に依存するのではなく、plain-dm-crypt パラメータを明示的に指定します。
  • swapこのマッピングされたデバイスがスワップデバイスであり、適切に初期化する必要があることをcryptsetup統合に伝えます。
Debian 12 上で GNU nano を使用して /etc/crypttab を編集する例。安定した PARTUUID パスと /dev/urandom を使用する cswap マッピングを使用する。
crypttab エントリは、アクティベーションのたびに /dev/urandom から取得した新しいキーを使用して、cswap という名前の一時的な暗号化マッピングを作成します。

Debianのcrypttabマニュアルでは、通常のdm-cryptはLUKSとは異なり、暗号化方式、ハッシュ値、鍵サイズのメタデータをヘッダーに保存しないと警告しています。そのため、暗号化方式と鍵サイズを明示的に記録することが有効です。マニュアルにはdiscardセキュリティ上の影響についても記載されていますが、そのトレードオフを評価しない限り、バックアップデバイスがSSDであるという理由だけで追加すべきではないと注意喚起しています。

3. /etc/fstab にはどのような変更がありますか?

暗号化されていない古いスワップ行を で見つけます/etc/fstab。UUID、デバイスパス、またはその他の永続的な識別子が使用されている場合があります。例:

UUID=OLD-SWAP-UUID none swap sw 0 0

マッピング済みの暗号化デバイスに置き換えてください。

/dev/mapper/cswap none swap sw 0 0

両方のエントリをアクティブにしたままにしないでください。生のパーティションと/dev/mapper/cswapスワップの両方が有効になっていると、パーティションを暗号化する目的が損なわれ、起動時のアクティベーションが混乱する恐れがあります。

Debian 12 上の GNU nano による /etc/fstab の図。古い raw swap エントリが無効になっており、/dev/mapper/cswap が swap として設定されている。
fstabは、元の生のスワップパーティションではなく、暗号化されたマッパーデバイスを指すように設定する必要があります。

Debianのfstab(5)マニュアルではスワップエントリのフォーマットが定義されており、swapon(8)ではスワップとしてマークされたエントリがどのようにアクティブ化されるかが説明されています。

4. 再起動する前に、どのように有効化および検証すればよいですか?

両方のファイルを保存したら、暗号化マッピングを開始し、スワップエントリを有効にします。Debianのcryptsetupドキュメントでは、以下の手順を使用しています。

sudo cryptdisks_start cswap
sudo swapon -a

それでは、3つの層すべてを検証してください。

swapon --show
sudo cryptsetup status cswap
lsblk -o NAME,TYPE,FSTYPE,SIZE,MOUNTPOINTS

正常な結果では、スワップは/dev/mapper/cswap元のパーティション上ではなく、で表示されるはずです。cryptsetup status cswapマッピングがアクティブであると報告されるはずです。

お使いの環境で利用できない場合はcryptdisks_start、破壊的なコマンドを即興で実行しないでください。cryptsetupパッケージがインストールされていること、およびcrypttab構文が有効であることを再度確認してください。また、以下の再開設定を完了した後、通常のDebianブートプロセスでマッピングを作成することもできます。Debian 12では、systemdジェネレータを使用してcrypttabおよびfstabの設定を起動時の単位に変換します。

5. 休止状態からの復帰を無効にする必要がありますか?

はい、このパーティションがシステムのレジュームデバイスとして設定されていた場合です。ランダムキーでは、以前のキーで書き込まれた休止状態イメージを復号化することはできません。Debianの暗号化スワップに関する手順では、古いレジュームスワップパーティションをランダムキーで暗号化されたスワップに変換する際には、レジュームを無効にするよう管理者に明示的に指示しています。

現在の設定を確認してください。

grep -R "^[[:space:]]*RESUME=" /etc/initramfs-tools/conf.d/ 2>/dev/null

変換したばかりのスワップパーティションを参照している場合は、resumeをnoneに設定してください。

echo "RESUME=none" | sudo tee /etc/initramfs-tools/conf.d/resume
sudo update-initramfs -u

ここでupdate-initramfs -u重要なのは、通常の起動後スワップエントリが変更されたという理由だけでinitramfsを再構築する必要はありませんが、initramfsが使用しようとする可能性のある古い休止状態再開ターゲットを削除する際には、initramfsを更新する必要があります。

再起動テスト:セットアップが正しく機能していることを証明するには?

ライブアクティベーションが正常に完了し、設定ファイルが正しいことを確認してから再起動してください。

sudo reboot

システムが復旧したら、以下を実行してください。

swapon --show
sudo cryptsetup status cswap
lsblk -o NAME,TYPE,FSTYPE,SIZE,MOUNTPOINTS
cat /proc/swaps

成功のための重要な基準は単純明快です。

  • /dev/mapper/cswapスワップとしてアクティブです。
  • 生のバッキングパーティションは、アクティブなスワップとして直接リストされません。
  • cryptsetup status cswapアクティブなプレーンなdm-cryptマッピングを報告します。
  • マシンはスワップパスフレーズを要求せずに起動し、ランダムキーは自動的に生成されます。

また、2回再起動してマッピングの動作を比較することもできます。この設計の要点は、暗号化キーが一時的なものであるということです。マッピングが再作成された後は、前回の起動時のスワップの内容は復元できません。

機械が緊急モードに移行したらどうなるでしょうか?

最も一般的な原因は、バックアップデバイスのパスが間違っている、設定ファイルにタイプミスがある/etc/crypttab、または/etc/fstab古い生のスワップを指している行があることです。リカバリモードで起動するか、レスキュー環境を使用して、ルートファイルシステムを読み書き可能にマウントし、必要に応じてバックアップを復元してください。

役立つチェック項目は以下のとおりです。

sudo cryptsetup status cswap
systemctl status systemd-cryptsetup@cswap.service
systemctl status dev-mapper-cswap.swap
journalctl -b -u systemd-cryptsetup@cswap.service

ユニット名は、特殊なマッパー名の場合、異なる方法でエスケープされる可能性があるため、systemctl list-units '*cryptsetup*'正確なサービス名が不明な場合は、これを使用してください。

SSDの廃棄についてはどうでしょうか?

理論上のSSDパフォーマンスを追求するためだけに、デフォルトでdiscardを有効にしないでください。Debianのcrypttabドキュメントには、暗号化されたデバイスを介してdiscard要求を送信するとセキュリティ上の問題が発生すると記載されています。Debianのswaponマニュアルにも同様に、discardは一部のSSDではパフォーマンスを向上させる可能性があるものの、多くの場合そうではないと記載されています。必要な場合は、まずストレージモデルと脅威モデルを評価し、慎重に追加してください。

ルートファイルシステムが暗号化されていない場合でも、暗号化されたスワップ領域は依然として有用でしょうか?

はい、ただしその範囲を理解してください。暗号化されたスワップは、スワップパーティションに書き込まれたメモリページを保護します。暗号化されていないルートファイルシステムやホームファイルシステムに保存されたファイル、シェル履歴、アプリケーションキャッシュ、クラッシュダンプ、一時ファイル、ログは暗号化されません。盗難されたディスクからのデータ漏洩に対する広範な保護が目的であれば、ディスク全体またはファイルシステム全体の暗号化の方がより完全な制御手段となります。

最終チェックリスト

  • 対象がスワップファイルではなく、暗号化されていない専用のスワップパーティションであり、かつ既に暗号化された親デバイスによって保護されていないことを確認してください。
  • 安定したパーティションパスを記録します/dev/disk/by-partuuid/...。
  • dm-cryptを設定する前に、生のスワップを無効にしてください。
  • に random-key plain-dm-crypt エントリを追加します/etc/crypttab。
  • /etc/fstabのみを指し示してください/dev/mapper/cswap。
  • 再起動する前に、マッピングを有効にして確認してください。
  • 古いスワップがレジュームデバイスだった場合は、設定しRESUME=noneて実行しますupdate-initramfs -u。
  • 再起動後、暗号化されたマッパーのみがスワップとしてアクティブになっていることを確認してください。

ハイバネーションを行わない Debian 12 システムの場合、このアプローチは設定を小さく抑え、永続的なスワップキーの保存を回避します。重要なのは「どの暗号化コマンドを実行するか」ではなく、ランダムキーのスワップが電力管理要件に合致するかどうかです。それが決定すれば、あとは生のスワップパーティションから、起動のたびに安全に再作成される dm-crypt マッピングへの制御された移行を行うだけです。

コメントを残す

失われたパーティションとハードディスクデータを安全に復元する方法

失われたパーティションとハードディスクデータを安全に復元する方法

TestDiskとPhotoRecを使って、失われたパーティションやファイルを復元する方法を学びましょう。ソースドライブを保護し、安全にスキャンを行い、復元したデータを別のディスクに保存します。

LinuxデスクトップでQRコードをスキャンする方法

LinuxデスクトップでQRコードをスキャンする方法

CoBangを使えば、Webカメラまたは画像ファイルでLinux上でQRコードをスキャンできます。インストールオプション、セットアップ手順、Flatpakカメラへのアクセスに関する修正方法については、こちらをご覧ください。

Cameractrlsを使ってLinuxでウェブカメラの設定を変更する方法

Cameractrlsを使ってLinuxでウェブカメラの設定を変更する方法

Cameractrlsを使用してLinux上でウェブカメラの設定を変更しましょう。露出、色、フリッカー低減などのサポートされているコントロールを調整し、互換性のあるビデオモードを確認できます。

LinuxにPhpStormをインストールする方法:ツールボックス、Tar.gz、Snap、およびAUR

LinuxにPhpStormをインストールする方法:ツールボックス、Tar.gz、Snap、およびAUR

LinuxにPhpStormをインストールするには、JetBrains Toolboxを使用するか、スタンドアロンのtar.gzアーカイブを使用するか、SnapおよびArch AURオプションを選択してください。Javaは既にバンドルされています。

LinuxにCisco Packet Tracerをインストールする方法

LinuxにCisco Packet Tracerをインストールする方法

Cisco Packet Tracer 9.0.1 を Ubuntu 64 ビット版にダウンロードし、APT を使用して DEB パッケージをインストールし、ターミナルでライセンスに同意してサインインすると、ラボを開始できます。

LinuxでCD-ROMをISOイメージとしてバックアップする方法

LinuxでCD-ROMをISOイメージとしてバックアップする方法

Linux上でGNOME Disksまたはddコマンドを使用してCD-ROM ISOイメージを作成します。光学ドライブを識別し、コピーを監視し、イメージを検証し、破損したディスクやオーディオディスクに別のツールが必要な場合を把握できます。

XFCE 4でデュアルパネルを設定する方法

XFCE 4でデュアルパネルを設定する方法

各ディスプレイごとに個別のXFCE 4パネルを作成し、2番目のパネルを右側の出力に割り当て、位置とサイズを調整し、必要なランチャーとステータス項目を追加します。

LinuxでGIMPを使って画像を切り抜く方法

LinuxでGIMPを使って画像を切り抜く方法

LinuxでGIMPを使って写真の背景を削除する方法:被写体をトレースし、選択した背景を削除し、透明度を保持して、再利用可能なPNG形式でエクスポートします。

FlightGearを無料でダウンロード:公式インストールガイド

FlightGearを無料でダウンロード:公式インストールガイド

FlightGearは公式サイトから無料でダウンロードできます。Windows、macOS、Linuxの各パッケージを比較し、データファイルをインストールして、最初のフライトを開始しましょう。

OKSampler:キーボードビートのための無料かつシンプルな音楽サンプラー

OKSampler:キーボードビートのための無料かつシンプルな音楽サンプラー

OKSamplerはMP3クリップをキーボードのキーにマッピングし、音声をループ再生できます。この旧型フリーウェアの機能、旧機能が失われた箇所、ダウンロード前に確認すべき点について解説します。