パーティションを自動復号化するようにLVMとLUKSを構成する方法は?


21

私は最近、完全なlvm暗号化(セットアップからインストール)でubuntuサーバー11.04をインストールしました。キーファイルを使用して自動ロック解除を行いたいと思います。私はこのガイドhttp://ubuntuforums.org/showthread.php?t=837416に従うことを試みました

このコマンドでキーを生成しました: sudo dd if=/dev/urandom of=/boot/grub/keyfile bs=1024 count=4

/boot/grub暗号化されていないと思うので入れました。このコンマsudo cryptsetup luksAddKey /dev/sdX /boot/grub/keyfile でキーを追加しようとすると、パスフレーズが要求され、何も入力しないと、画面に何も印刷されません!私はそれを無視し、他の手順を続行して再起動しますが、何も起こらず、パスフレーズを要求します。

助けてくれてありがとう 。


パスフレーズを入力せずに復号化するということですか?ブートプロセスがそれを行うことができる場合、ボリュームを復号化するために必要なキーは、ブート中にアクセス可能なシステム上にある必要があります。データ盗難からあなたを保護するためにどのように期待しますか?
ジェームズヘンストリッジ

はい、キーを隠しパーティションまたはUSBフラッシュドライブに入れると思います。それは可能ですか?
イソマン

問題は、ブートローダーがキーを見つけることができる場合、(暗号化されていない)ブートコードを検査する人もそれを見つけることができるということです。USBスティックにキーを保存する場合、スティックがコンピューターで盗まれないことを十分に確認する必要があります。起動中にスティックを接続するだけの場合、パスフレーズを入力するよりも便利ではありません。
ジェームズヘンストリッジ

回答:


27

新しいホームサーバーでこれを行ったばかりですが、グーグルや推測に多くの時間がかかりましたが、うまくいきました。ここで手順を再現してみます。私はUbuntu Server 11.10を使用しており、暗号化されたLVMを使用してほぼ標準のインストールを開始したので、そこから行った変更を関連付けます。

セットアップ:

  • / dev / sda1は暗号化されていない/ bootパーティションです
  • / dev / sda5は、root、swap、およびhome以外のすべてを含む私のlvmパーティションです
  • / dev / sdc1は、キーファイルを保存するUSB​​フラッシュドライブのパーティションです

最初に、ホームディレクトリにキーファイルを作成しました。

dd if=/dev/urandom of=keyfile bs=512 count=4

(より大きなブロックサイズを使用するか、より大きなキーにカウントすることができます)

cryptsetupに新しいキーを伝えます(重要なのはファイル名ではなく内容です):

sudo cryptsetup luksAddKey /dev/sda5 keyfile

次に、USBフラッシュドライブをext2でフォーマットし、ラベルを付けました。ラベルを使用したので、後でラベルでマウントし、問題が発生した場合に備えてUSBフラッシュドライブを交換できます。

sudo mkfs -t ext2 /dev/sdc1
sudo e2label /dev/sdc1 KEYS

(もちろん、デバイスは異なります)

次に、キーファイルをルートモード400が所有するUSB​​フラッシュドライブにコピーします。

mkdir KEYS
sudo mount /dev/sdc1 KEYS
sudo cp keyfile KEYS
sudo chown root KEYS/keyfile
sudo chmod 400 KEYS/keyfile

/ etc / crypttabを変更します。元々含まれていた鉱山

sd5_crypt UUID=(...) none luks

に変更しました

sd5_crypt UUID=(...) /dev/disk/by-label/KEYS:/keyfile luks,keyscript=/lib/cryptsetup/scripts/passdev

最後に、initramfsを更新します。

sudo update-initramfs -uv

USBフラッシュドライブのキーファイルを使用して起動します。フラッシュドライブを取り外した場合(休日に行ったときなど)は起動せず、データは安全です。

