便携式 Ubuntu,能够在任何 HDD 上创建、挂载和删除加密虚拟磁盘,而无需跟踪

Byt*_*der 3 encryption partitioning disk-image system-installation

我会去度假,无论我去哪里,我的房间里都会有一台电脑。我不知道什么类型的电脑,多少岁,什么规格,什么都没有。但可能它会安装 Windows,可能我只能以受限用户身份登录。

两者都是我不喜欢的东西。

所以我想我可以在一个可启动的 8GB USB 记忆棒上携带我自己的便携式 Ubuntu。但是您会看到 8GB 并不算多,而且 USB 也不是世界上最快的东西,尤其是在计算机可能只有 2.0 端口的情况下。

因此,如果我可以将交换甚至一些数据或系统部件外包给这台计算机的 HDD,我会很高兴,但我不想以任何方式修改现有系统,因此重新分区不是一种选择。

我认为在现有文件系统中创建一个虚拟文件系统映像文件并安装它是最好的。不过应该是加密的。

不,一个简单的现场 USB 是不够的,它至少必须是持久的。但是,硬盘使用功能也应该在那里。

那么我怎样才能最好地设置它,一个安装在 USB 记忆棒上的系统,它可以在现有文件系统上创建和挂载加密虚拟磁盘,而无需对其进行不可逆转的修改?详细的分步指南表示赞赏,无论安装与普通桌面安装有何不同。

Dav*_*ter 9

常规文件系统

  1. 在计算机内部驱动器(可能是 NTFS)的现有文件系统上为您要创建的每个(加密)分区创建一个文件,假设内部文件系统安装在/mnt/internal-drive1 GiB 作为结果的所需大小划分:

    head -c 1G < /dev/zero > /mnt/internal-drive/some/arbitrary/path/partition.img
    
    Run Code Online (Sandbox Code Playgroud)

    如果你想要一个不错的进度指示器,你可以使用pv

    head -c 1G < /dev/zero | pv -s 1g -pterab > .../partition.img
    
    Run Code Online (Sandbox Code Playgroud)

    如果你想基于稀疏文件创建一个分区,而不是,用truncate(1)--size(简写:-s)选项来指定字节大小:

    truncate -s 1073741824 .../partition.img
    
    Run Code Online (Sandbox Code Playgroud)

    稀疏文件的创建速度很快,并且只占用底层文件系统所需的空间,但由于碎片化,访问速度可能会变慢。某些较旧的文件系统(如 FAT)不支持稀疏文件。NTFS 可以。

  2. 在刚刚创建的文件中初始化所需的文件系统,例如ext4

    mkfs -t ext4 [FS-OPTIONS...] .../partition.img
    
    Run Code Online (Sandbox Code Playgroud)

    文件系统初始化程序可能会要求您确认在常规文件中创建文件系统,甚至可能会拒绝这样做,除非您设置了--force标志或类似内容。

  3. 创建一个由分区文件支持的循环设备并挂载它。合理的最新版本mount(8), 可以通过以下loop选项一步完成此操作:

    mount -t ext4 -o defaults,loop[,FS-OPTIONS...] .../partition.img /mnt/my-partition
    
    Run Code Online (Sandbox Code Playgroud)
  4. 享受!

交换分区

  1. 与上面的步骤 1 类似,但您可能希望避免使用 sparse 选项。

  2. 初始化交换文件:

    mkswap /mnt/internal-drive/some/arbitrary/path/swap.img
    
    Run Code Online (Sandbox Code Playgroud)
  3. 换机:

    swapon [OPTIONS...] /mnt/internal-drive/some/arbitrary/path/swap.img
    
    Run Code Online (Sandbox Code Playgroud)

块级加密

就像在前几节中一样,常规文件可以像块设备一样使用。所以,你可以使用cryptsetup(8)crypttab(5)cryptdisks_start(8)cryptdisks_stop(8)你通常会,因为他们创造了自动常规文件回路设备:

  1. 就像上述部分中的步骤 1。

  2. 如果您想使用 LUKS 来管理您的加密分区,请对其进行初始化:

    cryptsetup luksFormat .../partition.img [OPTIONS...]
    
    Run Code Online (Sandbox Code Playgroud)
  3. 使用您选择的加密类型和选项打开分区:

    cryptsetup open .../partition.img <NAME> --type <DEVICE_TYPE> [OPTIONS...]
    
    Run Code Online (Sandbox Code Playgroud)

    哪里<NAME>是DM-隐窝映射的名称来创建分区并<DEVICE_TYPE>luks,如果您在步骤2中创建一个陆氏包装,或plain为一个普通的DM-隐窝分区。(cryptsetup支持其他设备类型,但它们要么是传统的,要么是为了兼容 TrueCrypt。)

  4. 加密分区现在可在/dev/mapper/<NAME>

    • 您可以像在任何块设备上一样在其上创建和挂载文件系统,如从步骤 2 开始的上述部分中所述,或者

    • 您可以使用您最喜欢的分区管理器在其中创建一个分区表,如果您想在其中包装多个分区而不必为它们单独多次提供相同的密码:

      fdisk /dev/mapper/<NAME>
      
      Run Code Online (Sandbox Code Playgroud)

      要求内核重新读取分区表并重新填充设备节点文件/dev

      partprobe /dev/mapper/<NAME>
      
      Run Code Online (Sandbox Code Playgroud)

      您现在有可用的各个分区,/dev/mapper/<NAME>1等等。

开机安装

您可以像往常一样为这些分区创建fstab(和crypttab)条目,但使用上述loop选项。基于文件的交换空间不需要特殊的挂载选项。您只需要注意在这些新分区之前在内部驱动器上安装底层文件系统。例如:

LABEL=Windows    /mnt/internal-drive    ntfs    defaults    0  2
/mnt/internal-drive/some/arbitrary/path/home.img    /home    ext4     defaults,loop    0  3
/mnt/internal-drive/some/arbitrary/path/swap.bin    none     swap     sw    0  0
Run Code Online (Sandbox Code Playgroud)

之后销毁文件系统

简短版本:不要!使用加密并销毁密钥。

长版本:覆盖或“粉碎”单个文件的工作原理是,文件从未占用当前占用的其他驱动器扇区(例如,因为文件系统或其维护工具之一(例如碎片整理)决定重新定位它们) 并且没有文件数据泄漏到文件系统元数据部分(例如在日志记录期间)。这些假设在大多数情况下适用于较旧的非日志文件系统(FAT、ext2)。对于 NTFS、ext3/4 和 HFS+,除非在罕见、不切实际/不切实际的条件下,否则它们不能可靠地保持。

除了驱动器映像文件当前占用的扇区外,您还可以覆盖所有未分配的扇区。Microsoftcipher.exe可以为 NTFS 执行此操作,据说它可以捕获几乎所有扇区,这些扇区可能仍包含您宝贵的文件系统映像的剩余部分。