安装后启用磁盘加密

Isa*_*ell 85 encryption

我正在运行 13.10 Saucy。如果我在安装过程中没有启用磁盘加密,有什么办法可以在事后启用它?

我发现了这个,它说加密必须在安装时发生,但它也指的是 Fedora。如果有任何方法可以从那里启动,我可以轻松启动到实时磁盘。

Rad*_*anu 74

如果要启用对主文件夹的加密,则需要安装和使用以下软件包:ecryptfs-utilscryptsetup. 此外,您还需要另一个具有管理员 (sudo) 权限的用户帐户。完整的文档在这里:

如果您想在安装后启用全盘加密,现在的简短回答可能是:不,您不能。无论如何,如果您对此感兴趣,您的问题与以下内容重复:

  • 如果您的主文件夹中有一个加密的 samba 共享,会发生什么情况?网络用户是否无法再读取这些文件,或者这些文件是否通过共享被解密? (2认同)

小智 29

后续问题:完整磁盘与仅 /home 的优缺点是什么?

加密/home是使用名为ecryptfs的用户空间文件系统完成的。它做得非常好并且与默认身份验证系统紧密结合,因此您的可用性缺点为零:当您输入帐户时(从远程外壳或从默认登录屏幕),您的密码用于解开安全密钥,然后用于动态加密/解密主目录中的文件(挂载的文件系统将直接驻留在 中/home/username)。当您注销时 /home/username 被卸载并且只有加密的文件在系统中仍然可见(通常在/home/.ecryptfs/username/.Private/)。它们看起来像一堆乱码/随机文件,因为文件名也被加密了。唯一的信息泄漏是:文件大小、时间戳和文件数量(使用全盘加密这些也被隐藏)。

如果您的系统要在多个用户之间共享,即使您决定添加全盘加密,这也是一个非常好的功能:当机器在家里启动并运行时,全盘加密的安全性是关闭的( ecryptfs) 加密在您注销时开启。

所以,全盘加密和家庭加密不一定是相互排斥的。

以下是可能的设置列表,具体取决于不同的安全需求:

  • 仅限全盘加密如果您是唯一一个使用计算机的人,并且您的计算机可以处理全盘加密的开销(所有现代台式机都可以在用户不注意的情况下做到这一点,上网本和旧笔记本电脑则不然),您可以使用全盘加密磁盘加密并将 home 放在与您的操作系统 (/) 相同的分区中。
  • 全盘加密家庭 ECRYPTFS 加密:如果您担心您的私人数据在您的电脑开启时被读取或您与其他用户共享您的计算机,那么您可以将 home 放在与 / 不同的分区中,并在整个磁盘上使用 ecryptfs加密(即通过LUKS加密/)
  • 仅限家庭 ECRYPTFS 加密:如果您不太担心有人在您离开时篡改您的系统,但您仍然希望保护您的私人数据安全,那么请跳过全盘加密,而只使用 ecryptfs(家庭加密)。这种情况的一个额外好处是,即使您安装了 Ubuntu之后,这也很容易设置,只需使用ecryptfs-migrate-home. 此外,这一直是 Ubuntu 的默认设置,在它更改了几个版本之前,增加了全盘加密的可能性。由于大多数现代台式机可以毫不费力地处理全盘加密,并且它为离线代码注入增加了一层薄薄的安全性,因此在安装程序中添加了全盘加密。但请注意,对于大多数用户来说,仅使用 ecryptfs 加密他们的家就足以满足他们的需求:让他们的朋友和普通的笔记本电脑窃贼远离他们的私人数据。此外,如果你一直被一个有正确手段的组织单独盯上,那么拥有全盘加密或只是家庭加密不会有太大区别,除非你还建立了许多其他偏执行为(例如:保留内核在一个单独的笔式驱动器中,它总是在你身上;

如果我在安装过程中没有启用磁盘加密,有什么办法可以在事后启用它?

是的,如果您当前正在使用 LVM 并且系统上有足够的空间将所有未加密的系统文件复制到加密的 LUKS 分区中,那么这会更容易。我现在不详细介绍,因为我不知道您是否正在使用 LVM,以及您是否不想现在只使用 ecrypfs 并跳过全盘加密的麻烦,直到下一次全新安装。

  • “唯一的信息泄露是......”你错过了一个重要的信息:`/tmp`。以您的用户身份运行的应用程序可能会在那里放置临时文件(例如,您编辑文档时的副本),这些文件在您注销并关闭计算机后仍然可见。另一个可能的泄漏:我想如果您使计算机休眠而不是完全关闭它,那么坚定的攻击者就可以访问您的文件。 (2认同)

KoK*_*KlA 10

由于这仍然是谷歌上的最高结果,我想用一些新信息更新它。正如用户Frederick Nord提到的: 有没有办法在安装后进行全盘加密?

有一个名为 luksipc(Luks in place encryption) 的工具经过进一步研究,我发现了最新的文档和该工具作者的警告

luksipc 是在 dm-crypt/cryptsetup/LUKS 端的任何替代方案可用之前创建的。现在已经不是这样了。因此,我建议切换到 cryptsetup-reencrypt,即使 LUKS 标头的格式发生变化,它也会在上游得到正确维护和测试(据我所知,这至少发生了两次,并且可能导致 luksipc 灾难性地失败,即破坏您的所有数据在最坏的情况下)。

所以cryptsetup-reencrypt似乎是推荐的方式。

高级概述:

  1. 建议的工具仅适用于未使用的分区,因此请使用live cd/usb
  2. 操作分区,以便在 LUKS 标头的正确位置有足够的空间
  3. 使用 cryptsetup-reencrypt 对分区进行加密
  4. 对每个分区重复(引导除外)

取自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

故障排除指南 - /boot 已加密,我无法启动

2020 年 12 月更新

所以对我来说,碰巧我只有 1 个包含 /boot 的分区。之后我无法再启动到我的系统。如果您遇到相同的问题,本指南可能有助于恢复正常工作的系统。

高级概述

  1. 确保您在 grub 和 initramfs 中拥有解密所需的软件。
  2. 知道如何启动

幼虫

  1. 启动到“live cd”ubuntu
  2. 解密分区
  3. Chroot 切换到解密系统(如果您不知道这可能有什么帮助:https : //superuser.com/questions/111152/whats-the-proper-way-to-prepare-chroot-to-recover-a-损坏的 linux 安装)
  4. 在chroot环境中
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)
  1. 留在 chroot 中!

初始文件

  1. 创建一个 initramfs hoock 脚本,它通过 copy-exec 复制 cryptestup
  2. update-initramfs -u -k all

如何开机

  1. 你会得到一个空的 grub 菜单,点击“c”来获得一个命令行。
  2. 执行以下操作:
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)
  1. 现在您应该获得带有适当引导条目的 grub 菜单。
  2. 选择“Ubuntu”后,您应该进入 initramfs。
  3. 现在执行以下命令
