web-dev-qa-db-ja.com

Ubuntu 14.04は、非公式のハッキングに頼らずに暗号化されたスワップを使用できますか?

Ubuntu 14.04の新規インストールでは、ブート中にこのエラーメッセージが表示されます

/ dev/mapper/cryptswap1のディスクドライブがまだ準備ができていないか、存在しない

また、スワップパーティションはアクティブになりません。これまでの私の検索から、私は見つけました:

  • これは広範囲に及ぶ問題であり、おそらく暗号化されたスワップが有効化されたすべてのUbuntu 14.04インストールに影響します。
  • 問題の一部は、ブート中に生成された暗号化されたスワップヘッダーが暗号化されていないスワップヘッダーを上書きし、次回のブート中に正しいパーティションを再度見つけることができないバグを修正するのが簡単です。
  • それを機能させるために提案されたすべての解決策は、次のような単純な回避策であるように見えます。 2. /etc/rc.localファイルを作成(またはブート中にアクティブ化する独自のサービスを定義)して、スワップパーティションをアクティブ化します。

この種のハックを使用せずに、Ubuntu 14.04で暗号化されたスワップを使用することは可能ですか?私は、インストールされたすべてのパッケージを完全に更新し、それらの構成ファイルを修正します。これらの構成ファイルは、バグのあるインストールスクリプトにより誤ったコンテンツで初期化されました。スワップをアクティブにするために独自のスクリプトを使用する必要はありません。パッケージの更新時にこの種のアプローチが壊れる傾向があるためです。

これは私の/etc/crypttabのようです:

cryptswap1 /dev/sda6 /dev/urandom swap,cipher=aes-cbc-essiv:sha256,offset=16

そして、私の/etc/fstabからの関連する行は次のとおりです。

/dev/mapper/cryptswap1 none swap sw 0 0

私がこれまでに試したこと:

/ dev/mapper/cryptswap1のディスクドライブはまだ準備ができていないか、さまざまなオプションを試しても表示されない 同じシナリオの可能性について尋ねました。

ただし、唯一の答えは、暗号化されていないスワップを使用することです。

http://ubuntuforums.org/showthread.php?t=2200995 を見つけましたが、解決策があると主張していますが、解決策は私には意味がありません。

提案されたソリューションの最初の部分は、mkswapを使用して暗号化されたスワップヘッダーを書き換えることです。ただし、このヘッダーはキーで暗号化されているため、再起動後も保持されないため、この手順では、次回の再起動後にスワップが機能することはありません。

また、/ etc/fstabの更新を提案しますが、fstabは既に正しく表示されているようです。

この記事では、私が使用していないLVMを想定しています。私は、それが違いを生むだろうという方法を知りません。

https://bugs.launchpad.net/ubuntu/+source/ecryptfs-utils/+bug/1310058 が見つかりました。これは、スワップヘッダーが上書きされ、offsetを追加する問題を理解するのに役立ちましたcrypttabおよび暗号化されていないスワップヘッダーを再生成すると、この問題を解決できます。

ただし、上書きされたヘッダーだけが問題になっているわけではありません。別の問題がありますが、まだ完全には理解していません。

問題について私が見つけた他のこと:

/lib/cryptsetup/cryptdisks.functionsの読み取りから、ブート時にデバイスはcryptswap1_unformattedという名前を使用して作成され、暗号化されたスワップヘッダーが書き込まれ、デバイスの名前がcryptswap1に変更されることを学びました。カーネルログでこのエラーメッセージを見つけます。

[   39.419429] device-mapper: ioctl: Unable to change name on mapped device cryptswap1_unformatted to one that already exists: cryptswap1

紛らわしいことに、その結​​果はデバイスがcryptswap1という名前を持つことになりますが、swapヘッダーは書き込まれません。

スワップは、ファイルシステムチェックが実行されたブート中に機能します。恐ろしいcryptswap1 is not ready yetエラーが発生するのは、ファイルシステムチェックが実行されていないときだけです。

/var/log/upstart/cryptdisks.logにエラーメッセージがあります

