8.3. 将 Keylime verifier 配置为容器

Keylime verifier 对系统完整性执行初始和定期检查,并支持使用代理安全地引导加密密钥。您可以将 Keylime verifier 配置为容器,而不是 RPM 方法,而无需主机上的任何二进制文件或软件包。容器部署提供更好的隔离、模块化和 Keylime 组件的可重复性。

启动容器后,Keylime verifier 会使用默认配置文件进行部署。您可以使用一个或多个方法自定义配置:

  • 将包含配置文件的目录挂载到容器中。这在所有 RHEL 9 版本中可用。
  • 直接在容器上修改环境变量。这包括在 RHEL 9.3 及更新的版本中。修改环境变量会覆盖配置文件中的值。

前提条件

  • podman 软件包及其依赖项已安装在系统上。
  • 可选:您可以访问 Keylime 从验证器保存数据的数据库。您可以使用以下数据库管理系统:

    • SQLite (默认)
    • PostgreSQL
    • MySQL
    • MariaDB
  • 您有来自您的证书颁发机构的有效密钥和证书。

流程

  1. 可选:安装 keylime-verifier 软件包以访问配置文件。您可以在没有此软件包的情况下配置容器,但可能更容易修改软件包提供的配置文件。

    # dnf install keylime-verifier
  2. 通过在 /etc/keylime/verifier.conf.d/ 目录中创建一个新的 .conf 文件来将 verifier 绑定到所有可用 IP 地址,例如: /etc/keylime/verifier.conf.d/00-verifier-ip.conf,其内容如下:

    [verifier]
    ip = *
    • 另外,您还可以使用 port 选项更改验证器的端口默认值 8881
  3. 可选:为代理列表配置 verifier 的数据库。默认配置使用验证器的 /var/lib/keylime/cv_data.sqlite/ 目录中的 SQLite 数据库。您可以通过在 /etc/keylime/verifier.conf.d/ 目录中创建一个新的 .conf 文件来定义一个不同的数据库,例如:/etc/keylime/verifier.conf.d/00-db-url.conf,其内容如下:

    [verifier]
    database_url = <protocol>://<name>:<password>@<ip_address_or_hostname>/<properties>

    <protocol>://<name>:<password>@<ip_address_or_hostname>/<properties> 替换为数据库的 URL,如 postgresql://verifier:UQ?nRNY9g7GZzN7@198.51.100.1/verifierdb

    确保您使用的凭证对 Keylime 有权限,以创建数据库结构。

  4. 将证书和密钥添加到验证器(verifier)中。您可以让 Keylime 生成它们,或使用现有的密钥和证书生成它们:

    • 使用默认 tls_dir = generate 选项,Keylime 在 /var/lib/keylime/cv_ca/ 目录中为验证器、注册器和租户生成新证书。
    • 要在配置中加载现有的密钥和证书,请在验证器配置中定义其位置。

      注意

      证书必须可以被运行 Keylime 进程的 keylime 用户访问。

      /etc/keylime/verifier.conf.d/ 目录中创建一个新的 .conf 文件,例如: /etc/keylime/verifier.conf.d/00-keys-and-certs.conf,其内容如下:

      [verifier]
      tls_dir = /var/lib/keylime/cv_ca
      server_key = </path/to/server_key>
      server_cert = </path/to/server_cert>
      trusted_client_ca = ['</path/to/ca/cert1>', '</path/to/ca/cert2>']
      client_key = </path/to/client_key>
      client_cert = </path/to/client_cert>
      trusted_server_ca = ['</path/to/ca/cert3>', '</path/to/ca/cert4>']
      注意

      使用绝对路径定义密钥和证书位置。或者,相对路径是从 tls_dir 选项中定义的目录解析的。

  5. 在防火墙中打开端口:

    # firewall-cmd --add-port 8881/tcp
    # firewall-cmd --runtime-to-permanent

    如果您使用其他端口,请将 8881 替换为 .conf 文件中定义的端口号。

  6. 运行容器:

    $ podman run --name keylime-verifier \
      -p 8881:8881 \
      -v /etc/keylime/verifier.conf.d:/etc/keylime/verifier.conf.d:Z \
      -v /var/lib/keylime/cv_ca:/var/lib/keylime/cv_ca:Z \
      -d \
      -e KEYLIME_VERIFIER_SERVER_KEY_PASSWORD=<passphrase1> \
      -e KEYLIME_VERIFIER_CLIENT_KEY_PASSWORD=<passphrase2> \
      registry.access.redhat.com/rhel9/keylime-verifier
    • -p 选项在主机上打开默认端口 8881,并在容器上打开默认端口 8881。
    • v 选项为目录创建到容器的绑定挂载。

      • 使用 Z 选项,Podman 使用私有未共享标签标记内容。这意味着只有当前容器可以使用私有卷。
    • d 选项可在后台运行容器分离和后台。
    • 选项 -e KEYLIME_VERIFIER_SERVER_KEY_PASSWORD= &lt;passphrase1& gt; 定义服务器密钥密码短语。
    • 选项 -e KEYLIME_VERIFIER_CLIENT_KEY_PASSWORD= &lt;passphrase2& gt; 定义客户端密钥密码短语。
    • 您可以使用 -e KEYLIME_VERIFIER _<ENVIRONMENT_VARIABLE> = <value&gt; 选项覆盖环境变量的配置选项。要修改附加选项,请为每个环境变量单独插入 -e 选项。有关环境变量及其默认值的完整列表,请参阅 第 8.12 节 “Keylime 环境变量”

验证

  • 检查容器是否正在运行:

    $ podman ps -a
    CONTAINER ID  IMAGE                                                     COMMAND           CREATED         STATUS         PORTS                   NAMES
    80b6b9dbf57c  registry.access.redhat.com/rhel9/keylime-verifier:latest  keylime_verifier  14 seconds ago  Up 14 seconds  0.0.0.0:8881->8881/tcp  keylime-verifier

其他资源