如何使用磁盘加密和SSD缓存安装Ubuntu
我在企业环境中使用Ubuntu,我们的安全策略声明我们必须使用全盘加密。
我还有一台配备32GB mSATA SSD和750GB旋转防锈的笔记本电脑。 我当前的安装使用bcache来利用它,使用此过程安装。 这提供了非常受欢迎的性能提升,而我不必担心填充SSD。
这将是一个有价值的问题。 赏金将授予:
- 一种清晰,可靠的方法来执行Ubuntu的全新安装
- 任何释放都是可以接受的,但15.04(生动)将没问题
- 整个文件系统将被加密
- 这里的首选项是使用默认的Ubiquity安装程序中的相关复选框(dm-crypt加密)
- 文件系统将缓存在SSD上
- 首先,内核dm-cache / lvmcache方法可以在这里看到使用Debian Jessie执行此操作的方法
- 缓存也必须是安全的(即加密)
- 必须清楚解释为什么缓存也是加密的
上面已经尝试过Debian Jessie的方法,但它拒绝为我启动。 到目前为止还没有尝试过这里评论中描述的方法。
发布的解决方案将在具有两个空白虚拟磁盘和15.04桌面版本(amd64版本)的VirtualBox VM上进行测试。 Bounty转到我采用的第一个重新安装我的实际硬件的解决方案。
请编写您的解决方案,就像它进入社区维基一样。
我已经获得了奖励 – 我认为仍然有可能实现“LUKS-on-LVM”解决方案,该解决方案仅使用一个密码,仅使用设备映射器组件,将已批准答案的简易性结合在一起。
关于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
Live 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]可能有更好的方法来擦拭
LUKS + LUKS / dm-cache上的LVM
Ubuntu安装程序在LUKS配置上使用LVM进行全磁盘加密。
如果您还想使用dm-cache / lvmcache来提高性能,则需要将缓存池放入加密卷中以维护数据的安全性。
步骤是
- 在目标块设备上创建LUKS卷
- 使用新加密的LUKS卷扩展默认卷组
- 在新LUKS卷中创建缓存元数据和数据卷
- 将它们绑定在一起作为缓存池
- 将此缓存池绑定到根卷
- 通过将新加密卷添加到
/etc/crypttab
确保可以在引导时挂载新的加密卷 - 确保您的引导环境支持dm-cache
下面的脚本提供了一个示例,并将加密的缓存池添加到现有的根文件系统。 它是为在Ubuntu安装程序中使用默认磁盘加密选项的系统设计的 – 即; 整个磁盘分区和加密,没有自定义分区等。
请注意,此脚本中的validation或防御性编程很少。 如果它破坏了你的工作系统,那就是你的责任。
这样称呼:
# 1 2 3 4 5 6 sudo bash lvmcryptocache /dev/sdb 32M 1968M
- 需要root才能工作
- 在bash中运行脚本
- 脚本名称
- 您要使用的块设备(仅使用整个磁盘进行测试)
- 元数据大小
- 缓存数据大小
默认情况下,大小参数以MB为单位:您需要1:1000元数据空间与缓存空间的比例(例如,如果您的缓存磁盘为180GB,您需要180MB的元数据空间和179820MB的数据空间 – 您可能需要围绕元数据有点小心谨慎.8M的元数据有一个下限。)
系统将提示您输入缓存卷的密码 – 在启动过程中将提示您输入磁盘的密码。
参考
- 使用LVM新缓存function(Richard Jones)
- 加密整个系统(dm-crypt wiki)
- 评论Launchpad Bug#1423796
- 从lvmcache启动Debian Jessie
#!/斌/庆典 # #lvmcryptocache # #添加LVM缓存池并将其附加到根卷 #包括LUKS加密 #假设您正在使用“all on root”设置 #如果不是,请根据自己的需要进行调整 # #脚本许可GPL3或更高版本 #©Adrian Wilkins 2015年5月 # #将您正在使用的磁盘设备的名称作为缓存传递 #理想情况下,这应该是完全空白的,所以运行 # #dd if = / dev / zero of = / dev / $ {DISK} # #在它上面短暂地核对分区表 CACHE_DISK = $ 1 META_SIZE = $ 16 DATA_SIZE = $ 3 DISK_NAME = $(基本名称$ CACHE_DISK) CRYPT_VOLUME = $ {} DISK_NAME _crypt CACHE_PV =的/ dev /映射器/ $ {} CRYPT_VOLUME #在原始磁盘中创建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 #现在将缓存池PHYSICAL DRIVE(/ 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 - 是thin-provisioning-tools HOOK = $(临时文件) #在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];然后”>> $ 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现在重启!