USBフラッシュドライブが見つからない場合にパスフレーズを要求する方法を知っている人は、フォールバックとして便利です。これがお役に立てば幸いです。どんな追加や修正も歓迎です!


3
パスワードプロンプトの取得方法がわからない場合は、フラッシュドライブのブート可能パーティションを使用して、キーファイルを探す代替initramfsを介してロードし、ハードディスク上のデフォルトブートに、プロンプトを表示する通常のinitramfsをロードすることができます。パスワード。
モニカの復職-ζ--12年

1
@ 3pic数か月前にこれを行って以来、100%確信が持てません。しかし、Ubuntuは仮想ファイルシステムを起動します。スクリプトをkeyscript=/lib/cryptsetup/scripts/passdev追加しpassdevます。そしてupdate-initramfs -uv、ファイルシステムのアーカイブを再構築します。
VarunAgw

1
@RandyOrrisonこれは本当に素晴らしいです。できます。しかし... initramを過ぎた後、A start job is running for dev-sda8:-keyfile.device (1min 18s...)etcなどと1〜2分間座ります。パスし、すべてがマウントされますが、しばらくハングします。ログには、「デバイスdev-sda8:-sda7keyfile.deviceの待機がタイムアウトしました。sda7cryptの暗号セットアップの依存関係が失敗しました。」もちろん、それはすでにinitramによってマウントされていますが、....何が間違っていますか?
-deitch

1
なんらかの理由で、systemdを好まない/動作しないようです。keyscriptフィールドを完全に無視するだけです。
エティエンヌブルーイン

1
Ubuntu 17.10以降では、ルートファイルシステムがluksボリューム上にあり、キーファイルがある場合、update-initramfsツールはluksボリュームを起動できるinitramfsイメージを生成しません。キーファイル値として「なし」を残し、keyscript = / etc / my-keyscriptを持つようにオプションを設定することにより、機能させることができます。ここで、/ etc / my-keyscriptはキーを出力するシェルスクリプトです。
マチル

6

howtoforge.comからのこれらの手順により、自動的に復号化するボリュームを使用して実行できました。

方法:キーファイルを使用してLUKS暗号化ドライブを自動的にロック解除する

ステップ1:ランダムキーファイルを作成する

sudo dd if=/dev/urandom of=/root/keyfile bs=1024 count=4

ステップ2:キーファイルをルートに対して読み取り専用にする

sudo chmod 0400 /root/keyfile

これにより、キーファイルはルートのみが読み取り可能になります。誰かがこのキーファイルにアクセスできるようになったら、とにかくコンピューターに大きな問題があります。

または、目的のキーファイルをroot:rootにchownし、/ rootフォルダーに移動します

ステップ3:キーファイルをLUKSに追加する

LUKS / dm_crypt対応デバイスは、最大10個の異なるキーファイル/パスワードを保持できます。そのため、すでにセットアップされたパスワードの次に、このキーファイルを追加の認証方法として追加します。

sudo cryptsetup luksAddKey /dev/sdX /root/keyfile

sdXはもちろんLUKSデバイスです。

最初に、ドライブのロックを解除するための(既存の)パスワードの入力を求められます。すべてが正常に機能する場合、次のような出力が得られます。

Enter any LUKS passphrase:
key slot 0 unlocked.
Command successful.

ステップ4:マッパーを作成する

LUKSデバイスは、fstabで参照できるマッパーを作成する必要があります。/ etc / crypttabを開きます

sudo nano /etc/crypttab

次に、次のような行を追加します。

sdX_crypt      /dev/sdX  /root/keyfile  luks

または、デバイスのUUIDを使用できます。

sdX_crypt      /dev/disk/by-uuid/247ad289-dbe5-4419-9965-e3cd30f0b080  /root/keyfile  luks

sdX_cryptは、作成されるマッパーの名前です。ここでは、「音楽」、「映画」、「sfdsfawe」など、任意の名前を使用できます。

