lxc容器的安全边界在哪里?


8

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

如果我在自己的盒子上运行多个容器,并给用户单独的ssh访问其拥有的容器的权限,那么这些容器中的任何一个都可以侵入该盒子上的其他容器甚至主机吗?

lxc容器的安全边界在哪里?


您知道需要为此担心,AppArmor会解决这个问题。
rɑːdʒɑ

Answers:


8

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

因此,通常只有允许root用户访问root文件系统,除非在创建它们时使用不当或配置用户配置文件有误。

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

LXC随附了一个Apparmor配置文件,旨在防止主机意外误用容器内部的特权。例如,容器将无法写入/proc/sysrq-trigger或写入大多数/sys文件。

通过运行lxc-start输入usr.bin.lxc-start配置文件。该配置文件主要防止lxc-start在容器的根文件系统之外挂载新文件系统。在执行容器的初始化之前,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使用这个new容器lxc-CN-profile,请在其配置文件中添加以下行:

lxc.aa_profile = lxc-CN-profile

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


非常感谢您的回答。那么,您是说如果我使用AppArmor就是安全的吗?
iCode

@iCode是的,如果您使用AppArmor,旨在保护Ubuntu应用程序和LXC的appArmor也将在安全性方面获得强大的支持。
rɑːdʒɑ

AppArmor并不是全部,例如,我发现dmesg可以从任何容器(至少在默认配置中)调用它。恐怕不是唯一的安全隐患...
Daniel Alder
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.