Device cryptswap1_unformatted already exists.

ただし、/lib/cryptsetup/cryptdisks.functionsにログを追加することで、/etc/init.d/cryptdisks-early/etc/init/cryptdisks.confの間に競合があることを知りました。 cryptdisks.functionsに追加するロギングは、2つのスクリプトのアクションがインターリーブされる方法に影響を与える可能性があり、場合によっては機能するようになります。

2つが同じデバイスを並行して処理することを想定していないことは明らかです。ブートごとにスワップが機能するように、2つのスクリプトをシリアル化するにはどうすればよいですか?

2
kasperd

Ubuntu 14.04でcryptswap1を正しく機能させるには、解決する必要がある2つの問題があります。

問題1:スワップヘッダーの上書き

パーティションはもともと暗号化されていないスワップヘッダーでフォーマットされており、ブート中に使用する正しいパーティションを見つけるために使用されます。暗号化キーはブートごとに変わるため、暗号化されたスワップヘッダーはブートごとに書き換えられます。 /etc/crypttabの生成のバグにより、暗号化されたスワップヘッダーは、暗号化されていないスワップヘッダーを上書きします。これにより、今後のすべてのブートでスワップパーティションが検出されなくなります。

問題2:起動中の競合状態

/etc/init.d/cryptdisks-early/etc/init/cryptdisks.confの間には、起動中に競合状態があります。両方とも、crypttabにリストされているすべてのデバイスを同時にアクティブにしようとします。暗号化されたスワップの場合、ほとんどの場合、競合状態の結果は、まったく機能しないことです。潜在的なデータ損失を防ぐために、一部の健全性チェックが失敗し、暗号化されたスワップヘッダーの書き込みがスキップされます。

問題の修正と回避

最初の問題は簡単に修正できます。 2番目の方法は回避できます。 /etc/crypttabでスワップ行を識別します。次のようになります(UUIDが異なることを除く)。

cryptswap1 UUID=f9a0f20c-fac4-408c-a8b9-47300216f727 /dev/urandom swap,cipher=aes-cbc-essiv:sha256

私の場合、これは/etc/crypttabの唯一の行でした。スワップヘッダーの上書きを修正するには、オフセットを追加する必要があります。ソースは、使用する正しい値が正確に何であるかについては意見が異なりますが、大きすぎる値を使用しても害はありません。 16のオフセットを使用して動作させました。

さらにnoearlyを追加しました。これにより/etc/init.d/cryptdisks-earlyがこの行を無視し、その方法で競合状態が回避されます。

結果の行は次のようになります。

cryptswap1 UUID=f9a0f20c-fac4-408c-a8b9-47300216f727 /dev/urandom swap,cipher=aes-cbc-essiv:sha256,offset=16,noearly

これにより、暗号化されていないスワップヘッダーが再度上書きされるのを防ぐことができますが、パーティション上で再作成する必要があります。間違ったパーティションを使用するとwillデータが失われるため、このステップでは正しいパーティションを使用することが重要です。 fdisk -lを使用して正しいパーティションを見つけました。私の場合は/dev/sda6です。

mkswapを使用して、暗号化されていないスワップヘッダーを書き換えます。

mkswap /dev/sda6 -U f9a0f20c-fac4-408c-a8b9-47300216f727

UUIDは、スワップパーティションが上書きされる前に持っていたものです(/etc/crypttabで確認できます)。これが完了したら、再起動が必要であり、すべて動作するはずです。

正しい操作の検証

3回再起動して、機能し続けることを確認することをお勧めします。

エラーメッセージthe disk drive for /dev/mapper/cryptswap1 is not ready yet or not presentは、起動中に短時間表示されます。ただし、ブートプロセスが完了する前に準備が整うため、これは問題ではないようです。

ログインしてcat /proc/swapsと入力し、スワップがアクティブであることを確認します。 /dev/dm-0という名前のスワップパーティションが表示されます。dmは、暗号化を提供するデバイスマッパーレイヤーを実際に使用していることを示します。

4
kasperd