16.15. 加密磁盘分区

Contributed by Lucky Green.

FreeBSD 提供了极好的数据保护措施,防止未受权的数据访问。 文件权限和强制访问控制(MAC)(看 Chapter 15) 可以帮助预防在操作系统处于运行状态和计算机加电时未受权的第三方访问数据。 但是,和操作系统强制受权不相关的是,如果黑客有物理上访问计算机的可能, 那他就可以简单的把计算机的硬件安装到另一个系统上拷贝出敏感的数据。

不管怎样,黑客都有可能取得并获取停机时的硬件, GEOM 基于磁盘的加密 (gbde) 能够保护在计算机文件系统上的数据并防止黑客得到重要的信息。 不像 cumbersome 加密方法只加密个别的文件, gbde 透明的加密整个文件系统。 整个硬盘都是加密过的非明文数据。

16.15.1. 在内核中启用 gbde

  1. 成为 root

    配置 gbde 需要超级用户的权力。

    % su -
    Password:
    
  2. 验证操作系统的版本

    gbde(4) 需要 FreeBSD 5.0 或更高的版本。

    # uname -r
    5.0-RELEASE
    
  3. 在内核配置文件中添加对 gbde(4) 的支持

    使用您喜欢的文本编辑器, 在内核配置文件中添加下面一行:

    options GEOM_BDE

    配置,编译,安装 FreeBSD 内核, 这个过程在 Chapter 8 中有详细描述。

    重新引导进入新的内核。

16.15.2. 准备加密整个硬盘

下面这个例子假设您添加了一个新的硬盘在您的系统并将拥有一个单独的加密分区。 这个分区将挂接在 /private目录下。 gbde 也可以用来加密 /home/var/mail, 但是这需要更多的复杂命令来执行。

  1. 添加新的硬盘

    添加新的硬盘到系统中可以查看在 Section 16.3 中的说明。 这个例子的目的是说明一个新的硬盘分区已经添加到系统中如: /dev/ad4s1c。在例子中 /dev/ad0s1* 设备代表系统中存在的标准 FreeBSD 分区。

    # ls /dev/ad*
    /dev/ad0        /dev/ad0s1b     /dev/ad0s1e     /dev/ad4s1
    /dev/ad0s1      /dev/ad0s1c     /dev/ad0s1f     /dev/ad4s1c
    /dev/ad0s1a     /dev/ad0s1d     /dev/ad4
    
  2. 创建一个目录来保存 gbde Lock 文件

    # mkdir /etc/gbde
    

    gbde lock 文件包含了 gbde 需要访问的加密分区的信息。 没有 lock 文件, gbde 将不能解密包含在加密分区上的数据。 每个加密分区使用一个独立的 lock 文件。

  3. 初始化 gbde 分区

    一个 gbde 分区在使用前必须被初始化, 这个初始化过程只需要执行一次:

    # gbde init /dev/ad4s1c -i -L /etc/gbde/ad4s1c
    

    gbde(8) 将打开您的编辑器, 提示您去设置在一个模板文件中的配置变量。 使用 UFS1 或 UFS2,设置扇区大小为 2048:

    $FreeBSD: src/sbin/gbde/template.txt,v 1.1 2002/10/20 11:16:13 phk Exp $
    #
    # Sector size is the smallest unit of data which can be read or written.
    # Making it too small decreases performance and decreases available space.
    # Making it too large may prevent filesystems from working.  512 is the
    # minimum and always safe.  For UFS, use the fragment size
    #
    sector_size     =       2048
    [...]
    

    gbde(8) 将让您输入两次用来加密数据的密钥短语。 两次输入的密钥必须相同。 gbde 保护您数据的能力依靠您选择输入的密钥的质量。 [1]

    gbde init 命令为您的 gbde 分区创建了一个 lock 文件, 在这个例子中存储在 /etc/gbde/ad4s1c中。

    Cautiongbde lock 文件必须和加密分区上的内容一块备份。 当一个 lock 文件被独自删除时, 不能确定一个 gbde 分区上的数据被解密过。 没有 lock 文件, 就是合法的磁盘所有者不经过大量细致的工作也将不能访问经过加密分区上的数据, 这是 gbde(8) 在设计时整体上不支持。

  4. 把加密分区和内核进行关联

    # gbde attach /dev/ad4s1c -l /etc/gbde/ad4s1c
    

    在加密分区的初始化过程中您将被要求提供一个密码短语。 新的加密设备将在 /dev 中显示为 /dev/device_name.bde

    # ls /dev/ad*
    /dev/ad0        /dev/ad0s1b     /dev/ad0s1e     /dev/ad4s1
    /dev/ad0s1      /dev/ad0s1c     /dev/ad0s1f     /dev/ad4s1c
    /dev/ad0s1a     /dev/ad0s1d     /dev/ad4        /dev/ad4s1c.bde
    
  5. 在加密设备上创建文件系统

    当加密设备和内核进行关联后, 您就可以使用 newfs(8) 在此设备上创建文件系统, 使用 newfs(8) 来初始化一个 UFS2 文件系统比初始化一个 UFS1 文件系统还要快,摧荐使用 -O2 选项。

    Note: -O2 选项在 FreeBSD 5.1-RELEASE 或更新的版本中是默认的选项。

    # newfs -U -O2 /dev/ad4s1c.bde
    

    Note: newfs(8) 命令必须在一个 gbde 分区上执行, 这个分区通过一个存在的 *.bde 设备名进行标识。

  6. 挂接加密分区

    为加密文件系统创建一个挂接点。

    # mkdir /private
    

    挂接加密文件系统。

    # mount /dev/ad4s1c.bde /private
    
  7. 校验加密文件系统是否有效

    加密的文件系统现在对于 df(1) 应该可见并可以使用。

    % df -H
    Filesystem        Size   Used  Avail Capacity  Mounted on
    /dev/ad0s1a      1037M    72M   883M     8%    /
    /devfs            1.0K   1.0K     0B   100%    /dev
    /dev/ad0s1f       8.1G    55K   7.5G     0%    /home
    /dev/ad0s1e      1037M   1.1M   953M     0%    /tmp
    /dev/ad0s1d       6.1G   1.9G   3.7G    35%    /usr
    /dev/ad4s1c.bde   150G   4.1K   138G     0%    /private
    

