安全计算配置文件

介绍如何配置 DC/OS 以使用 Linux 系统安全计算 (SECCOMP) 配置文件

安全计算模式 (seccomp) 是一种 Linux 系统内核功能,用于限制正在运行的容器中的可用操作。seccomp() 系统调用对调用进程的 seccomp 状态起作用。您可以使用此功能来限制应用程序对底层系统的访问。

DC/OS 中的 seccomp 支持基于 Mesos 1.8,后者通过 UCR 容器化工具 引入了配置 seccomp 的能力,为 DC/OS 上部署的服务提供更高的隔离度和安全性。DC/OS 内的默认 seccomp 配置文件可通过禁用 300 多个系统调用来为运行中的容器提供合理的默认值。

启用和禁用安全计算模式

默认情况下,DC/OS 安装时已启用安全计算模式。您可以通过使用 安装 DC/OS 来选择不使用 seccomp。但是,在选择不使用之前,请记住,要使每个代理的安装与群集中的所有其他代理保持一致。只有高级用户才能进行偏离此策略的操作。

管理 seccomp 配置文件

DC/OS 使用 /etc/dcos/mesos/seccomp/ 文件夹来管理 seccomp 配置文件,并提供一个名为“default.json”的默认配置文件,该默认配置文件定义了 .

除默认配置文件外,还可以创建任意数量的其他配置文件。定义配置文件的文件名称被视为配置文件的名称。如果要将其他配置文件添加到一个代理,则务必在群集中的所有代理上共享相同的配置文件。

重新启动代理以使用 seccomp 配置文件

使用先前部署的代理在 DC/OS 系统群集上提供 seccomp 配置文件时,请牢记以下准则:

  • 如果在新的或现有的 DC/OS 群集上启用 seccomp,必须重新启动代理进程,以使 seccomp 配置文件的配置生效。
  • 如果您选择将配置文件添加到已启用 seccomp 的 DC/OS 群集上的 seccomp 文件夹,则无需重新启动代理即可使用这些配置文件。

在 seccomp 下运行服务

可以使服务不选择在 seccomp 下运行。对于 Marathon 定义的服务,这可以通过在容器的 unconfined=true 配置设置下定义 seccomp 对象中的 LinuxInfo 来实现。例如:

通过使用 unconfined seccomp 设置来配置服务定义,容器将不会在 seccomp 下运行。这将允许容器执行默认 seccomp 配置文件所限制的任何 syscall。

也可以在默认设置以外的其他 seccomp 配置文件下运行服务定义。这可以通过在 seccomp 定义中为服务定义指定配置文件名称来实现。例如:

  1. {
  2. "id": "/mesos-seccomp-app",
  3. "cpus": 0.5,
  4. "mem": 32,
  5. "container": {
  6. "linuxInfo": {
  7. "seccomp": {
  8. "profileName": "relaxed.json",
  9. }
  10. }
  11. }

seccomp 下运行的结果

seccomp 是一种安全机制,可通过限制容器内部允许的 syscall 来减小对系统的攻击面。当容器在 seccomp 限制下运行时,如果尝试进行受限的调用,任务进程将失败。这由调度器的恢复机制来决定接下来将发生什么。例如,Marathon 将根据任务的失败重新调度任务,Metronome 将作业的运行记录为“失败”,但根据作业重试配置的设置,可能会或不会重新调度作业的运行。