我正在使用带有lxc-container-default-with-nesting配置文件的嵌套LXC,如下所示。
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/**,
为什么允许容器挂载/proc 是安全的?
为什么容器需要在/var/cache/lxc 下挂载/proc?
容器配置
该配置文件允许您创建一个嵌套的LXC容器,一个在另一个容器中。默认情况下,此功能处于禁用状态,因为它绕过了一些默认的 cgroup 限制(更多信息在这里(。
通常,它会更改 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
用户可以执行的操作(它实际上将其映射到容器外部的非 root 用户(。这为/proc
提供了额外的保护层,以防万一有什么东西滑倒了盔甲规则。
至于为什么使用/var/cache/lxc
,我不知道。一个猜测是,这与不与cgmanager
冲突有关。如果您对推理感兴趣,查看源代码可能是一个很好的起点。