18.14. 加密交换分区

与磁盘分区的加密一样,交换空间的加密也是用于保护敏感信息。考虑一个处理密码的应用程序。只要这些密码停留在物理内存中,它们就不会被写入磁盘,并且在重启后会被清除掉。然而,如果 FreeBSD 开始交换内存页以释放空间,密码可能会被未加密地写入磁盘。加密交换空间可以作为这种情况的解决方案。

本节演示了如何使用 gbde(8)geli(8) 加密法配置一个加密的交换分区。它假定/dev/ada0s1b是交换分区。

18.14.1 配置交换分区加密

在默认情况下是不加密交换分区的,在继续之前应该清除任何敏感数据。要用随机的垃圾覆盖当前的交换分区,请执行以下命令:

  1. # dd if=/dev/random of=/dev/ada0s1b bs=1m

要使用 gbde(8) 对交换分区进行加密,在 /etc/fstab 中的交换行添加 .bde 后缀:

  1. # Device Mountpoint FStype Options Dump Pass#
  2. /dev/ada0s1b.bde none swap sw 0 0

要使用 geli(8) 加密交换分区,请使用 .eli 后缀:

  1. # Device Mountpoint FStype Options Dump Pass#
  2. /dev/ada0s1b.eli none swap sw 0 0

默认情况下,geli(8) 使用 AES 算法,密钥长度为 128 位。通常情况下,默认设置就足够了。如果需要,这些默认值可以在 /etc/fstaboptions字段中进行修改。可能的标志是:

aalgo

数据完整性验证算法,用于确保加密的数据没有被篡改。支持的算法列表见 geli(8)。

ealgo

用来保护数据的加密算法。参见geli(8)获取支持的算法列表。

keylen

用于加密算法的密钥的长度。关于每种加密算法所支持的密钥长度,见 geli(8)。

sectorsize

数据在加密前被分割成的块的大小。较大的扇区大小可以提高性能,但代价是较高的存储开销。推荐的大小是4096字节。

这个例子使用 Blowfish 算法配置了一个加密的交换分区,密钥长度为 128 位,扇区大小为 4 千字节。

  1. # Device Mountpoint FStype Options Dump Pass#
  2. /dev/ada0s1b.eli none swap sw,ealgo=blowfish,keylen=128,sectorsize=4096 0 0

18.14.2 加密交换空间校验

只要系统重新启动,可以使用 swapinfo 验证加密交换的正确操作。

如果使用gbde

  1. % swapinfo
  2. Device 1K-blocks Used Avail Capacity
  3. /dev/ada0s1b.bde 542720 0 542720 0

如果使用geli

  1. % swapinfo
  2. Device 1K-blocks Used Avail Capacity
  3. /dev/ada0s1b.eli 542720 0 542720 0