lxc-container-default-with-nesting AppArmor 配置文件有什么作用?

What does lxc-container-default-with-nesting AppArmor profile do?

我正在使用嵌套的 LXC 和 lxc-container-default-with-nesting 配置文件,如下所示。

profile lxc-container-default-with-nesting flags=(attach_disconnected,mediate_deleted) {
  #include <abstractions/lxc/container-base>
  #include <abstractions/lxc/start-container>

#  Uncomment the line below if you are not using cgmanager
#  mount fstype=cgroup -> /sys/fs/cgroup/**,

  deny /dev/.lxc/proc/** rw,
  deny /dev/.lxc/sys/** rw,
  mount fstype=proc -> /var/cache/lxc/**,
  mount fstype=sysfs -> /var/cache/lxc/**,
  mount options=(rw,bind),
}

关于下一行我有两个问题。

  mount fstype=proc -> /var/cache/lxc/**,
  1. 为什么允许容器挂载 /proc 是安全的?

  2. 为什么容器需要在/var/cache/lxc下挂载/proc?

嵌套容器配置

该配置文件允许您创建嵌套 LXC 容器,一个在另一个里面。默认情况下,这是禁用的,因为它绕过了一些默认的 cgroup 限制 (more info here)。

一般来说,它改变了apparmor规则,让lxc重新挂载容器内的某些系统资源(有一定的限制)。

lxc.container.conf

如果您查看 man lxc.container.conf,本节将介绍您可以编辑的有关 proc 装载方式的设置。我认为它默认使用proc:mixed(但我还没有证实这一点!)

  lxc.mount.auto
          specify which standard kernel file systems should be
          automatically mounted. This may dramatically simplify
          the configuration. The file systems are:

          · proc:mixed (or proc):
            mount /proc as read-write, but
            remount /proc/sys and
            /proc/sysrq-trigger read-only
            for security / container isolation purposes.

          · proc:rw: mount
            /proc as read-write

非特权 LXC

顺便说一句,如果您没有使用非特权 LXC,您应该这样做。 认真的。它增加了一个额外的保护层,限制容器中的 root 用户可以做什么(它实际上将其映射到容器外的非根用户)。这为 /proc 提供了额外的保护层,以防出现不符合服装规则的情况。

至于为什么使用/var/cache/lxc,我不知道。猜测是它与不与 cgmanager 冲突有关。如果您对推理感兴趣,那么查看源代码可能是一个不错的起点。