ctrl-xを発行してファイルを保存して閉じ、Enter、Enterを押します。Ctrl-xはnanoを閉じますが、最初にファイルを保存するように要求します[yes = enter]および名前を[same name = enter]にします。

そこで実際に行ったのは、パスワードエントリの代わりに/ root / keyfileを使用してドライブのロックを解除することです。

ステップ5:デバイスをfstabにマウントする

これでロック解除されたデバイスができました(まだではありませんが、システムの起動中です)。今すぐマウントする必要があります。/ etc / fstabを開きます。

sudo nano /etc/fstab

次のような新しいエントリを追加します。

/dev/mapper/sdX_crypt  /media/sdX     ext3    defaults        0       2

手順4で追加した正しいマッパー名があることを確認してください。また、マウントポイント/フォルダーが存在することを確認してください。追加した後、ファイルを再度保存して閉じます(ctrl-x、enter、enter)。

ステップ6:再起動または再マウント

それでおしまい。これで再起動でき、追加のデバイスが自動ロック解除されてマウントされます。すべてのデバイスを再マウントしてテストすることもできます。

sudo mount -a

1
更新するのを忘れてinitramfs、100%必要
3pic

6

Randy Orrisonの答えを改善します。これは私が作成した小さなスクリプトで、キーファイルが見つからなかった場合にユーザーにパスワードを求めるフォールバックを行います。

#!/bin/sh

ask_for_password () {
    cryptkey="Unlocking the disk $cryptsource ($crypttarget)\nEnter passphrase: "
    if [ -x /bin/plymouth ] && plymouth --ping; then
        cryptkeyscript="plymouth ask-for-password --prompt"
        cryptkey=$(printf "$cryptkey")
    else
        cryptkeyscript="/lib/cryptsetup/askpass"
    fi
    $cryptkeyscript "$cryptkey"
}

device=$(echo $1 | cut -d: -f1)
filepath=$(echo $1 | cut -d: -f2)

# Ask for password if device doesn't exist
if [ ! -b $device ]; then
    ask_for_password
    exit
fi

mkdir /tmp/auto_unlocker
mount $device /tmp/auto_unlocker

# Again ask for password if device exist but file doesn't exist
if [ ! -e /tmp/auto_unlocker$filepath ]; then
    ask_for_password
else
    cat /tmp/auto_unlocker$filepath
fi

umount /tmp/auto_unlocker

それを保存し、このファイルへのパスに置き換えkeyscript=/lib/cryptsetup/scripts/passdev/etc/crypttab実行するsudo update-initramfs -uvと、完了です。


ソリューションが複数のキーファイルのUSBドライブで機能していないと思います。複数の暗号化されたパーティション(ホーム、スワップ、ルート)がある場合を意味します。catコマンドの後にUSBドライバーをアンマウントしないようになっています。修正方法はありますか?
カミデュラ

これは私のために働いています(Xubuntu 17.10)が、grubを編集して「スプラッシュ」を削除する必要がありました。また、適切な場所(/ lib / cryptsetup / scripts / unlock_custom)にファイルを保存し、755をchmodする必要がありました。特定の場所でのスプラッシュまたはコピーが機能するかどうかはわかりませんが、以前は機能しませんでした。とにかく、それは動作しますが、起動後、Startet AppArmor initialization.次のようになります 。dev-disk keyfile.device(1m 30s)の開始ジョブが実行されています。90年代の後にXが起動し、私は私のシステムを使用することはできません...この開始ジョブを修正する方法は考えて...
firepol

1

@deitch私は@Randy Orrisonのような同じセットアップをしていて、あなたと同じ問題に遭遇しました、そしてそれは/ etc / crypttabで対応するエントリを見つけるので/ファイルシステムを再びマウントしようとするsystemdのバグです。

これを解決するには、update-initramfs -uvコマンドが実行されたら、/ etc / crypttabからsda5_cryptのエントリを削除しました。

Reebootとすべてが意図したとおりに正常に動作します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.