Rad*_*anu 74
如果要启用对主文件夹的加密,则需要安装和使用以下软件包:ecryptfs-utils和cryptsetup. 此外,您还需要另一个具有管理员 (sudo) 权限的用户帐户。完整的文档在这里:
如果您想在安装后启用全盘加密,现在的简短回答可能是:不,您不能。无论如何,如果您对此感兴趣,您的问题与以下内容重复:
小智 29
后续问题:完整磁盘与仅 /home 的优缺点是什么?
加密/home是使用名为ecryptfs的用户空间文件系统完成的。它做得非常好并且与默认身份验证系统紧密结合,因此您的可用性缺点为零:当您输入帐户时(从远程外壳或从默认登录屏幕),您的密码用于解开安全密钥,然后用于动态加密/解密主目录中的文件(挂载的文件系统将直接驻留在 中/home/username)。当您注销时 /home/username 被卸载并且只有加密的文件在系统中仍然可见(通常在/home/.ecryptfs/username/.Private/)。它们看起来像一堆乱码/随机文件,因为文件名也被加密了。唯一的信息泄漏是:文件大小、时间戳和文件数量(使用全盘加密这些也被隐藏)。
如果您的系统要在多个用户之间共享,即使您决定添加全盘加密,这也是一个非常好的功能:当机器在家里启动并运行时,全盘加密的安全性是关闭的( ecryptfs) 加密在您注销时开启。
所以,全盘加密和家庭加密不一定是相互排斥的。
以下是可能的设置列表,具体取决于不同的安全需求:
ecryptfs-migrate-home. 此外,这一直是 Ubuntu 的默认设置,在它更改了几个版本之前,增加了全盘加密的可能性。由于大多数现代台式机可以毫不费力地处理全盘加密,并且它为离线代码注入增加了一层薄薄的安全性,因此在安装程序中添加了全盘加密。但请注意,对于大多数用户来说,仅使用 ecryptfs 加密他们的家就足以满足他们的需求:让他们的朋友和普通的笔记本电脑窃贼远离他们的私人数据。此外,如果你一直被一个有正确手段的组织单独盯上,那么拥有全盘加密或只是家庭加密不会有太大区别,除非你还建立了许多其他偏执行为(例如:保留内核在一个单独的笔式驱动器中,它总是在你身上;如果我在安装过程中没有启用磁盘加密,有什么办法可以在事后启用它?
是的,如果您当前正在使用 LVM 并且系统上有足够的空间将所有未加密的系统文件复制到加密的 LUKS 分区中,那么这会更容易。我现在不详细介绍,因为我不知道您是否正在使用 LVM,以及您是否不想现在只使用 ecrypfs 并跳过全盘加密的麻烦,直到下一次全新安装。
KoK*_*KlA 10
由于这仍然是谷歌上的最高结果,我想用一些新信息更新它。正如用户Frederick Nord提到的: 有没有办法在安装后进行全盘加密?
有一个名为 luksipc(Luks in place encryption) 的工具经过进一步研究,我发现了最新的文档和该工具作者的警告:
luksipc 是在 dm-crypt/cryptsetup/LUKS 端的任何替代方案可用之前创建的。现在已经不是这样了。因此,我建议切换到 cryptsetup-reencrypt,即使 LUKS 标头的格式发生变化,它也会在上游得到正确维护和测试(据我所知,这至少发生了两次,并且可能导致 luksipc 灾难性地失败,即破坏您的所有数据在最坏的情况下)。
所以cryptsetup-reencrypt似乎是推荐的方式。
高级概述:
取自Ubuntu 文档的简短指南 :
Add LUKS encryption to not yet encrypted device
First, be sure you have space added to disk. Or alternatively shrink filesystem in
advance.
Here we need 4096 512-bytes sectors (enough for 2x128 bit key).
fdisk -u /dev/sdb # move sdb1 partition end + 4096 sectors
cryptsetup-reencrypt /dev/sdb1 --new --reduce-device-size 4096
Run Code Online (Sandbox Code Playgroud)
来自Arch Wiki 的详细指南- 加密未加密的文件系统:
Add LUKS encryption to not yet encrypted device
First, be sure you have space added to disk. Or alternatively shrink filesystem in
advance.
Here we need 4096 512-bytes sectors (enough for 2x128 bit key).
fdisk -u /dev/sdb # move sdb1 partition end + 4096 sectors
cryptsetup-reencrypt /dev/sdb1 --new --reduce-device-size 4096
Run Code Online (Sandbox Code Playgroud)
问题:为什么缩小到最小尺寸?
答:假设 - 这样做是因为 LUKS 标头的大小在未来可能会发生变化,因此这些步骤是通用的并且不会过时。Header Size 从过去的 LUKSv1 = 2MB 变为 Luksv2 = 16MB
2020 年 12 月更新
所以对我来说,碰巧我只有 1 个包含 /boot 的分区。之后我无法再启动到我的系统。如果您遇到相同的问题,本指南可能有助于恢复正常工作的系统。
root@ubuntu:~# echo "GRUB_ENABLE_CRYPTODISK=y" >>/etc/default/grub
root@ubuntu:~# update-grub
root@ubuntu:~# grub-install /dev/sda???
Run Code Online (Sandbox Code Playgroud)
update-initramfs -u -k all如何开机
insmod luks # load kernel module
cryptomount hd0,gpt6 # decrypt your encrypted partition
configfile (crypto0)/boot/grub/grub.cfg # tell grub the path to the now unecrypted config file
Run Code Online (Sandbox Code Playgroud)
cryptsetup luksOpen /dev/sda6 system
exit
Run Code Online (Sandbox Code Playgroud)
也许可以考虑使用下面的本指南。它似乎处理上述问题。虽然我还没有尝试过,所以我不能确定它是否有效。但可能值得研究。 https://cryptsetup-team.pages.debian.net/cryptsetup/encrypted-boot.html
PS 故障排除指南是凭记忆写的,所以可能有一些缺失的部分。但无论如何我还是想写它,因为它仍然可能对某些人有所帮助。但是,如果您发现缺少/不准确的内容,请在评论中告诉我,以便我可以更新指南 thx。
好吧,您可以备份所有重要的目录和已安装的软件。确保您的 13.10 已完全更新以避免版本冲突。通常备份的内容是:
/boot/etchomevar/usr/local/bin,/lib, lib64)。之后你重新安装系统现在才加密。将其更新为完整扩展。然后将备份移动到加密系统并安装以前版本的所有软件。
恢复备份时,请确保不要覆盖对加密重要的文件(例如/etc/fstab,/etc/cryptab一些与 grub 相关的内容以及 中的某些内容/boot不应替换为备份文件)。
从工作的 Ubuntu 16.04 开始,我成功地进行了安装后根分区加密,根分区包含除 /boot 之外的所有内容。我把 /boot 放在一个单独的可移动 USB 上。值得注意的是,我在升级到 Ubuntu 18 之前就这样做了,并且升级在加密磁盘版本上运行良好。
加密没有“就地”完成,这对我来说很好,因为无论如何,在新设置正常工作之前我不想覆盖工作版本。
执行正确的程序非常简单且快速。(尽管弄清楚正确的程序非常耗时,因为我遵循了一些错误的线索。)
大纲
细节
1 - 使用实时 Linux USB 磁盘启动 - 启用持久性很方便。
使用unetbootin 在 USB 上安装 Ubuntu 16。GUI 允许指定“持久性”,但还需要另一个步骤才能使持久性发挥作用 - 修改/boot/grub/grub.cfg添加--- persistent如下:
menuentry "Try Ubuntu without installing" {
set gfxpayload=keep
linux /casper/vmlinuz file=/cdrom/preseed/ubuntu.seed boot=casper quiet splash --- persistent
initrd /casper/initrd
}
Run Code Online (Sandbox Code Playgroud)
使用实时 USB 启动
2- 在空分区上创建 luks 加密卷组。在该加密分区上创建 /(根)并交换逻辑卷。
假设待加密的未使用分区为/dev/nvme0n1p4。
或者,如果您想在加密和格式化之前隐藏分区上的旧数据,您可以随机擦除该分区。请参阅此处的讨论。
dd if=/dev/urandom of=/dev/nvme0n1p4 bs=4096 status=progress
Run Code Online (Sandbox Code Playgroud)
设置加密。
cryptsetup -y -v luksFormat /dev/nvme0n1p4
Run Code Online (Sandbox Code Playgroud)
系统会要求您设置密码。
cryptsetup luksOpen /dev/nvme0n1p4 crypt1
Run Code Online (Sandbox Code Playgroud)
系统会要求您输入密码。请注意,这crypt1是一个任意的用户决定的名称。现在创建卷和格式。
pvcreate /dev/mapper/crypt1
vgcreate crypt1-vg /dev/mapper/crypt1
lvcreate -L 8G crypt1-vg -n swap
mkswap /dev/crypt1-vg/swap
lvcreate -l 100%FREE crypt1-vg -n root
mkfs.ext4 /dev/crypt1-vg/root
Run Code Online (Sandbox Code Playgroud)
使用这些实用程序可以查看卷并了解层次结构。
pvscan
vgscan
lvscan
ls -l /dev/mapper
ls -l /dev/crypt1
Run Code Online (Sandbox Code Playgroud)
3-将文件从旧根目录复制到新根目录
mkdir /tmp/old-root
mount /dev/ubuntu-vg/root /tmp/old-root/
mkdir /tmp/new-root
mount /dev/crypt1-vg/root /tmp/new-root/
cp -a /tmp/old-root/. /tmp/new-root/
umount /tmp/old-root
umount /tmp/new-root
Run Code Online (Sandbox Code Playgroud)
cp -a ...以归档模式复制,保留所有文件模式和标志。
4- 设置另一个 USB 并对其进行分区,将其用作可移动启动盘。
我为此使用了 gparted。设置两个分区。第一个分区是vfat第二个ext2。每个大小为 512 MB,您可能会少用一些。假设设备/dev/sdf.
# The first partition: (will be /dev/sdf1)
Free space preceding (leave default value)
New size 512 MiB
Free space following (leave default value)
Create as: Primary Partition
Partition Name: (leave)
File System: fat32
Label: (leave)
# The second partition: (will be /dev/sdf2)
Free space preceding (leave default value)
New size 512 MiB
Free space following (leave default value)
Create as: Primary Partition
Partition Name: (leave)
File System: ext4
Label: (leave)
Run Code Online (Sandbox Code Playgroud)
5- 在新根目录中设置一些文件,执行一些魔法,然后 chroot 到新根目录中,然后从 chroot 后的新根环境将 grub 安装到引导磁盘上。
找到一些UUID供以后使用。请注意以下命令的输出:
blkid /dev/sdf1
blkid /dev/sdf2
blkid /dev/nvme0n1p4
Run Code Online (Sandbox Code Playgroud)
挂载根分区和启动分区
sudo mount /dev/mapper/crypt1--vg-root /mnt
sudo mount /dev/sdf2 /mnt/boot
sudo mount /dev/sdf1 /mnt/boot/efi
Run Code Online (Sandbox Code Playgroud)
设置文件/mnt/etc/fstab
/dev/mapper/crypt1--vg-root / ext4 errors=remount-ro 0 1
/dev/mapper/crypt1--vg-swap none swap sw 0 0
UUID=[uuid of /dev/sdf2] /boot ext2 defaults 0 2
UUID=[uuid of /dev/sdf1] /boot/efi vfat umask=0077 0 1
Run Code Online (Sandbox Code Playgroud)
其中“[uuid of ...]”只是字母-数字-连字符的组合。
创建文件/mnt/etc/cryptab
# <target name> <source device> <key file> <options>
crypt1 UUID=[uuid of /dev/nvme0n1p4] none luks,discard,lvm=crypt1--vg-root
Run Code Online (Sandbox Code Playgroud)
进入根目录环境需要一些魔法:
sudo mount --bind /dev /mnt/dev
sudo mount --bind /proc /mnt/proc
sudo mount --bind /sys /mnt/sys
chroot /mnt
Run Code Online (Sandbox Code Playgroud)
现在使用以下命令设置启动 USB 磁盘grub:
apt install --reinstall grub-efi-amd64
grub-install --efi-directory=/boot/efi --boot-directory=/boot --removable
update-initramfs -k all -c
update-grub
Run Code Online (Sandbox Code Playgroud)
现在您应该能够使用新创建的 USB 启动盘重新启动和启动。
故障排除-
(a)必须连接网络才能执行apt install --reinstall grub-efi-amd64命令。如果网络已连接但 DNS 失败,请尝试
echo "nameserver 8.8.8.8" | sudo tee /etc/resolv.conf > /dev/null
Run Code Online (Sandbox Code Playgroud)
(b)在调用之前initramfs,原linux中使用的当前vmlinuz...文件必须存在于新的根目录中。如果没有,请找到它并将其放置在那里。
(c)该grub-install命令默认会搜索它能找到的所有其他 linux 磁盘,即使它们没有被mount编辑,并将它们放在新启动 USB 上的启动菜单中。通常这是不需要的,因此可以通过添加此行来避免/boot/default/grub.cfg:
GRUB_DISABLE_OS_PROBER=true
Run Code Online (Sandbox Code Playgroud)
注: 带有加密密钥的文本文件可以添加到可移动启动 USB 中。