cryptsetup luksOpen /dev/sda6 system
exit
Run Code Online (Sandbox Code Playgroud)

选择

也许可以考虑使用下面的本指南。它似乎处理上述问题。虽然我还没有尝试过,所以我不能确定它是否有效。但可能值得研究。 https://cryptsetup-team.pages.debian.net/cryptsetup/encrypted-boot.html

PS 故障排除指南是凭记忆写的,所以可能有一些缺失的部分。但无论如何我还是想写它,因为它仍然可能对某些人有所帮助。但是,如果您发现缺少/不准确的内容,请在评论中告诉我,以便我可以更新指南 thx。


con*_*use 5

好吧,您可以备份所有重要的目录和已安装的软件。确保您的 13.10 已完全更新以避免版本冲突。通常备份的内容是:

之后你重新安装系统现在才加密。将其更新为完整扩展。然后将备份移动到加密系统并安装以前版本的所有软件。

恢复备份时,请确保不要覆盖对加密重要的文件(例如/etc/fstab/etc/cryptab一些与 grub 相关的内容以及 中的某些内容/boot不应替换为备份文件)。


Cra*_*cks 5

从工作的 Ubuntu 16.04 开始,我成功地进行了安装后根分区加密,根分区包含除 /boot 之外的所有内容。我把 /boot 放在一个单独的可移动 USB 上。值得注意的是,我在升级到 Ubuntu 18 之前就这样做了,并且升级在加密磁盘版本上运行良好。

加密没有“就地”完成,这对我来说很好,因为无论如何,在新设置正常工作之前我不想覆盖工作版本。

执行正确的程序非常简单且快速。(尽管弄清楚正确的程序非常耗时,因为我遵循了一些错误的线索。)

大纲

  1. 创建一个 live Linux USB 盘 - 启用持久性很方便。在该实时 USB 磁盘上启动。
  2. 在空分区上创建 luks 加密卷组。(在我的例子中,它与原始 Linux 位于同一磁盘上,但也可能是另一个磁盘。)在该加密分区上创建 /(根)并交换逻辑卷。就复制的 Linux 而言,这些将充当虚拟分区。
  3. 将文件从旧根目录复制到新根目录。
  4. 设置另一个 USB 并对其进行分区以充当可移动启动盘。
  5. 在新根目录中设置一些文件,执行一些魔法,然后 chroot 到新根目录中,然后从 chroot 后的新根环境将 grub 安装到引导磁盘上。

细节

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 中。