「Dm-crypt/スワップの暗号化」の版間の差分
Kusanaginoturugi (トーク | 投稿記録) (カテゴリの修正) |
|||
(3人の利用者による、間の14版が非表示) | |||
1行目: | 1行目: | ||
{{Lowercase title}} |
{{Lowercase title}} |
||
− | [[Category: |
+ | [[Category:保存データ暗号化]] |
− | [[Category:ファイルシステム]] |
||
[[en:Dm-crypt/Swap encryption]] |
[[en:Dm-crypt/Swap encryption]] |
||
− | [[Dm-crypt]] |
+ | [[es:Dm-crypt (Español)/Swap encryption]] |
+ | [[pl:Dm-crypt (Polski)/Swap encryption]] |
||
− | |||
+ | [[pt:Dm-crypt (Português)/Swap encryption]] |
||
− | 必要に応じて、以下で説明する様々な方法を使ってスワップパーティションを暗号化することができます。再起動時にスワップパーティションを (新しい暗号を使って) 初期化することで、過去にスワップアウトされた重要なファイルの断片がそのまま残ってしまうのを防ぐことができ、強固なデータの保護が可能になります。ただし、スワップを暗号化すると基本的にハイバネートが使えなくなってしまいます。 |
||
+ | [[uk:Dm-crypt (Українська)/Swap encryption]] |
||
+ | 必要に応じて、以下で説明する様々な方法を使って[[スワップ]]パーティションを暗号化することができます。再起動時にスワップパーティションを (新しい暗号を使って) 初期化することで、過去にスワップアウトされた重要なファイルの断片がそのまま残ってしまうのを防ぐことができ、強固なデータの保護が可能になります。ただし、スワップを暗号化すると基本的にハイバネートが使えなくなってしまいます。 |
||
== suspend-to-disk を使用しない == |
== suspend-to-disk を使用しない == |
||
− | suspend-to-disk が必要ない場合、起動時にランダムな |
+ | suspend-to-disk (ハイバネーション) が必要ない場合、{{ic|/etc/crypttab}} を設定することで plain dm-crypt を使って起動時にランダムなパスワードでスワップパーティションを復号化することができます。ランダムなパスワードはシャットダウン時に破棄されるため、スワップデバイス内のデータには二度とアクセスできなくなります。 |
− | + | {{ic|/etc/crypttab}} の {{ic|swap}} から始まる行をアンコメントするだけで機能を有効にできます。{{ic|<device>}} パラメータはあなたの使用しているスワップデバイスの名前に変更してください。例: |
|
− | {{hc|/etc/crypttab| |
+ | {{hc|/etc/crypttab| |
+ | # <name> <device> <password> <options> |
||
− | # swap /dev/sdaX /dev/urandom <nowiki>swap,cipher=aes-cbc-essiv:sha256,size=256</nowiki>}} |
||
+ | swap /dev/sd''X#'' /dev/urandom <nowiki>swap,cipher=aes-cbc-essiv:sha256,size=256</nowiki>}} |
||
+ | 上記の設定で {{ic|/dev/sd''X#''}} が {{ic|/dev/mapper/swap}} にスワップパーティションとしてマッピングされ、通常のスワップと同じように {{ic|/etc/fstab}} に追加できるようになります。既にスワップパーティションを使っていた場合、無効化するか [[fstab]] エントリを再利用してデバイスを {{ic|/dev/mapper/swap}} に変更してください。大抵の場合はデフォルトのオプションで問題ありません。他のオプションやカラムの説明については {{ic|man 5 crypttab}} および [https://gitlab.com/cryptsetup/cryptsetup/wikis/FrequentlyAskedQuestions#2-setup point cryptsetup FAQ 2.3] を見てください。 |
||
− | Where: |
||
− | ; <name>: Represents the name to state in the first column of {{ic|/etc/fstab}} (as "{{ic|/dev/mapper/<name>}}"). |
||
− | ; <device>: Should be the persistent device name for the swap device. |
||
− | ; <password>: {{ic|/dev/urandom}} sets the dm-crypt master key to be randomized on every volume recreation. |
||
− | ; <options>: The {{ic|swap}} option runs mkswap after cryptographic's are setup. |
||
+ | {{Warning|名前付きデバイスの中身は永久に削除されます。スワップデバイスに対してカーネルのシンプルな命名を使うのは危険です。名前の順番が起動時に変わってしまう可能性があるためです (例: {{ic|/dev/sda}}, {{ic|/dev/sdb}})。以下の方法があります: |
||
− | {{Warning|Make sure to use either {{ic|by-id}}, {{ic|by-path}} or [[LVM]] logical volumes' [[Persistent_block_device_naming|persistent device naming]] for the {{ic|<device>}} array (especially if there are multiple storage drives in the system), as it might happen that their usual kernel naming order (sda, sdb,...) changes upon boots and thus the swap would be created over a valuable file system, destroying all its content. Because of the recreation and re-encryption of the swap device on every boot with {{ic|mkswap}}, labels and UUIDs cannot be used (see [[Persistent_block_device_naming#by-uuid|naming by UUID]] and [https://gitlab.com/cryptsetup/cryptsetup/wikis/FrequentlyAskedQuestions#2-setup cryptsetup FAQ 2.3]).}} |
||
+ | * {{ic|by-id}} と {{ic|by-path}} を使用する。ただし、どちらもハードウェアを変更すると変わる可能性があります。[[永続的なブロックデバイスの命名#by-id と by-path]] を参照。 |
||
+ | * [[LVM]] の論理ボリュームの名前を使用する。 |
||
+ | * [[#UUID と LABEL]] に書かれている方法を使う。ラベルや [[永続的なブロックデバイスの命名#by-uuid|UUID]] は {{ic|mkswap}} によって起動時にスワップデバイスを再作成・暗号化するため直接使われることはありません [https://gitlab.com/cryptsetup/cryptsetup/wikis/FrequentlyAskedQuestions#2-setup]。 |
||
+ | }} |
||
+ | カーネルの命名の代わりに {{ic|by-id}} による命名を使う場合、まずスワップデバイスを確認してください: |
||
− | For example, {{ic|by-id}} persistent device naming is first identified for the chosen device: |
||
{{hc|# ls -l <nowiki>/dev/disk/*/* |</nowiki> grep sdaX| |
{{hc|# ls -l <nowiki>/dev/disk/*/* |</nowiki> grep sdaX| |
||
31行目: | 33行目: | ||
}} |
}} |
||
+ | そして出力された行の中から適切なデバイスを選択して以下のように設定してください: |
||
− | and then used as a persistent reference for the {{ic|/dev/sdaX}} example partition (if two results are returned as above, choose either one of them): |
||
+ | {{hc|/etc/crypttab| |
||
− | {{hc|/etc/crypttab|# <name> <device> <password> <options> |
||
+ | # <name> <device> <password> <options> |
||
− | swap /dev/disk/by-id/ata-WDC_WD2500BEVT-22ZCT0_WD-WXE908VF0470-partX /dev/urandom <nowiki>swap,cipher=aes-cbc-essiv:sha256,size=256</nowiki>}} |
||
+ | swap /dev/disk/by-id/ata-WDC_WD2500BEVT-22ZCT0_WD-WXE908VF0470-partX /dev/urandom <nowiki>swap,cipher=aes-cbc-essiv:sha256,size=256</nowiki>}} |
||
+ | 再起動後 {{ic|swapon -s}} を実行することで任意のデバイスマッパーエントリ (例: {{ic|/dev/dm-1}}) が表示され、{{ic|lsblk}} コマンドで {{ic|FSTYPE}} カラムの '''crypt''' が表示されます。起動時に新しく暗号化するため、{{ic|/dev/mapper/swap}} の UUID は毎回変わります。 |
||
− | This will map {{ic|/dev/sdaX}} to {{ic|/dev/mapper/swap}} as a swap partition that can be added in {{ic|/etc/fstab}} like a normal swap. If you had a non-encrypted swap partition before, do not forget to disable it - or re-use its [[fstab]] entry by changing the device to {{ic|/dev/mapper/swap}}. |
||
+ | {{Note| |
||
− | After a reboot to activate the encrypted swap, you will note that running {{ic|swapon -s}} shows an arbitrary device mapper entry (e.g. {{ic|/dev/dm-1}}) for it, while the {{ic|lsblk}} command shows '''crypt''' in the {{ic|FSTYPE}} column. Due to fresh encryption each boot, the UUID for {{ic|/dev/mapper/swap}} will change every time. |
||
+ | * スワップに選択したパーティションが LUKS パーティションだった場合、crypttab はスワップパーティションを作成するのにパーティションを上書きしません。crypttab で間違ってスワップパーティションを指定したときにデータが消失しないようにするための安全機構です。そのようなパーティションを使うときは [[dm-crypt/ドライブの準備#LUKS ヘッダーを消去|LUKS ヘッダーを上書き]]してください。 |
||
+ | * ルートファイルシステムで {{ic|sd-encrypt}} フックと {{ic|luks.*}} カーネルパラメータを使用する場合、systemd は "Not creating device 'swap' because it was not specified on the kernel command line." とエラーを吐きます。問題を解決するには {{ic|rd.luks.*}} パラメータを使ってください。}} |
||
+ | === UUID と LABEL === |
||
− | If the partition chosen for swap was previously a LUKS partition, crypttab will not overwrite the partition to create a swap partition. This is a safety measure to prevent data loss from accidental mis-identification of the swap partition in crypttab. In order to use such a partition the [[Dm-crypt/Drive preparation#Wipe_LUKS_header|LUKS header must be overwritten]] once. |
||
+ | |||
+ | {{Note|以下の方法は systemd と sd-encrypt init フックを使用している場合は機能しません。}} |
||
+ | |||
+ | {{ic|/dev/sdX#}} あるいは {{ic|/dev/disk/by-id/ata-SERIAL-partX}} などのシンプルなカーネルデバイス名で crypttab のスワップを使うのは危険です。デバイス名やパーティションレイアウトに少しでも変更があると {{ic|/etc/crypttab}} は次回の起動時に重要なデータをフォーマットしてしまいます。PARTUUID を使用した場合も同じです。 |
||
+ | |||
+ | 正規の UUID またはLABELを指定することにより、正しいパーティションを識別する方が信頼性が高くなります。 デフォルトでは、 dm-crypt と {{ic|mkswap}} がそのパーティションのコンテンツを上書きするだけで、UUID と LABEL も削除されるため、これは機能しません。 ただし、スワップオフセットを指定することは可能です。 これにより、スワップ暗号化用の永続的な UUID またはLABELを提供する以外の目的なしに、非常に小さく、空の、偽のファイルシステムを作成できます。 |
||
+ | |||
+ | 選択したラベルでファイルシステムを作成します: |
||
+ | |||
+ | # mkfs.ext2 -L ''cryptswap'' /dev/sd''X#'' 1M |
||
+ | |||
+ | デバイス名の後の異常なパラメータは、ファイルシステムのサイズを 1 MiBに制限し、暗号化されたスワップの余地を残します。 |
||
+ | |||
+ | {{hc|1=# blkid /dev/sdX#| |
||
+ | 2=/dev/sdX#: LABEL="cryptswap" UUID="b72c384e-bd3c-49aa-b7a7-a28ea81a2605" TYPE="ext2"}} |
||
+ | |||
+ | これにより、 {{ic|/dev/sdX#}} は、デバイス名やパーティション番号が将来どのように変更されるかに関係なく、 UUID または LABEL のいずれかで簡単に識別できるようになりました。 残っているのは、 {{ic|/etc/crypttab}} と {{ic|/etc/fstab}} のエントリだけです。 |
||
+ | |||
+ | {{hc|1=/etc/crypttab|2= |
||
+ | # <name> <device> <password> <options> |
||
+ | swap LABEL=''cryptswap'' /dev/urandom swap,offset=2048,cipher=aes-xts-plain64,size=256}} |
||
+ | |||
+ | この設定を使用すると、 cryptswap は、デバイス名が何であるかに関係なく、対応する LABEL を持つパーティションのみを使用しようとします。 パーティションを他の目的で使用することにした場合、それをフォーマットすることにより、 cryptswap LABEL もなくなるため、 cryptswap は次回の起動時にパーティションを上書きしません。 |
||
== suspend-to-disk を使用する == |
== suspend-to-disk を使用する == |
||
+ | コンピュータをディスクにサスペンド (ハイバネート) して復帰できるようにするには、スワップ領域を残す必要があります。あらかじめ LUKS スワップパーティションを用意して、ディスクに保存するか起動時に手動で入力できるようにしなければなりません。 |
||
− | The following three methods are alternatives for setting up an encrypted swap for resume-from-disk. If you apply any of them, be aware that critical data swapped out by the system may potentially stay in the swap over a long period (i.e. until it is overwritten). To reduce this risk consider setting up a system job which re-encrypts swap, e.g. each time the system is going into a regular shut-down, along with the method of your choice. |
||
+ | |||
+ | 以下の3つの方法はハイバネートのためにスワップの暗号化を設定する方法です。以下の方法を使う場合、スワップアウトされたデータがしばらくスワップに残り続ける可能性があるため注意してください。システムをシャットダウンするときにスワップを再暗号化するシステムジョブを設定することでリスクを減らすことができます。 |
||
=== LVM on LUKS === |
=== LVM on LUKS === |
||
+ | スワップボリュームが initramfs でアクティブ化されるボリュームグループにある場合は、 [https://wiki.archlinux.jp/index.php/%E3%82%B5%E3%82%B9%E3%83%9A%E3%83%B3%E3%83%89%E3%81%A8%E3%83%8F%E3%82%A4%E3%83%90%E3%83%8D%E3%83%BC%E3%83%88#.E3.83.8F.E3.82.A4.E3.83.90.E3.83.8D.E3.83.BC.E3.82.B7.E3.83.A7.E3.83.B3 ハイバネーション]の指示に従ってください。 |
||
− | A simple way to realize encrypted swap with suspend-to-disk support is by using [[LVM]] ontop the encryption layer, so one encrypted partition can contain infinite filesystems (root, swap, home, ...). Follow the instructions on [[Dm-crypt/Encrypting an entire system#LVM on LUKS]] and then just configure the [[Suspend and hibernate#Required_kernel_parameters|required kernel parameters]]. |
||
+ | |||
+ | ===スワップパーティションの使用=== |
||
+ | |||
+ | 暗号化されたスワップパーティションから再開するには、暗号化されたパーティションを initramfs でロック解除する必要があります。 |
||
+ | |||
+ | * [https://wiki.archlinux.jp/index.php/Dm-crypt/%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E8%A8%AD%E5%AE%9A#encrypt_.E3.83.95.E3.83.83.E3.82.AF.E3.82.92.E4.BD.BF.E3.81.86 encrypt] フックでデフォルトの busybox ベースの initramfs を使用する場合は、 [[#mkinitcpioフック]] の指示に従ってください。 |
||
+ | * [https://wiki.archlinux.jp/index.php/Dm-crypt/%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E8%A8%AD%E5%AE%9A#sd-encrypt_.E3.83.95.E3.83.83.E3.82.AF.E3.82.92.E4.BD.BF.E3.81.86 sd-encrypt] mkinitcpio フックで systemd ベースの initramfs を使用する場合は、追加の {{ic|rd.luks}} カーネルパラメーターを指定するだけでスワップパーティションのロックを解除できます。 |
||
+ | ==== mkinitcpio フック ==== |
||
− | Assuming you have setup LVM on LUKS with a swap logical volume (at {{ic|/dev/MyStorage/swap}} for example), all you need to do is add the '''resume''' [[mkinitcpio]] hook, and add the {{ic|1=resume=/dev/MyStorage/swap}} kernel parameter to your boot loader. For [[GRUB]], this can be done by appending it to the {{ic|GRUB_CMDLINE_LINUX_DEFAULT}} variable in {{ic|/etc/default/grub}}. |
||
− | {{hc|/etc/default/grub|2=GRUB_CMDLINE_LINUX_DEFAULT="... resume=/dev/MyStorage/swap"}} |
||
− | then run {{ic|grub-mkconfig -o /boot/grub/grub.cfg}} to update GRUB's configuration file. |
||
− | To add the mkinitcpio hook, edit the following line in {{ic|mkinitcpio.conf}} |
||
− | {{hc|/etc/mkinitcpio.conf|2=HOOKS="... encrypt lvm2 '''resume''' ... filesystems ..."}} |
||
− | then run {{ic|mkinitcpio -p linux}} to update the [[initramfs]] image. |
||
+ | {{Note|このセクションは {{ic|encrypt}} フックを使用する場合にのみ適用され、シングルデバイスしかアンロックできません ({{Bug|23182}})。{{ic|sd-encrypt}} を使用することで複数のデバイスをアンロックできるようになりますが ([[Dm-crypt/システム設定#sd-encrypt フックを使う]]を参照)、スワップの自動認識は使えなくなります [https://github.com/systemd/systemd/issues/4878]。}} |
||
− | === mkinitcpio フック === |
||
+ | スワップデバイスがルートファイルシステムのデバイスとは異なるデバイス上にある場合、 {{ic|encrypt}} フックによって開かれません。つまり、再開は {{ic|/etc/crypttab}} の前に行われます。 を使用できるため、再開する前に、 {{ic|/etc/mkinitcpio.conf}} にフックを作成して、スワップLUKSデバイスを開く必要があります。 |
||
− | To be able to resume after suspending the computer to disk (hibernate), it is required to keep the swap filesystem intact. Therefore, it is required to have a pre-existent LUKS swap partition, which can be stored on the disk or input manually at startup. Because the resume takes place before {{ic|/etc/crypttab}} can be used, it is required to create a hook in {{ic|/etc/mkinitcpio.conf}} to open the swap LUKS device before resuming. |
||
+ | 現在使用中のパーティションを使いたい場合、先に無効化する必要があります: |
||
− | If you want to use a partition which is currently used by the system, you have to disable it first: |
||
# swapoff /dev/<device> |
# swapoff /dev/<device> |
||
− | + | また、このデバイスを指す {{ic|/etc/crypttab}} の行をすべて削除してください。 |
|
+ | 既存のスワップパーティションを再利用する場合、パーティションが GPT パーティションテーブルに載っているときはパーティションを削除してから再作成する必要があります。[[パーティショニング]]を見てください。削除することで systemd-gpt-auto-generator によって起動時にパーティションが有効にならないようにします。 |
||
− | The following setup has the disadvantage of having to insert an additional passphrase for the swap partition manually on every boot. |
||
+ | 次の設定には、起動のたびにスワップパーティションに追加のパスフレーズを手動で挿入する必要があるという欠点があります。 |
||
− | {{Warning|1=Do not use this setup with a key file. Please read about the issue reported [https://wiki.archlinux.org/index.php?title=Talk:Dm-crypt&oldid=255742#Suspend_to_disk_instructions_are_insecure here]. Alternatively, use a gnupg-encrypted keyfile as per https://bbs.archlinux.org/viewtopic.php?id=120181}} |
||
+ | {{Warning|1={{ic|/boot}} が暗号化されていない場合は、このセットアップをキーファイルで使用しないでください。 報告された問題についてお読みください [https://wiki.archlinux.org/index.php?title=Talk:Dm-crypt&oldid=255742#Suspend_to_disk_instructions_are_insecurehere] または、https://bbs.archlinux.org/viewtopic.php?id=201881}} に従って gnupg で暗号化されたキーファイルを使用します。 |
||
− | To format the encrypted container for the swap partition, create a keyslot for a user-memorizable passphrase. |
||
+ | スワップパーティションの暗号化されたコンテナをフォーマットするには、ユーザーが記憶できるパスフレーズのキースロットを作成します。 |
||
− | Open the partition in {{ic|/dev/mapper}}: |
||
+ | |||
+ | {{ic|/dev/mapper}} にパーティションをオープン: |
||
# cryptsetup open --type luks /dev/<device> swapDevice |
# cryptsetup open --type luks /dev/<device> swapDevice |
||
+ | マッピングされたパーティションにスワップファイルシステムを作成: |
||
− | Create a swap filesystem inside the mapped partition: |
||
# mkswap /dev/mapper/swapDevice |
# mkswap /dev/mapper/swapDevice |
||
+ | 起動時にスワップをオープンにするフックを作成する必要があります。{{AUR|mkinitcpio-openswap}} を[[インストール]]して設定するか、以下の手順に従って下さい。open コマンドを記述したフックファイルを作成: |
||
− | Now you have to create a hook to open the swap at boot time. You can either [[install]] and configure {{AUR|mkinitcpio-openswap}}, or follow the following instructions. Create a hook file containing the open command: |
||
− | {{hc|/ |
+ | {{hc|/etc/initcpio/hooks/openswap|<nowiki> |
run_hook () |
run_hook () |
||
{ |
{ |
||
87行目: | 121行目: | ||
</nowiki>}} |
</nowiki>}} |
||
+ | パスワードを入力してスワップデバイスを開くため、または: |
||
− | for opening the swap device by typing your password or |
||
− | {{hc|/ |
+ | {{hc|/etc/initcpio/hooks/openswap|<nowiki> |
run_hook () |
run_hook () |
||
{ |
{ |
||
+ | ## Optional: To avoid race conditions |
||
+ | x=0; |
||
+ | while [ ! -b /dev/mapper/<root-device> ] && [ $x -le 10 ]; do |
||
+ | x=$((x+1)) |
||
+ | sleep .2 |
||
+ | done |
||
+ | ## End of optional |
||
+ | |||
mkdir crypto_key_device |
mkdir crypto_key_device |
||
mount /dev/mapper/<root-device> crypto_key_device |
mount /dev/mapper/<root-device> crypto_key_device |
||
99行目: | 141行目: | ||
</nowiki>}} |
</nowiki>}} |
||
+ | 一部のコンピューターでは、復号化プロセスとデバイスの列挙が完了する前に mkinitcpio がデバイスをマウントしようとすると、競合状態が発生する場合があります。 コメント付きの ''オプション'' ブロックは、ルートデバイスをマウントする準備ができるまで、起動プロセスを最大2秒遅らせます。 (暗号化されたルートデバイスからキーファイルをロードしてスワップデバイスを開くため。) |
||
− | for opening the swap device by loading a keyfile from a crypted root device |
||
− | {{Note| |
+ | {{Note|スワップがソリッドステートドライブ (SSD) 上にあり Discard/TRIM を使用する場合、{{ic|--allow-discards}} オプションを上記の openswap フックの cryptsetup 行に追加する必要があります。discard について詳しくは [[Dm-crypt/特記事項#ソリッドステートドライブ (SSD) の Discard/TRIM のサポート]]や [[SSD]] の記事を見てください。さらに 'discard' オプションをスワップデバイスの fstab エントリに追加してください。}} |
+ | 次に、フック設定ファイルを作成して編集します: |
||
− | Then create and edit the hook setup file: |
||
− | {{hc|/ |
+ | {{hc|/etc/initcpio/install/openswap|<nowiki> |
build () |
build () |
||
{ |
{ |
||
117行目: | 159行目: | ||
</nowiki>}} |
</nowiki>}} |
||
− | + | フック {{ic|openswap}} を {{ic|/etc/mkinitcpio.conf}} の {{ic|HOOKS}} 配列の {{ic|filesystem}} の前で {{ic|encrypt} の後に追加します}} {{ic|openswap}} の後に {{ic|resume}} フックを追加することを忘れないでください。 |
|
− | <nowiki>HOOKS="... encrypt openswap resume filesystems ..."</nowiki> |
||
+ | HOOKS=(... encrypt openswap resume filesystems ...) |
||
− | Regenerate the boot image: |
||
+ | [https://wiki.archlinux.jp/index.php/Mkinitcpio#.E3.82.A4.E3.83.A1.E3.83.BC.E3.82.B8.E4.BD.9C.E6.88.90.E3.81.A8.E3.82.A2.E3.82.AF.E3.83.86.E3.82.A3.E3.83.99.E3.83.BC.E3.82.B7.E3.83.A7.E3.83.B3 イメージ作成とアクティベーション] |
||
− | # mkinitcpio -p linux |
||
+ | |||
+ | 次の行を追加して、マップされたパーティションを{{ic | / etc / fstab}}に追加します。 |
||
− | Add the mapped partition to {{ic|/etc/fstab}} by adding the following line: |
||
/dev/mapper/swapDevice swap swap defaults 0 0 |
/dev/mapper/swapDevice swap swap defaults 0 0 |
||
+ | {{ic|/dev/mapper/swapDevice}} から再開するようにシステムを設定します。たとえば、カーネル休止状態をサポートする [[GRUB]] を使用する場合は、カーネルパラメータ {{ic|1=resume=/dev/mapper/swapDevice}} を {{ic|GRUB_CMDLINE_LINUX_DEFAULT}} に追加して、 GRUB に追加します。 {{ic|/etc/default/grub}} の変数。暗号化されたルートパーティションとスワップパーティションを持つカーネルラインは、次のようになります。 |
||
− | Set up your system to resume from {{ic|/dev/mapper/swapDevice}}. For example, if you use [[GRUB]] with kernel hibernation support, add {{ic|resume<nowiki>=</nowiki>/dev/mapper/swapDevice}} to the kernel line in {{ic|/boot/grub/grub.cfg}}. A line with encrypted root and swap partitions can look like this: |
||
kernel /vmlinuz-linux cryptdevice=/dev/sda2:rootDevice root=/dev/mapper/rootDevice resume=/dev/mapper/swapDevice ro |
kernel /vmlinuz-linux cryptdevice=/dev/sda2:rootDevice root=/dev/mapper/rootDevice resume=/dev/mapper/swapDevice ro |
||
+ | 起動時に、 {{ic|openswap}} フックがスワップパーティションを開くので、カーネルレジュームがそれを使用できます。休止状態から再開するために特別なフックを使用する場合は、それらが {{ic|HOOKS}} 配列の '''後''' {{ic|openswap}} に配置されていることを確認してください。 initrd が swap を開くため、この場合、 {{ic|/etc/crypttab}} に swapDevice のエントリが必要ないことに注意してください。 |
||
− | To make the parameter persistent on kernel updates, add it to {{ic|/etc/default/grub}}. |
||
− | |||
− | At boot time, the {{ic|openswap}} hook will open the swap partition so the kernel resume may use it. If you use special hooks for resuming from hibernation, make sure they are placed '''after''' {{ic|openswap}} in the {{ic|HOOKS}} array. Please note that because of initrd opening swap, there is no entry for swapDevice in {{ic|/etc/crypttab}} needed in this case. |
||
=== スワップファイルを使う === |
=== スワップファイルを使う === |
||
+ | スワップファイルは、既存のパーティション内のスワップスペースを予約するために使用でき、暗号化されたブロックデバイスのパーティション内にセットアップすることもできます。 |
||
− | A swap file can be used to reserve swap-space within an existing partition and may also be setup inside an encrypted blockdevice's partition. When resuming from a swapfile the {{ic|resume}} hook must be supplied with the passphrase to unlock the device where the swap file is located. |
||
− | |||
− | {{Warning|[[Dm-crypt/Drive_preparation#Btrfs_subvolumes|Btrfs]] does not support swap files. Failure to heed this warning may result in file system corruption. While a swap file may be used on [[Btrfs#Swap_file|Btrfs]] when mounted through a loop device, this will result in severely degraded swap performance.}} |
||
− | |||
− | To create it, first choose a mapped partition (e.g. {{ic|/dev/mapper/rootDevice}}) whose mounted filesystem (e.g. {{ic|/}}) contains enough free space to create a swapfile with the desired size. |
||
− | |||
− | Now [[Swap#Swap file creation|create the swap file]] (e.g. {{ic|/swapfile}}) inside the mounted filesystem of your chosen mapped partition. Be sure to activate it with {{ic|swapon}} and also add it to your {{ic|/etc/fstab}} file afterward. Note that the swapfile's previous contents remain transparent over reboots. |
||
− | |||
− | Set up your system to resume from your chosen mapped partition. For example, if you use [[GRUB]] with kernel hibernation support, add {{ic|resume<nowiki>=</nowiki>}}''your chosen mapped partition'' and {{ic|resume_offset<nowiki>=</nowiki>}}''see calculation command below'' to the kernel line in {{ic|/boot/grub/grub.cfg}}. A line with encrypted root partition can look like this: |
||
− | |||
− | kernel /vmlinuz-linux cryptdevice=/dev/sda2:rootDevice root=/dev/mapper/rootDevice resume=/dev/mapper/rootDevice resume_offset=123456789 ro |
||
− | |||
− | The {{ic|resume_offset}} of the swap-file points to the start (extent zero) of the file and can be identified like this: |
||
− | |||
− | # filefrag -v /swapfile | awk '{if($1=="0:"){print $4}}' |
||
+ | [https://wiki.archlinux.jp/index.php/%E3%82%B9%E3%83%AF%E3%83%83%E3%83%97#.E3.82.B9.E3.83.AF.E3.83.83.E3.83.97.E3.83.95.E3.82.A1.E3.82.A4.E3.83.AB スワップファイル] のスワップファイル作成手順に従い、 [https://wiki.archlinux.jp/index.php/%E3%82%B5%E3%82%B9%E3%83%9A%E3%83%B3%E3%83%89%E3%81%A8%E3%83%8F%E3%82%A4%E3%83%90%E3%83%8D%E3%83%BC%E3%83%88#.E3.82.B9.E3.83.AF.E3.83.83.E3.83.97.E3.83.95.E3.82.A1.E3.82.A4.E3.83.AB.E3.81.AB.E3.83.8F.E3.82.A4.E3.83.90.E3.83.8D.E3.83.BC.E3.82.B7.E3.83.A7.E3.83.B3 スワップファイルにハイバネーション] に従って休止状態を設定します。 |
||
− | Add the {{ic|resume}} hook to your {{ic|etc/mkinitcpio.conf}} file and [[Mkinitcpio#Image_creation_and_activation|rebuild the image]] afterward: |
||
+ | {{Note|スワップファイルから再開する場合、 {{ic|resume}} パラメータは、スワップファイルを含むファイルシステムを含むロック解除/マップされたデバイスを指している必要があります。}} |
||
− | HOOKS="... encrypt '''resume''' ... filesystems ..." |
||
+ | == 既知の問題 == |
||
− | If you use a USB keyboard to enter your decryption password, then the {{ic|keyboard}} module '''must''' appear in front of the {{ic|encrypt}} hook, as shown below. Otherwise, you will not be able to boot your computer because you could not enter your decryption password to decrypt your Linux root partition! (If you still have this problem after adding {{ic|keyboard}}, try {{ic|usbinput}}, though this is deprecated.) |
||
+ | * ログに "Stopped (with error) /dev/dm-1" と出力される場合 [https://github.com/systemd/systemd/issues/1620] を見てください。 |
||
− | HOOKS="... '''keyboard''' encrypt ..." |
2024年6月8日 (土) 13:47時点における最新版
必要に応じて、以下で説明する様々な方法を使ってスワップパーティションを暗号化することができます。再起動時にスワップパーティションを (新しい暗号を使って) 初期化することで、過去にスワップアウトされた重要なファイルの断片がそのまま残ってしまうのを防ぐことができ、強固なデータの保護が可能になります。ただし、スワップを暗号化すると基本的にハイバネートが使えなくなってしまいます。
目次
suspend-to-disk を使用しない
suspend-to-disk (ハイバネーション) が必要ない場合、/etc/crypttab
を設定することで plain dm-crypt を使って起動時にランダムなパスワードでスワップパーティションを復号化することができます。ランダムなパスワードはシャットダウン時に破棄されるため、スワップデバイス内のデータには二度とアクセスできなくなります。
/etc/crypttab
の swap
から始まる行をアンコメントするだけで機能を有効にできます。<device>
パラメータはあなたの使用しているスワップデバイスの名前に変更してください。例:
/etc/crypttab
# <name> <device> <password> <options> swap /dev/sdX# /dev/urandom swap,cipher=aes-cbc-essiv:sha256,size=256
上記の設定で /dev/sdX#
が /dev/mapper/swap
にスワップパーティションとしてマッピングされ、通常のスワップと同じように /etc/fstab
に追加できるようになります。既にスワップパーティションを使っていた場合、無効化するか fstab エントリを再利用してデバイスを /dev/mapper/swap
に変更してください。大抵の場合はデフォルトのオプションで問題ありません。他のオプションやカラムの説明については man 5 crypttab
および point cryptsetup FAQ 2.3 を見てください。
カーネルの命名の代わりに by-id
による命名を使う場合、まずスワップデバイスを確認してください:
# ls -l /dev/disk/*/* | grep sdaX
lrwxrwxrwx 1 root root 10 Oct 12 16:54 /dev/disk/by-id/ata-WDC_WD2500BEVT-22ZCT0_WD-WXE908VF0470-partX -> ../../sdaX lrwxrwxrwx 1 root root 10 Oct 12 16:54 /dev/disk/by-id/wwn-0x60015ee0000b237f-partX -> ../../sdaX
そして出力された行の中から適切なデバイスを選択して以下のように設定してください:
/etc/crypttab
# <name> <device> <password> <options> swap /dev/disk/by-id/ata-WDC_WD2500BEVT-22ZCT0_WD-WXE908VF0470-partX /dev/urandom swap,cipher=aes-cbc-essiv:sha256,size=256
再起動後 swapon -s
を実行することで任意のデバイスマッパーエントリ (例: /dev/dm-1
) が表示され、lsblk
コマンドで FSTYPE
カラムの crypt が表示されます。起動時に新しく暗号化するため、/dev/mapper/swap
の UUID は毎回変わります。
UUID と LABEL
/dev/sdX#
あるいは /dev/disk/by-id/ata-SERIAL-partX
などのシンプルなカーネルデバイス名で crypttab のスワップを使うのは危険です。デバイス名やパーティションレイアウトに少しでも変更があると /etc/crypttab
は次回の起動時に重要なデータをフォーマットしてしまいます。PARTUUID を使用した場合も同じです。
正規の UUID またはLABELを指定することにより、正しいパーティションを識別する方が信頼性が高くなります。 デフォルトでは、 dm-crypt と mkswap
がそのパーティションのコンテンツを上書きするだけで、UUID と LABEL も削除されるため、これは機能しません。 ただし、スワップオフセットを指定することは可能です。 これにより、スワップ暗号化用の永続的な UUID またはLABELを提供する以外の目的なしに、非常に小さく、空の、偽のファイルシステムを作成できます。
選択したラベルでファイルシステムを作成します:
# mkfs.ext2 -L cryptswap /dev/sdX# 1M
デバイス名の後の異常なパラメータは、ファイルシステムのサイズを 1 MiBに制限し、暗号化されたスワップの余地を残します。
# blkid /dev/sdX#
/dev/sdX#: LABEL="cryptswap" UUID="b72c384e-bd3c-49aa-b7a7-a28ea81a2605" TYPE="ext2"
これにより、 /dev/sdX#
は、デバイス名やパーティション番号が将来どのように変更されるかに関係なく、 UUID または LABEL のいずれかで簡単に識別できるようになりました。 残っているのは、 /etc/crypttab
と /etc/fstab
のエントリだけです。
/etc/crypttab
# <name> <device> <password> <options> swap LABEL=cryptswap /dev/urandom swap,offset=2048,cipher=aes-xts-plain64,size=256
この設定を使用すると、 cryptswap は、デバイス名が何であるかに関係なく、対応する LABEL を持つパーティションのみを使用しようとします。 パーティションを他の目的で使用することにした場合、それをフォーマットすることにより、 cryptswap LABEL もなくなるため、 cryptswap は次回の起動時にパーティションを上書きしません。
suspend-to-disk を使用する
コンピュータをディスクにサスペンド (ハイバネート) して復帰できるようにするには、スワップ領域を残す必要があります。あらかじめ LUKS スワップパーティションを用意して、ディスクに保存するか起動時に手動で入力できるようにしなければなりません。
以下の3つの方法はハイバネートのためにスワップの暗号化を設定する方法です。以下の方法を使う場合、スワップアウトされたデータがしばらくスワップに残り続ける可能性があるため注意してください。システムをシャットダウンするときにスワップを再暗号化するシステムジョブを設定することでリスクを減らすことができます。
LVM on LUKS
スワップボリュームが initramfs でアクティブ化されるボリュームグループにある場合は、 ハイバネーションの指示に従ってください。
スワップパーティションの使用
暗号化されたスワップパーティションから再開するには、暗号化されたパーティションを initramfs でロック解除する必要があります。
- encrypt フックでデフォルトの busybox ベースの initramfs を使用する場合は、 #mkinitcpioフック の指示に従ってください。
- sd-encrypt mkinitcpio フックで systemd ベースの initramfs を使用する場合は、追加の
rd.luks
カーネルパラメーターを指定するだけでスワップパーティションのロックを解除できます。
mkinitcpio フック
スワップデバイスがルートファイルシステムのデバイスとは異なるデバイス上にある場合、 encrypt
フックによって開かれません。つまり、再開は /etc/crypttab
の前に行われます。 を使用できるため、再開する前に、 /etc/mkinitcpio.conf
にフックを作成して、スワップLUKSデバイスを開く必要があります。
現在使用中のパーティションを使いたい場合、先に無効化する必要があります:
# swapoff /dev/<device>
また、このデバイスを指す /etc/crypttab
の行をすべて削除してください。
既存のスワップパーティションを再利用する場合、パーティションが GPT パーティションテーブルに載っているときはパーティションを削除してから再作成する必要があります。パーティショニングを見てください。削除することで systemd-gpt-auto-generator によって起動時にパーティションが有効にならないようにします。
次の設定には、起動のたびにスワップパーティションに追加のパスフレーズを手動で挿入する必要があるという欠点があります。
に従って gnupg で暗号化されたキーファイルを使用します。
スワップパーティションの暗号化されたコンテナをフォーマットするには、ユーザーが記憶できるパスフレーズのキースロットを作成します。
/dev/mapper
にパーティションをオープン:
# cryptsetup open --type luks /dev/<device> swapDevice
マッピングされたパーティションにスワップファイルシステムを作成:
# mkswap /dev/mapper/swapDevice
起動時にスワップをオープンにするフックを作成する必要があります。mkinitcpio-openswapAUR をインストールして設定するか、以下の手順に従って下さい。open コマンドを記述したフックファイルを作成:
/etc/initcpio/hooks/openswap
run_hook () { cryptsetup open --type luks /dev/<device> swapDevice }
パスワードを入力してスワップデバイスを開くため、または:
/etc/initcpio/hooks/openswap
run_hook () { ## Optional: To avoid race conditions x=0; while [ ! -b /dev/mapper/<root-device> ] && [ $x -le 10 ]; do x=$((x+1)) sleep .2 done ## End of optional mkdir crypto_key_device mount /dev/mapper/<root-device> crypto_key_device cryptsetup open --type luks --key-file crypto_key_device/<path-to-the-key> /dev/<device> swapDevice umount crypto_key_device }
一部のコンピューターでは、復号化プロセスとデバイスの列挙が完了する前に mkinitcpio がデバイスをマウントしようとすると、競合状態が発生する場合があります。 コメント付きの オプション ブロックは、ルートデバイスをマウントする準備ができるまで、起動プロセスを最大2秒遅らせます。 (暗号化されたルートデバイスからキーファイルをロードしてスワップデバイスを開くため。)
次に、フック設定ファイルを作成して編集します:
/etc/initcpio/install/openswap
build () { add_runscript } help () { cat<<HELPEOF This opens the swap encrypted partition /dev/<device> in /dev/mapper/swapDevice HELPEOF }
フック openswap
を /etc/mkinitcpio.conf
の HOOKS
配列の filesystem
の前で encrypt} の後に追加します
openswap
の後に resume
フックを追加することを忘れないでください。
HOOKS=(... encrypt openswap resume filesystems ...)
次の行を追加して、マップされたパーティションを / etc / fstab
に追加します。
/dev/mapper/swapDevice swap swap defaults 0 0
/dev/mapper/swapDevice
から再開するようにシステムを設定します。たとえば、カーネル休止状態をサポートする GRUB を使用する場合は、カーネルパラメータ resume=/dev/mapper/swapDevice
を GRUB_CMDLINE_LINUX_DEFAULT
に追加して、 GRUB に追加します。 /etc/default/grub
の変数。暗号化されたルートパーティションとスワップパーティションを持つカーネルラインは、次のようになります。
kernel /vmlinuz-linux cryptdevice=/dev/sda2:rootDevice root=/dev/mapper/rootDevice resume=/dev/mapper/swapDevice ro
起動時に、 openswap
フックがスワップパーティションを開くので、カーネルレジュームがそれを使用できます。休止状態から再開するために特別なフックを使用する場合は、それらが HOOKS
配列の 後 openswap
に配置されていることを確認してください。 initrd が swap を開くため、この場合、 /etc/crypttab
に swapDevice のエントリが必要ないことに注意してください。
スワップファイルを使う
スワップファイルは、既存のパーティション内のスワップスペースを予約するために使用でき、暗号化されたブロックデバイスのパーティション内にセットアップすることもできます。
スワップファイル のスワップファイル作成手順に従い、 スワップファイルにハイバネーション に従って休止状態を設定します。
既知の問題
- ログに "Stopped (with error) /dev/dm-1" と出力される場合 [4] を見てください。