16.15.3. 挂接已经存在的加密文件系统

每次系统启动后, 在使用加密文件系统前必须和内核重新进行关联, 校验错误和再次挂接。使用的命令必须由 root用户来执行。

  1. 关联 gbde 分区到内核

    # gbde attach /dev/ad4s1c -l /etc/gbde/ad4s1c
    

    您将被要求提供您在初始化加密 gbde 分区的过程中选定的密码短语。

  2. 校验文件系统错误

    加密文件系统不能列在 /etc/fstab 文件中进行自动加载, 在加载前必须手动运行 fsck(8) 命令对文件系统进行错误检测。

    # fsck -p -t ffs /dev/ad4s1c.bde
    
  3. 挂接加密文件系统

    # mount /dev/ad4s1c.bde /private
    

    加密后的文件系统现在可以有效使用。

16.15.3.1. 自动挂接加密文件系统

可以创建一个脚本来自动进行关联、检测、和挂接一个加密分区, 但是为了安全起见,脚本程序中不应该包含 gbde(8) 密码。 取而代之,摧荐这样的脚本要手工来运行, 在要求提供密码时可以通过控制台或 ssh(1)

16.15.4. 用 gbde 进行加密保护

gbde(8) 在 CBC 模式上使用 128-bit AES 对扇区进行加密, 每个扇区在硬盘上的加密都使用不同的 AES 密钥。 想了解更多的信息关于 gbde 的设计,包括每个扇区的密钥是怎样从用户提供的密钥短语产生的, 请看 gbde(4)

16.15.5. 兼容性问题

sysinstall(8) 是和 gbde 加密设备不兼容的。 在启动 sysinstall(8) 时必须将 *.bde 设备和内核进行分离,否则在初始化探测设备时将引起冲突。 与加密设备进行分离在我们的例子中使用如下的命令:

# gbde detach /dev/ad4s1c

也应该注意,作为 vinum(4) 不能使用 geom(4) 子系统, 您不能同时使用 gbdevinum 卷。

Notes

[1]

这个提示教您怎样选择一个安全易记的密钥短语, 请看 Diceware Passphrase 网站。