FreeBSD 使用手册
上一页 | 第18章 　存储 | 下一页

# 18.17 对交换区进行加密

原作 Christian Brüffer.

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

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

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

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

## 18.17.2 准备

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

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

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

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

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

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

## 18.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` 命令的说明， 以了解其他可用的选项。

## 18.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%

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

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

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