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

我的问题是围绕LXC容器的安全性。

如果我在我的盒子上运行多个容器,并为用户提供对其拥有的容器的单独ssh访问权限,那么这些容器中的任何容器都可以攻击该盒子上的其他容器或甚至是主机吗?

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

正如我所看到的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/ 

这将使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配置文件,但它产生的容器将被限制。