ディスク暗号化とSSDキャッシングの両方でUbuntuをインストールする方法


10

私は企業環境でUbuntuを使用していますが、セキュリティポリシーでは、ディスク全体の暗号化を使用する必要があると記載されています。

32GBのmSATA SSDと750GBの錆びたノートパソコンも持っています。現在のインストールでは、この手順を使用しインストールされたbcacheを使用してこれを活用しています。これにより、SSDがいっぱいになることを心配する必要がなく、パフォーマンスが大幅に向上します。

これは賞賛に値する質問です。賞金は以下のために授与されます:

  • Ubuntuの新規インストールを実行する明確で信頼できる方法
    • 任意のリリースが許容されますが、15.04(鮮やか)で問題ありません
  • ファイルシステム全体が暗号化されます
    • ここでの設定は、デフォルトのUbiquityインストーラープログラム(dm-crypt暗号化)の関連するチェックボックスを使用することです。
  • ファイルシステムはSSDにキャッシュされます
    • 優先的には、カーネルのdm-cache / lvmcacheメソッドは、Debian Jessieでこれを行う方法については、こちらを参照してください
    • キャッシュも保護する必要があります(つまり、暗号化する)
    • キャッシュも暗号化される理由について明確な説明が必要です

上記のDebian Jessieの方法をすでに試しましたが、起動できません。これまでのコメントに記載された方法試していないここに

投稿されたソリューションは、2つの空の仮想ディスクと15.04デスクトップ(amd64リリース)のリリースコピーを備えたVirtualBox VMでテストされます。バウンティは、実際のハードウェアを再インストールするために採用する最初のソリューションに取り組みます。

コミュニティーwikiに入るようにソリューションを記述してください。


私は賞金を授与しました-承認された回答の容易さを1つのパスワードのみとデバイスマッパーコンポーネントのみを使用して組み合わせる「LUKS-on-LVM」ソリューションの可能性はまだあると思います。


私が理解していることから、キャッシュは暗号化されないので、LUKS ubuntuインストールのデフォルトLVMでlvmcacheを使用したくありません。
solsTiCe

@solsTiCe-dm-cacheの上にある簡単なレイヤーであるlvmcryptもLUKSと調整できるはずであると理解していました(LUKSは別のデバイスマッパーであるdm-cryptです)。あなたの周りに物事
エイドリアン

/ bootパーティションは暗号化されていないことが最も確実であることを理解する必要があります。bcacheはUbuntu 14.04のgrubと互換性がありませんでしたが、まだ互換性があると思います。
Adam Ryczkowski、2015年

@AdamRyczkowskiはい、私は今その構成を持っています。許容範囲ですが、LUKS構成を使用したいと思います。
エイドリアン

LUKSがbcacheを除外する理由がわかりません...それらは互いに依存しておらず、幸いにも他の上に座ることができます。
Adam Ryczkowski、2015年

回答:


7

bcache上のLUKS上のLVM

ここでは、ロシアの人形のゲームは3つのスタック/レイヤーで少し深くなっています...

この質問に関する私の最初のアイデアは、LUKS上のLVMでデフォルトのUbuntuインストールを使用し、それをブロック付きのbcacheバッキングデバイスに変換することでしたが、LVMでのテストでは機能しませんでした。

さらに、ubuntuインストーラー(ubiquity)は、事前に準備されたbcacheデバイス(少なくともLVMのLUKSを使用)内にインストールするには制限がありすぎるため、手動で行う方法にフォールバックします。

ライブCD / USBで起動し、[Ubuntuを試す]を選択してターミナルを開きます

プレインストール

sudo -i
# Define some variable to avoid confusion and error
luks_part=/dev/sda3
boot=/dev/sda2                    # boot partition
caching_bcache=/dev/sdb           # SSD or partition in SSD

# Do secure erase of encrypted backing and caching device (see Notes [1])
dd if=/dev/urandom of=$luks_part || dd if=/dev/urandom of=$caching_bcache
# Go and grab some coffe, this will take a while...

