我的问题是关于 LXC 容器的安全性。
如果我在我的机器上运行多个容器,并为用户提供对其所拥有的容器的单独 ssh 访问权限,那么这些容器中的任何一个都可以侵入该机器上的其他容器甚至主机吗?
lxc 容器的安全边界在哪里?
答案1
正如我所看到的龙芯它将容器信息和(使用默认后备存储)根文件系统存储在 /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/
这将使 lxc-start 不受限制地运行,但继续限制容器本身。如果您还希望禁用容器的限制,那么除了禁用配置文件之外usr.bin.lxc-start
,还必须添加:
lxc.aa_profile = unconfined
到容器的配置文件。如果您希望在自定义配置文件中运行容器,则可以在 下创建一个新配置文件/etc/apparmor.d/lxc/
。其名称必须以 lxc- 开头,以便 lxc-start 可以转换到该配置文件。创建策略后,使用以下命令加载它:
sudo apparmor_parser -r /etc/apparmor.d/lxc-containers
配置文件将在重启后自动加载,因为它来自文件/etc/apparmor.d/lxc-containers
。最后,为了让容器 CN 使用这个新的lxc-CN-profile
,请在其配置文件中添加以下行:
lxc.aa_profile = lxc-CN-profile
lxc-execute
不会进入 Apparmor 配置文件,但它产生的容器将受到限制。