lxc 容器安全边界在哪里?

iCo*_*ode 8 lxc

我的问题是关于 LXC 容器的安全性。

如果我在我的机器上运行多个容器,并为用户提供对他们拥有的容器的单独 ssh 访问权限,那么这些容器中的任何一个是否可以入侵该机器上的其他容器甚至主机?

lxc 容器安全边界在哪里?

rɑː*_*dʒɑ 9

正如我所看到的关于LXC它在 /var/lib/lxc 下存储容器信息和(使用默认后备存储)根文件系统。容器创建模板也倾向于将缓存的分发信息存储在 /var/cache/lxc 下。

因此,除非在创建用户配置文件时存在误用或配置错误,否则通常只允许管理员访问根文件系统。

但是 Ubuntu 开发人员可能已经到了这一点,他们在 AppArmor 的帮助下提供了一个安全的解决方案。

LXC 附带一个 Apparmor 配置文件,旨在保护主机免受容器内特权的意外滥用。例如,容器将无法写入/proc/sysrq-trigger或写入大多数/sys文件。

通过运行 lxc-start 进入 usr.bin.lxc-start 配置文件。此配置文件主要防止 lxc-start 在容器的根文件系统之外挂载新文件系统。在执行容器的 init 之前,LXC 请求切换到容器的配置文件。默认情况下,此配置文件是在 中定义的 lxc-container-default 策略/etc/apparmor.d/lxc/lxc-default。此配置文件可防止容器访问许多危险路径,以及安装大多数文件系统。

如果您发现 lxc-start 由于其 Apparmor 策略拒绝合法访问而失败,您可以通过执行以下操作禁用 lxc-start 配置文件:

sudo apparmor_parser -R /etc/apparmor.d/usr.bin.lxc-start
sudo ln -s /etc/apparmor.d/usr.bin.lxc-start /etc/apparmor.d/disabled/
Run Code Online (Sandbox Code Playgroud)

这将使 lxc-start 运行不受限制,但继续限制容器本身。如果您还希望禁用容器的限制,那么除了禁用usr.bin.lxc-start配置文件之外,您还必须添加:

lxc.aa_profile = unconfined
Run Code Online (Sandbox Code Playgroud)

到容器的配置文件。如果您希望在自定义配置文件中运行容器,您可以在/etc/apparmor.d/lxc/. 它的名称必须以 lxc- 开头,以便允许 lxc-start 转换到该配置文件。创建策略后,使用以下命令加载它:

sudo apparmor_parser -r /etc/apparmor.d/lxc-containers
Run Code Online (Sandbox Code Playgroud)

该配置文件将在重新启动后自动加载,因为它来自文件/etc/apparmor.d/lxc-containers. 最后,要使容器 CN 使用这个 new lxc-CN-profile,请将以下行添加到其配置文件中:

lxc.aa_profile = lxc-CN-profile
Run Code Online (Sandbox Code Playgroud)

lxc-execute 不会进入 Apparmor 配置文件,但它生成的容器将被限制。