apt-get install bcache-tools
# Setup bcache caching and backing devices
make-bcache -C $caching_bcache -B $luks_part
# (Optional) Tweak bcache
echo writeback > /sys/block/bcache0/bcache/cache_mode

# Below we now create manually what ubiquity should have done for us
# Setup LUKS device on bcache device
cryptsetup --key-size 512 luksFormat /dev/bcache0
cryptsetup luksOpen /dev/bcache0 crypted

# Setup LVM on LUKS
# You can skip that part if you don't want to use a swap
# or don't want to use multiple partition. Use /dev/mapper/crypted
# as you root latter on
pvcreate  /dev/mapper/crypted
vgcreate vg /dev/mapper/crypted
lvcreate -L 1G vg -n swap
lvcreate -l 100%FREE vg -n root

取り付け

ターミナルを開いたままにして、インストールを実行します。パーティショニング時に「何か他のもの」を選択して指定する

  • ブートパーティション(/dev/sda2
  • ルートパーティション(/dev/mapper/vg-root
  • あなたのスワップ(/dev/mapper/vg-swap

チェックボックスをオンにしてパーティションをフォーマットします

インストールの最後に、再起動せずに、「続けるUbuntuを試す」をクリックするだけです。

インストール後

開かれたターミナルで

# Install bcache-tools to add bcache module to initramfs
mount /dev/mapper/vg-root /mnt
mount $boot /mnt/boot
mount -o bind /sys /mnt/sys
mount -o bind /proc /mnt/proc
mount -o bind /dev /mnt/dev
chroot /mnt
# To get apt-get running in the chroot
echo 'nameserver 8.8.8.8' > /run/resolvconf/resolv.conf
apt-get install bcache-tools

# Create /etc/crypttab to add crypted bcached partition
echo "crypted UUID=`blkid -o value /dev/bcache0|head -1` none luks" > /etc/crypttab

exit
sync
umount /mnt/sys
umount /mnt/proc
umount /mnt/dev
umount /mnt/boot
umount /mnt
vgchange -an /dev/mapper/crypted
cryptsetup luksClose crypted
sync

# Reboot & enjoy

ライブCD / USBからの既知のUbuntu 15.04再起動バグがあるため、強制的に再起動/シャットダウンする必要があるかもしれません

小切手

起動したら/dev/bcache0、実際にLUKSパーティションであることを確認できます。

if sudo cryptsetup isLuks /dev/bcache0; then \
    echo "crypted";\
    else echo "unencrypted";\
fi

これはLUKSパーティションのキャッシュであり、デバイス経由でデータにアクセス/dev/bcache0し、元のバッキングデバイスからはアクセスしないためです(/dev/sda3ここ)。

参考文献

http://bcache.evilpiepirate.org/

https://wiki.archlinux.org/index.php/Bcache

https://wiki.archlinux.org/index.php/Dm-crypt

bcache-statusはまだ正式にbcache-toolsにマージされていません。あなたはそれをここに持つことができます:https//gist.github.com/djwong/6343451

[1] このワイピングを行うにはもっと良い方法があるかもしれません


update-initramfs -uk allcrypttabの作成と次のexitコマンドの後に必ず実行してください。
dess、

4

LUKS + LUKS / dm-cache上のLVM

Ubuntuインストーラーは、フルディスク暗号化のためにLKS on LUKS設定を使用します。

dm-cache / lvmcacheも使用してパフォーマンスを向上させる場合は、キャッシュプールを暗号化されたボリュームに配置して、データのセキュリティを維持する必要があります。

手順は

  • ターゲットブロックデバイスにLUKSボリュームを作成する
  • 暗号化された新しいLUKSボリュームでデフォルトのボリュームグループを拡張する
  • 新しいLUKSボリュームにキャッシュメタデータとデータボリュームを作成する
  • それらをキャッシュプールとして一緒にバインドします
  • このキャッシュプールをルートボリュームにバインドします
  • 新しい暗号化されたボリュームをブート時にマウントできることを確認してください。 /etc/crypttab
  • ブート環境がdm-cacheをサポートしていることを確認してください

以下のスクリプトは例を提供し、暗号化されたキャッシュプールを既存のルートファイルシステムに追加します。これは、Ubuntuインストーラーでデフォルトのディスク暗号化オプションを使用しているシステム用に設計されました。ディスク全体がパーティション化および暗号化され、カスタムパーティションなどはありません。

このスクリプトには検証または防御的なプログラミングがほとんどないことに注意してください。それがあなたの作業システムを破壊するならば、それはあなたの責任です。

このように呼び出します:

# 1   2          3           4     5    6
sudo bash lvmcryptocache /dev/sdb 32M 1968M
  1. 動作するにはルートが必要です
  2. bashでスクリプトを実行する
  3. スクリプト名
  4. 使用するブロックデバイス(ディスク全体でのみテスト)
  5. メタデータサイズ
  6. キャッシュデータサイズ

サイズパラメータのデフォルトはMBです。メタデータスペースとキャッシュスペースの比率は1:1000である必要があります(たとえば、キャッシュディスクが180GBの場合、180MBのメタデータスペースと179820MBのデータスペースが必要です。メタデータには少し注意が必要です。メタデータには8Mの下限があります。)

キャッシュボリュームのパスワードの入力を求められます- 起動時に両方のディスクのパスワードの入力を求められます。

参考文献


#!/ bin / bash
#
#lvmcryptocache
#
#LVMキャッシュプールを追加してルートボリュームにアタッチする
#LUKS暗号化を含む
#「すべてのルート」設定を使用していると仮定します
#そうでない場合は、必要に応じて調整してください
#
#スクリプトライセンスGPL3以降
#©Adrian Wilkins 2015年5月
#
#キャッシュとして使用しているディスクデバイスの名前を渡します
#理想的には完全に空白であるべきなので、実行します
#
#dd if = / dev / zero of = / dev / $ {DISK}
#
#パーティションテーブルをnukeするために少しの間オーバー

CACHE_DISK = $ 1
META_SIZE = $ 2
DATA_SIZE = $ 3

DISK_NAME = $(basename $ CACHE_DISK)

CRYPT_VOLUME = $ {DISK_NAME} _crypt
CACHE_PV = / dev / mapper / $ {CRYPT_VOLUME}

#rawディスクにLUKSボリュームを作成します

cryptsetup luksFormat $ CACHE_DISK
cryptsetup open --type luks $ CACHE_DISK $ CRYPT_VOLUME

#ディスクサイズの要素を試し、解決し始めたが、複雑である
#必要に応じて試してみて、私はエクステントを使い果たし続けました
#
#DISK_SIZE = $(fdisk -l | grep "Disk $ {CACHE_DISK}" | awk '{print $ 5}')
# 
#META_SIZE = $((DISK_SIZE / 1000))
#META_SIZE = $((META_SIZE + 512))
#MOD = $((META_SIZE%512))
#MOD_OFFSET = $((512-MOD))
#META_SIZE = $((META_SIZE + 512)) 
#META_SIZE = $((META_SIZE + MOD_OFFSET))
# 
#DATA_SIZE = $((DISK_SIZE-META_SIZE))
# 

#暗号化されたボリューム内に新しいPVを作成する

pvcreate $ CACHE_PV
vgextend ubuntu-vg $ CACHE_PV
lvcreate -L $ {META_SIZE} -n cachemeta ubuntu-vg $ CACHE_PV
lvcreate -L $ {DATA_SIZE} -n cachedata ubuntu-vg $ CACHE_PV
lvconvert --type cache-pool --poolmetadata ubuntu-vg / cachemeta --cachemode writethrough ubuntu-vg / cachedata --yes
lvconvert --type cache --cachepool ubuntu-vg / cachedata ubuntu-vg / root

#次に、キャッシュプールの物理ドライブ(/ dev / sdb)のUUIDを/ etc / crypttabに追加します
DISK_UUID = $(ls -al / dev / disk / by-uuid / | grep $ DISK_NAME | awk '{print $ 9}')
echo "$ {CRYPT_VOLUME} UUID = $ {DISK_UUID} none luks、discard" >> / etc / crypttab

apt-get install --yesシンプロビジョニングツール

HOOK = $(一時ファイル)
#フックスクリプトをinitramfsに追加して、適切なツールとモジュールを追加する

echo "#!/ bin / sh"> $ HOOK
echo "PREREQ =" lvm2 "" >> $ HOOK
echo "prereqs()" >> $ HOOK
エコー "{" >> $ HOOK
echo "echo \" $ PREREQ \ "" >> $ HOOK
エコー "}" >> $ HOOK
echo "ケース$ 1 in" >> $ HOOK
echo "前提条件)" >> $ HOOK
echo "前提条件" >> $ HOOK
echo "exit 0" >> $ HOOK
エコー " ;;" >> $ HOOK
echo "esac" >> $ HOOK
echo "if [!-x / usr / sbin / cache_check]; then" >> $ HOOK
echo "exit 0" >> $ HOOK
echo "fi" >> $ HOOK
echo "。/ usr / share / initramfs-tools / hook-functions" >> $ HOOK
echo "copy_exec / usr / sbin / cache_check" >> $ HOOK
echo "manual_add_modules dm_cache dm_cache_mq dm_persistent_data dm_bufio" >> $ HOOK

cp $ HOOK / etc / initramfs-tools / hooks / lvmcache
chmod + x / etc / initramfs-tools / hooks / lvmcache

echo "dm_cache" >> / etc / initramfs-tools / modules
echo "dm_cache_mq" >> / etc / initramfs-tools / modules
echo "dm_persistent_data" >> / etc / initramfs-tools / modules
echo "dm_bufio" >> / etc / initramfs-tools / modules

#initramfsを更新する

update-initramfs -u

エコー今再起動!

1.キャッシュディスクをゼロで空にすることをお勧めしますが、暗号化されたLUKSを配置する場合は、ランダムデータで安全に消去する必要があります。2.セットアップに2つのLUKSパーティションがあるので、同じパスフレーズを使用する場合でも、2回入力する必要がありますよね?
solsTiCe

1.ランダムなディスクワイプは、最新のハードウェアでは少し時代遅れです-ゼロは、ほとんどの非学術レベルの基準を超えて、そして確かに商用ディスクリカバリラボを超えてディスクを置くのに十分です。以前に保持していた機密データを使用しているボリュームを除き、書き込まれたすべてのブロックが暗号化されるため、ボリュームは不要です。ウェアレベリングアルゴリズムのため、プレーンテキストの機密データが含まれているSSDは使用しないでください。2.はい、2つのLUKSパーティションがあります。本文で述べたように、起動時に両方のパスフレーズの入力を求められます。
エイドリアン

ランダムワイピングはSSD上のデータを安全に削除することではありませんが、厳密な調査を避け、暗号化されたデータを00000000zerazer000000000000のような空白と区別できるようにします。ここでは、中央に暗号化されたデータが表示されます。これは、ランダムなスープの真ん中に隠される代わりに、暗号化を弱めます。
solsTiCe

私は、bcacheのセットアップが行き詰まった後、このルートを使用することになりました。うまく機能しているよう| cache_utilization_pct | 79.096846147 |です:。ただし、topiowaitの状態は常に20〜50%です。それはバッファリングの副作用ですか?
Jean Jordaan 2015

私は本当に知ることを主張することはできません-しかし、それはSSDへの書き込みの最小化に関連する最適化の副作用である可能性があると推測しています。IOWaitに関する記事はこちら:thattommyhall.com/2011/02/18/iops-linux-iostat
Adrian
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.