17.13. 对交换区进行加密

Written by Christian Brueffer.

与加密磁盘分区类似, 加密交换区有助于保护敏感信息。 为此, 我们不妨考虑一个需要处理敏感信息的程序, 例如, 它需要处理口令。 如果这些口令一直保持在物理内存中, 则一切相安无事。 然而, 如果操作系统开始将内存页换出到交换区, 以便为其他应用程序腾出内存时, 这些口令就可能以未加密的形式写到磁盘上, 并为攻击者所轻易获得。 加密交换区能够有效地解决这类问题。

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

17.13.1. 配置加密的交换分区

到目前为止, 交换区仍是未加密的。 很可能其中已经存有明文形式的口令或其他敏感数据。 要纠正这一问题, 首先应使用随机数来覆盖交换分区的数据:

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

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

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

另一种方法是使用 geli(8) 来达到加密交换区的目的, 其过程与使用 gbde(8) 大体相似。 此时, 在 /etc/fstab 中交换区对应的行中, 设备名应追加 .eli 后缀:

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

geli(8) 默认情况下使用密钥长度为 256-位的 AES 加密算法。一般使用默认配置即可。如果需要,可以在/etc/fstab的选项字段中更改这些默认值。可能的标志包括:

aalgo

数据完整性校验算法,用于确保加密的数据未被篡改。可选的算法列表在geli(8)可找到。

ealgo

用于保护数据的加密算法。可选的算法列表在geli(8)

keylen

用于加密算法的密钥的长度。请参阅geli(8)查看每个加密算法所支持的密钥长度。

sectorsize

数据在加密之前需分块(扇区)。扇区尺寸越大,性能越高,存储开销越高。建议的大小为 4096 字节。

本示例使用密钥长度为 128 位的 Blowfish 算法配置加密交换分区,其扇区大小为 4 KB:

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

17.13.2. 验证所作的配置能够发挥作用

在重启系统之后, 就可以使用 swapinfo 命令来验证加密交换区是否已经在正常运转了。

如果使用了 gbde(8), 则:

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

如果使用了 geli(8), 则:

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

本文档和其它文档可从这里下载: ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

如果对于FreeBSD有问题,请先阅读 文档,如不能解决再联系 <questions@FreeBSD.org>.

关于本文档的问题请发信联系 <doc@FreeBSD.org>.