web-dev-qa-db-ja.com

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

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

32GB mSATA SSDと750GBのRustを搭載したラップトップも持っています。現在のインストールではbcacheを使用してこれを活用し、 この手順 を使用してインストールします。これにより、SSDがいっぱいになることを心配することなく、パフォーマンスが非常に向上します。

これは豊富な質問になります。報奨金は以下に対して授与されます。

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

上記のDebian Jessieの方法をすでに試してみましたが、私のために起動することを拒否します。これまでのコメントで説明されている方法を試したことはありません here

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

コミュニティwikiに行くかのようにソリューションを書いてください。


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

10
Adrian

Bcache上のLUKS上のLVM

russian doll ゲームは、3スタック/レイヤーでもう少し深く...

この質問に関する私の最初のアイデアは、デフォルトのUbuntuインストールをLUKS on LUKSで使用し、 bcache backing device with blocksに変換することでした しかし、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

Installation

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

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

format パーティションのチェックボックスをオンにします

インストールの最後に、再起動しないが、[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]より良い方法があります this ワイピング

7
solsTiCe

LUKS + LUKS/dm-cache上のLVM

Ubuntuインストーラーは、フルディスク暗号化のために LUKS上のLVM 構成を使用します。

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のメタデータには下限があります。)

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

参照資料


#!/ bin/bash 
#
#lvmcryptocache 
#
#LVMキャッシュプールを追加し、ルートボリュームに接続します
#LUKS暗号化を含む
#「すべてのルート」セットアップを使用していると仮定します
#使用していない場合は、必要に応じて調整してください
#
#スクリプトライセンスGPL3以降
#©Adrian Wilkins 2015年5月
#
#使用しているディスクデバイスの名前をキャッシュとして渡します
#これは理想的には完全に空白である必要があるため、
#
#dd if =/dev/zero of =/dev/$ {DISK} 
#
#overしばらくの間、パーティションテーブルを破棄します。
 
 CACHE_DISK = $ 1 
 META_SIZE = $ 2 
 DATA_SIZE = $ 3 
 
 DISK_NAME = $(ベース名$ 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 
 
#試行を開始しましたa ndディスクサイズの問題を解決しますが、それは複雑です
#必要に応じて試してみてください、エクステントを使い果たしました
#
#DISK_SIZE = $(fdisk -l | grep "ディスク$ {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 
 
#キャッシュプールのUIDを追加しますPHYSICAL DRIVE(/ dev/sdb )to /etc/crypttab
DISK_UUID=$(ls -al/dev/disk/by-uuid/| grep $ DISK_NAME | awk '{print $ 9}')
 echo "$ {CRYPT_VOL UME} UUID = $ {DISK_UUID}なしluks、discard ">> /etc/crypttab

apt-get install --yes thin-provisioning-tools 
 
 HOOK = $(tempfile)
#initramfsにフックスクリプトを追加して、適切なツールとモジュールを追加します
 
 echo "#!/ bin/sh"> $ HOOK 
 echo "PREREQ =" lvm2 "" >> $ HOOK 
 echo "prereqs()" >> $ HOOK 
 echo "{" >> $ HOOK 
 echo " echo\"$ PREREQ \" ">> $ HOOK 
 echo"} ">> $ HOOK 
 echo" case $ 1 in ">> $ HOOK 
 echo" prereqs) " >> $ HOOK 
 echo "prereqs" >> $ HOOK 
 echo "exit 0" >> $ HOOK 
 echo ";;" >> $ 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 
 
 echo Now reboot!
4
Adrian