20.14.加密交换分区 ================== 与加密磁盘分区一样,加密交换空间也是用于保护敏感信息。假想有一个处理密码的应用程序,只要这些密码停留在物理内存中,它们就不会被写入磁盘,并且在重启后会被清除掉。然而,如果 FreeBSD 开始交换内存页以释放空间,密码可能会被未加密地写入磁盘。加密交换空间可以作为这种情况的解决方案。 本节示范了如何使用 `gbde(8) `__ 或 `geli(8) `__ 加密工具配置一个加密的交换分区。它假定 **/dev/ada0s1b** 是交换分区。 20.14.1.配置交换分区加密 ------------------------ 在默认情况下是交换分区是不进行加密的,在继续之前应该清除任何敏感数据。要用随机的垃圾覆盖当前的交换分区,请执行以下命令: .. raw:: latex \diilbookstyleinputcell .. code:: shell-session # dd if=/dev/random of=/dev/ada0s1b bs=1m 要使用 `gbde(8) `__ 对交换分区进行加密,为 **/etc/fstab** 中的交换分区添加 ``.bde`` 后缀: .. raw:: latex \diilbookstyleinputcell .. code:: shell-session # Device Mountpoint FStype Options Dump Pass# /dev/ada0s1b.bde none swap sw 0 0 要使用 `geli(8) `__ 加密交换分区,请使用 ``.eli`` 后缀: .. raw:: latex \diilbookstyleinputcell .. code:: shell-session # Device Mountpoint FStype Options Dump Pass# /dev/ada0s1b.eli none swap sw 0 0 默认情况下,\ `geli(8) `__ 使用 AES 算法,密钥长度为 128 位。通常情况下,默认设置就足够了。如果需要,这些默认值可以在 **/etc/fstab** 的 ``options`` 字段中进行修改。可用的参数是: **aalgo** 数据完整性验证算法,用于确保加密的数据没有被篡改。支持的算法列表见 `geli(8) `__\ 。 **ealgo** 用来保护数据的加密算法。参见 `geli(8) `__ 获取支持的算法列表。 **keylen** 用于加密算法的密钥的长度。关于每种加密算法所支持的密钥长度,见 `geli(8) `__\ 。 **sectorsize** 数据在加密前被分割成的块的大小。较大的扇区大小可以提高性能,但代价是较高的存储开销。推荐的大小是 4096 字节。 这个例子使用 Blowfish 算法配置了一个加密的交换分区,密钥长度为 128 位,扇区大小为 4 kb: .. raw:: latex \diilbookstyleinputcell .. code:: shell-session # Device Mountpoint FStype Options Dump Pass# /dev/ada0s1b.eli none swap sw,ealgo=blowfish,keylen=128,sectorsize=4096 0 0 20.14.2.校验加密交换空间 ------------------------ 系统重新启动之后,可以使用 ``swapinfo`` 来验证加密的交换空间是否正常运行。 如果使用 `gbde(8) `__\ : .. raw:: latex \diilbookstyleinputcell .. code:: shell-session % swapinfo Device 1K-blocks Used Avail Capacity /dev/ada0s1b.bde 542720 0 542720 0 如果使用 `geli(8) `__\ : .. raw:: latex \diilbookstyleinputcell .. code:: shell-session % swapinfo Device 1K-blocks Used Avail Capacity /dev/ada0s1b.eli 542720 0 542720 0