Ubuntu全加密加密/启动加密
我正在尝试使用单独的/boot
分区设置完整的加密磁盘,我遇到了一些麻烦。
我将在Ubuntu 15.04 Live DVD会话上写下我一直关注的程序。
-
用“随机数据”填充磁盘
sudo dd if=/dev/urandom of=/dev/sda1 bs=4096 #ok
-
创建分区(使用gparted)
- 创建分区表 – gpt 2。
- / dev / sda1 ext2 1.5GB #boot
- / dev / sda2 linux-swap 4GB #swap
- / dev / sda3 ext4 15 GB #root
- / dev / sda4 ext4 FREESPACE #home
- 创建分区表 – gpt 2。
-
加密卷
cryptsetup luksFormat --cipher twofish-xts-plain64 --key-size 512 --hash sha512 --iter-time 3000 /dev/sda1 cryptsetup luksFormat --cipher twofish-xts-plain64 --key-size 512 --hash sha512 --iter-time 3000 /dev/sda2 cryptsetup luksFormat --cipher twofish-xts-plain64 --key-size 512 --hash sha512 --iter-time 3000 /dev/sda3 cryptsetup luksFormat --cipher twofish-xts-plain64 --key-size 512 --hash sha512 --iter-time 5000 /dev/sda4
-
打开cryptovolume
cryptsetup luksOpen /dev/sda1 boot cryptsetup luksOpen /dev/sda2 swap cryptsetup luksOpen /dev/sda3 root cryptsetup luksOpen /dev/sda4 home
-
格式
mkfs.ext2 /dev/mapper/boot mkswap /dev/mapper/swap mkfs.ext4 /dev/mapper/root mkfs.ext2 /dev/mapper/home
-
安装(使用Ubiquity)
- / dev / sda上的启动加载程序
- / dev / sda1 – 用作ext2 – 挂载点/启动
- / dev / sda2 – 用作ext2 – 挂载点/启动
- / dev / sda3 – 用作ext2 – 挂载点/启动
- / dev / sda4 – 用作ext2 – 挂载点/启动
最后,安装程序警告grub-install失败(因为启动卷已加密),因此请选择“continue without bootloader”。
-
清理启动卷
mkfs.ext2 /dev/mapper/boot
-
装载量
mkdir /mnt/root mount /dev/mapper/root /mnt/root mount /dev/mapper/boot /mnt/root/boot
-
更新fstab和crypttab
sudo blkid [/dev/sr0: UUID="2015-10-21-16-17-40-00" LABEL="Ubuntu 15.10 amd64" TYPE="iso9660" PTUUID="429817b4" PTTYPE="dos" /dev/sda1: UUID="...#1" TYPE="crypto_LUKS" PARTUUID="..." /dev/sda2: UUID="...#2" TYPE="crypto_LUKS" PARTUUID="..." /dev/sda3: UUID="...#3" TYPE="crypto_LUKS" PARTUUID="..." /dev/sda4: UUID="...#4" TYPE="crypto_LUKS" PARTUUID="..." /dev/mapper/boot: UUID="..." TYPE="ext2" /dev/mapper/swap: UUID="..." TYPE="swap" /dev/mapper/root: UUID="..." TYPE="ext4" /dev/mapper/home: UUID="..." TYPE="ext4"]
-
fstab文件
# UUID=#1 /boot ext2 defaults 0 2 UUID=#2 none swap sw 0 0 UUID=#3 / ext4 errors=remount-ro 0 1 UUID=#4 /home ext4 defaults 0 2
-
crypttab里
boot UUID=#1 luks,cipher=twofish-xts-plain64,size=512, hash=whirlpool, time=3000 swap UUID=#2 luks,swap,cipher=twofish-xts-plain64,size=512, hash=whirlpool,time=3000 root UUID=#3 luks,cipher=twofish-xts-plain64,size=512, hash=whirlpool,time=3000 home UUID=#4 luks,cipher=twofish-xts-plain64,size=512, hash=whirlpool,time=5000
-
更新initramfs映像
cd /mnt sudo chroot root mount -t proc proc /proc mount -t sysfs sys /sys mount -t devpts devpts /dev/pts update-initramfs -u #ok
-
配置bootloader(
/etc/default/grub
)GRUB_ENABLE_CRYPTODISK=y GRUB_PRELOAD_MODULES="luks cryptodisk" GRUB_CMDLINE_LINUX="cryptdevice=UUID#3:root root=/dev/mapper/root resume=/dev/mapper/swap crypto=whirlpool:twofish-xts-plain64:512:0:"
-
创建配置文件
$ grub-mkconfig -o /boot/grub/grub.cfg [/usr/sbin/grub-probe: error: failed to get canonical path of `/dev/mapper/root'.]
-
在外面试试
$ exit $ grub-mkconfig -o /boot/grub/grub.cfg [/usr/sbin/grub-probe: error: failed to get canonical path of `/cow'.]
在此之前我犯了什么错误吗? 如何才能继续正确配置和安装grub?
你犯了一些错误,但主要的问题是无处不在和grub。 基本上,当您设置/
成为加密分区而不为/boot
创建单独的分区时,grub会给出如下错误消息:
我知道
/boot
是加密的。 您需要在/etc/default/grub
设置GRUB_ENABLE_CRYPTODISK=y
。 我不会为你做,所以我会失败,你的安装将停止。
过程概述:
- 我们使用EFI模式。
- 我们使用标准安装程序安装到未加密的
/boot
分区和加密的btrfs/
。 - 安装程序完成后,我们
chroot
,进行一些重要的配置更改,并将grub重新安装到EFI System Partition并重新创建initrd。
详细步骤:
- 从Ubuntu 16.04安装盘启动(使用Xubuntu测试)。
- 连接到Internet并运行
sudo apt update && sudo apt upgrade
以更新安装程序组件 - 使用fdisk,gparted或其他工具创建3个分区:
- GPT分区表
- 我们将用于EFI系统分区的200MB分区
- 我们最终将用作加密交换分区的多GB分区,但它将用作我们的临时未加密
/boot
- 使用剩余空间的加密分区
-
准备加密分区
sudo cryptsetup luksFormat /dev/sda3 sudo cryptsetup luksOpen --allow-discards /dev/sda3 sda3_crypt sudo mkfs.btrfs /dev/mapper/sda3_crypt
-
安装Ubuntu
- 当被问及安装类型时,请选择“其他”。
- 将
/dev/sda1
配置为EFI System Partition
- 将
/dev/sda2
配置为ext2,格式化,挂载点为/boot
- 将
/dev/mapper/sda3_crypt
配置为btrfs,挂载点为/
- 继续安装。
- 完成后,选择保持在实时系统中(不重启)。
-
复制
/boot
的内容并执行chroot
sudo mount -o subvol=@ /dev/mapper/sda3_crypt /target sudo mount /dev/sda2 /mnt # (Watch those trailing slashes! rsync is very sensitive to them.) sudo rsync -aXAH /mnt/ /target/boot/ sudo mount /dev/sda1 /target/boot/efi sudo mount --bind /dev /target/dev sudo mount --bind /proc /target/proc sudo mount --bind /sys /target/sys sudo chroot /target
-
(现在一切都在你的新系统中以
chroot
发生。) -
将行添加到
/etc/default/grub
GRUB_ENABLE_CRYPTODISK=y
-
在
/etc/crypttab
添加行。 您需要先运行sudo blkid
才能找到/dev/sda3
的UUID(NOT/dev/mapper/sda3_crypt
)。sda3_crypt UUID=
none luks,discard -
编辑
/etc/fstab
并删除/boot
的行。 其他条目是正确的。 -
将grub安装到EFI System Partition,生成一个新的grub.cfg,然后准备initrd。
sudo grub-install --target=x86_64-efi --efi-directory /boot/efi --bootloader=ubuntu --boot-directory=/boot/efi/EFI/ubuntu --recheck sudo grub-mkconfig -o /boot/efi/EFI/ubuntu/grub/grub.cfg sudo update-initramfs -c -k all
-
(可选仔细检查)仔细检查/boot/efi/EFI/ubuntu/grub/grub.cfg是否包含包含
insmod luks
cryptomount -u
,cryptomount -u
,正确引导条目等的行。并仔细检查你的initrd包含cryptsetup
二进制文件。 如果缺少这些东西,那是因为grub-mkconfig和/或update-initrd无法弄清楚你在fstab中挂载或指定的卷如何与crypttab中的加密卷相关。 (他们有很多神奇的自动配置。)如果您偏离本指南,例如使用ZFS或尝试对sda3_crypt进行分区,则可能会发生这种情况。 -
(如果使用ZFS而不是btrfs) grub-mkconfig和update-initrd将无法识别ZFS。 解决方法涉及(在chroot期间,在grub-mkconfig / update-initrd之前)编辑
/usr/sbin/grub-mkconfig
以添加|| true
返回第139行(以GRUB_DEVICE=
开头),将GRUB_DEVICE="/dev/mapper/sda3_crypt"
到/etc/default/grub
,创建文件/usr/share/initramfs-tools/conf-hooks.d/forcecryptsetup
with内容export CRYPTSETUP=y
和文件/etc/initramfs-tools/conf.d/cryptroot
,内容为target=sda3_crypt,source=UUID=
。 所有这些都是您在不加密ZFS部分时所采取的步骤(例如在实时系统和chroot中安装zfs用户空间工具并删除安装,key=none,discard /
在fstab中的行)。 -
退出chroot并重新启动进入新系统
exit sudo umount /target/boot/efi sudo umount /target/dev sudo umount /target/proc sudo umount /target/sys sudo umount /target sudo reboot
-
您应该看到grub询问您的密码。 然后你会得到启动菜单。 然后选择Ubuntu后,系统会再次要求您输入密码。 然后你就会进入你的系统。 阅读有关Ubuntu如何使用BTRFS的更多信息。
-
TODO :创建加密交换(提示:它涉及编辑crypttab,fstab和重新运行update-initrd)。
- TODO :保存您的密码,这样您只需将其输入grub即可。 详细信息请参阅: http : //webcache.googleusercontent.com/search?q = cache = z2MwHuPWTakJ : missinglink.xyz / security / tutorial -deububdubu -full-disk-encryption-luks-fde-including-encrypted- boot/ improved -全磁盘加密加-陆氏琴键文件initrdinitramfs / + CD = 1&HL = EN&CT = clnk&GL =我们
升级
- 每次安装新内核时,都应该运行自定义
grub-mkconfig
命令。 - 每次更新grub时,都应该运行custom
grub-install
命令。
其他说明
- 创建单个加密卷并对其进行分区以创建交换分区(可能还有其他分区)很诱人,但这不起作用。 grub-mkconfig和update-initrd都会出错。 但是,我还没有尝试过LVM。
- 在btrfs之上使用交换文件可能很诱人,但由于性能原因,这可能是一个坏主意。