在 Oracle® Solaris 11.2 中管理 ZFS 文件系统

退出打印视图

更新时间: 2014 年 12 月
 
 

加密 ZFS 文件系统

加密是对数据进行编码以实现保密性的过程,数据所有者需要使用密钥才能访问已编码的数据。使用 ZFS 加密的优点如下所述:

  • ZFS 加密与 ZFS 命令集相集成。与其他 ZFS 操作一样,加密操作(例如密钥更改和重建密钥)是联机执行的。

  • 您可以使用现有的存储池,只要对它们进行了升级。可以灵活地加密特定的文件系统。

  • 在 CCM 和 GCM 操作模式下,使用密钥长度为 128、192 和 256 的 AES(Advanced Encryption Standard,高级加密标准)对数据进行加密。

  • ZFS 加密使用 Oracle Solaris 加密框架,该框架自动允许它访问加密算法的任何可用硬件加速或优化的软件实现。

  • 当前,您无法对 ZFS 根文件系统或其他 OS 组件(例如 /var 目录)进行加密,即使它是单独的文件系统也是如此。

  • ZFS 加密可由后代文件系统继承。

  • 如果向一般用户分配了 createmountkeysourcechecksum 以及 encryption 权限,则该用户可以创建加密的文件以及管理密钥操作。

可以在创建 ZFS 文件系统时设置加密策略,但是无法更改该策略。例如,在启用了加密属性的情况下创建了 tank/home/darren 文件系统。缺省的加密策略是提示您输入口令短语,口令短语的长度必须至少为 8 个字符。

# zfs create -o encryption=on tank/home/darren
Enter passphrase for 'tank/home/darren': xxxxxxx
Enter again: xxxxxxxx

确认文件系统已启用加密。例如:

# zfs get encryption tank/home/darren
NAME              PROPERTY    VALUE        SOURCE
tank/home/darren  encryption  on           local

当文件系统的加密值为 on 时,缺省的加密算法为 aes-128-ccm

包装密钥用于加密实际的数据加密密钥。如上例所示,在创建加密的文件系统时,会将包装密钥从 zfs 命令传递到内核。包装密钥位于一个文件(采用 raw 或 hex 格式)中,或者派生自口令短语。

包装密钥的格式和位置是在 keysource 属性中指定的,如下所示:

keysource=format,location
  • 格式为下列值之一:

    • raw-原始的密钥字节

    • hex-十六进制密钥字符串

    • passphrase-用以生成密钥的字符串

  • 位置为下列值之一:

    • prompt-创建或挂载文件系统时提示您输入密钥或口令短语

    • file:///filename-密钥文件或口令短语文件在文件系统中的位置

    • pkcs11-描述 PKCS#11 令牌中密钥或口令短语位置的 URI

    • https://location-密钥文件或口令短语文件在安全服务器上的位置。不建议使用此方法以明文形式传输密钥信息。根据在 keysource 属性的格式部分中请求的内容,对 URL 执行 GET 可仅返回密钥值或口令短语。

      keysource 使用 https:// 定位符时,服务器提供的证书必须是 libcurl 和 OpenSSL 信任的证书。将自己的信任锚点证书或自签名证书添加到 /etc/openssl/certs 下的证书库中。将 PEM 格式证书放在 /etc/certs/CA 目录下并运行以下命令:

      # svcadm refresh ca-certificates

如果 keysource 格式为 passphrase,则包装密钥派生自口令短语。否则,keysource 属性值指向实际的包装密钥,为原始字节或十六进制格式。您可以指定口令短语存储在文件中,或者存储在提示输入的原始字节流中,这可能仅适合于编写脚本。

如果文件系统的 keysource 属性值标识 passphrase,则包装密钥派生自口令短语(使用 PKCS#5 PBKD2 和按文件系统随机生成的 salt)。这意味着,相同的口令短语在后代文件系统上使用时可生成不同的包装密钥。

文件系统的加密策略由后代文件系统继承,且不可删除。例如:

# zfs snapshot tank/home/darren@now
# zfs clone tank/home/darren@now tank/home/darren-new
Enter passphrase for 'tank/home/darren-new': xxxxxxx
Enter again: xxxxxxxx
# zfs set encryption=off tank/home/darren-new
cannot set property for 'tank/home/darren-new': 'encryption' is readonly

如果需要复制或迁移加密或未加密的 ZFS 文件系统,请注意以下要点:

  • 当前,不能将以未加密形式发送的数据集流接收为加密的流,即使接收池的数据集已启用加密。

  • 可以使用以下命令将未加密的数据迁移到已启用加密的池/文件系统:

    • cp –r

    • find | cpio

    • tar

    • rsync

  • 可以将复制的加密文件系统流接收到加密文件系统中,且数据保持加密状态。有关更多信息,请参见Example 5–4