我在公司环境中使用 Ubuntu,我们的安全策略规定我们必须使用全盘加密。
我还有一台笔记本电脑,配备 32GB mSATA SSD 和 750GB 的 spinning rust。我当前的安装使用 bcache 来利用这一点,使用以下方式安装此程序。这提供了非常受欢迎的性能提升,而我无需担心填满 SSD。
这是一个悬赏问题。悬赏对象为:
- 执行 Ubuntu 全新安装的清晰、可靠的方法
- 任何版本都可以接受,但 15.04 (Vivid) 就可以了
- 整个文件系统将被加密
- 这里的偏好是使用默认 Ubiquity 安装程序中的相关复选框(dm-crypt 加密)
- 文件系统将缓存在 SSD 上
- 有关内核 dm-cache / lvmcache 方法的首选项,请参阅这里使用 Debian Jessie 执行此操作的方法
- 缓存也必须是安全的(即加密)
- 必须清楚解释为什么缓存也要加密
已经尝试了上述 Debian Jessie 的方法,但它拒绝启动。到目前为止还没有尝试过评论中描述的方法这里。
发布的解决方法将在 VirtualBox VM 上进行测试,该 VM 具有两个空白虚拟磁盘和 15.04 桌面(amd64 版本)的发行副本。我采用的第一个解决方案将获得赏金,用于重新安装我的实际硬件。
请像将解决方案写入社区维基一样来编写解决方案。
我已经授予了赏金 - 我认为“LUKS-on-LVM”解决方案仍然有潜力,该解决方案结合了仅使用一个密码的批准答案的简便性,并且仅使用设备映射器组件。
答案1
bcache 上的 LUKS 上的 LVM
这里俄罗斯娃娃游戏更加深入,有 3 个堆栈/层...
我对这个问题的最初想法是使用默认的 Ubuntu 安装LUKS 上的 LVM并将其转换成缓存带有背衬装置的块但它在我使用 LVM 进行的测试中没有起作用。
此外,ubuntu 安装程序(无处不在)太有限,无法安装在缓存设备已经提前准备好(至少在 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
Ubuntu 15.04 有一个已知的 Live CD/USB 重启错误,因此你可能需要强制重启/关机
查看
启动后,你可以检查这/dev/bcache0
实际上是卢克斯分区
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 状态尚未正式合并到 bcache-tools。你可以在这里获取它:https://gist.github.com/djwong/6343451
[1] 或许有更好的方法这擦拭
答案2
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
- 需要 root 权限才能工作
- 在 bash 中运行脚本
- 脚本名称
- 您要使用的块设备(仅使用整个磁盘进行测试)
- 元数据大小
- 缓存数据大小
大小参数默认以 MB 为单位:您需要 1:1000 的元数据空间与缓存空间比率(例如,如果您的缓存磁盘为 180GB,则需要 180MB 的元数据空间和 179820MB 的数据空间 - 您可能需要将元数据稍微向上舍入以防万一。元数据的下限为 8M。)
系统将提示您输入缓存卷的密码 - 系统将提示您输入以下密码两个都在启动过程中检查磁盘。
参考
- 使用 LVM 的新缓存功能 (Richard Jones)
- 加密整个系统(dm-crypt wiki)
- Launchpad Bug #1423796 上的评论
- 从 lvmcache 启动 Debian Jessie
/bin/bash #!/bin/bash # # lvmcryptocache # # 添加 LVM 缓存池并将其附加到根卷 # 包括 LUKS 加密 # 假设你正在使用“全部在根上”设置 # 如果你不是,请根据自己的喜好进行调整 # # 脚本使用 GPL3 或更高版本许可 # © Adrian Wilkins 2015 年 5 月 # # 传递用作缓存的磁盘设备的名称 # 理想情况下,这应该是完全空白的,因此运行 # # dd if=/dev/zero of=/dev/${DISK} # # 稍等片刻,以清除分区表 CACHE_DISK=$1 META_SIZE=$2 数据大小=$3 DISK_NAME=$(基本名称 $CACHE_DISK) CRYPT_VOLUME=${磁盘名称}_crypt CACHE_PV=/dev/mapper/${CRYPT_VOLUME} # 在原始磁盘中创建 LUKS 卷 cryptsetup luksFormat $CACHE_DISK cryptsetup open --type luks $CACHE_DISK $CRYPT_VOLUME # 开始尝试解决磁盘大小问题,但很复杂 # 如果你愿意,可以试一试,我一直用完区数 # # DISK_SIZE=$(fdisk -l | grep "磁盘 ${CACHE_DISK}" | awk ' { 打印 $5 } ') # #META_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)) # #数据大小=$((磁盘大小-元大小)) # # 在加密卷内创建新的 PV pvcreate $CACHE_PV vgextend ubuntu-vg $CACHE_PV lvcreate -L ${META_SIZE} -n cachemeta ubuntu-vg $CACHE_PV lvcreate -L ${DATA_SIZE} -n 缓存数据 ubuntu-vg $CACHE_PV lvconvert --type 缓存池 --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'{打印$ 9}') echo "${CRYPT_VOLUME} UUID=${DISK_UUID} none luks,丢弃" >> /etc/crypttab apt-get 安装——是精简配置工具 HOOK=$(临时文件) # 向 initramfs 添加钩子脚本,以添加正确的工具和模块 回显“#!/bin/sh”>$HOOK 回显“PREREQ =”lvm2“”>>$HOOK echo "prereqs()" >> $HOOK 回显“{”>>$HOOK 回显“回显\“$PREREQ\””>>$HOOK 回声“}”>>$HOOK echo "案例 $1 在" >> $HOOK echo "prereqs)" >> $HOOK echo "先决条件" >> $HOOK 回显“退出 0”>>$HOOK 回显“;;”>>$HOOK 回显“esac”>>$HOOK 回显“如果 [ !-x /usr/sbin/cache_check ];则”>> $HOOK 回显“退出 0”>>$HOOK 回显“fi”>>$HOOK 回显“。/usr/share/initramfs-tools/hook-functions”>>$HOOK 回显“copy_exec /usr/sbin/cache_check”>>$HOOK 回显“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 回显“dm_cache”>> /etc/initramfs-tools/modules 回显“dm_cache_mq”>> /etc/initramfs-tools/modules 回显“dm_persistent_data”>> /etc/initramfs-tools/modules 回显“dm_bufio”>> /etc/initramfs-tools/modules # 更新 initramfs 更新-initramfs -u echo 现在重启!