19.17. 对交换区进行加密
上一页 | 第 19 章 存储 | 下一页

## 19.17. 对交换区进行加密

原作 Christian Brüffer.

FreeBSD 提供了易于配置的交换区加密机制。 随所用的 FreeBSD 版本， 可用的配置选项会有所不同， 而配置方法也会有一些差异。 可以使用 gbde(8) 和 geli(8) 两种加密系统来进行交换区的加密操作。 前面所说的这两种加密系统， 都用到了 `encswap` 这个 rc.d 脚本。

在前面的小节 如何加密磁盘分区 中， 已经就不同的加密系统之间的区别进行了简单的讨论。

### 19.17.1. 为什么需要对交换区进行加密？

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

### 19.17.2. 准备

### 注意:

在本节余下的部分中， 我们约定使用 `ad0s1b` 作为交换区。

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

`#` `dd if=/dev/random of=/dev/ad0s1b bs=1m`

### 19.17.3. 使用 gbde(8) 来加密交换区

`/etc/fstab` 中与交换区对应的行中， 设备名应追加 `.bde` 后缀：

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

### 19.17.4. 使用 geli(8) 来加密分区

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

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

geli(8) 默认情况下使用密钥长度为 256-位的 AES 加密算法。

当然， 这些默认值是可以通过 `/etc/rc.conf` 中的 `geli_swap_flags` 选项来修改的。 下面的配置表示让 rc.d 脚本 `encswap` 创建一个 geli(8) 交换区， 在其上使用密钥长度为 128-位 的 Blowfish 加密算法， 4 kilobytes 的扇区尺寸， 并采用 “最后一次关闭时卸下” 的策略：

geli_swap_flags="-e blowfish -l 128 -s 4096 -d"

请参见 geli(8) 联机手册中关于 `onetime` 命令的说明， 以了解其他可用的选项。

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

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

如果使用了 gbde(8)， 则：

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

如果使用了 geli(8)， 则：

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

上一页 | 上一级 | 下一页
19.16. 加密磁盘分区 | 起始页 | 19.18. 高可用性存储 (HAST)

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

如果对于FreeBSD有问题，请先阅读 文档，如不能解决再联系 <questions@FreeBSD.org>.
关于本文档的问题请发信联系 <doc@FreeBSD.org>.