web-dev-qa-db-ja.com

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

最近、完全な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でキーを追加しようとすると、パスフレーズの入力を求められ、何も入力しないと、画面に何も印刷されません。私はそれを無視し、他の手順を続行して再起動しますが、何も起こりませんでした。パスフレーズを要求します。

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

21
isoman

新しいホームサーバーでこれを行ったばかりですが、グーグルや推測に多くの時間がかかりましたが、うまくいきました。ここで手順を再現してみます。私は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フラッシュドライブが見つからない場合にパスフレーズを要求する方法を知っている人は、フォールバックとして便利です。これがお役に立てば幸いです。どんな追加や修正も歓迎です!

26
Randy Orrison

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
6
The New Guy

Randy Orrison's answer の改善、これは私が作成した小さなスクリプトで、キーファイルが見つからなかった場合にユーザーにパスワードを要求するようにシステムをフォールバックします。

#!/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を実行すると完了です。

6
VarunAgw

@deitch私は@Randy Orrisonのような同じ設定をしていて、あなたと同じ問題にぶつかりました。そして、それはsystemdのバグであり、/ etc/crypttabで対応するエントリを見つけると/ filesystemを再びマウントしようとします。

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

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

1
mukul kirtane