Docker / LXC中的AppArmor配置文件


11

我有一个运行MySQL的Docker容器(LXC)。由于Docker的思想通常是“每个容器运行一个进程”,因此,如果我定义针对MySQL二进制文件的AppArmor配置文件,是否将其实施?我有办法测试吗?


为什么要在容器内使用apparmor?
c4f4t0r 2014年

3
如果对数据库运行零日攻击或其他攻击,以防止其访问其他任何东西。我信任Linux cgroups,但不是。为了安全起见,总比对不起好。我宁愿将MySQL锁定,也不愿让MySQL零时差找到摆脱cgroup的方法。
Naftuli Kay 2014年

Answers:


8

首先,cgroup不用于将应用程序与系统上的其他应用程序隔离。它们用于管理资源使用和设备访问。提供各种(有限的)隔离的是各种名称空间(PID,UTS,安装,用户...)。

而且,在Docker容器内启动的进程可能无法管理在其下运行的AppArmor配置文件。当前采用的方法是在启动容器之前设置特定的AppArmor配置文件。

看起来Docker中的libcontainer执行驱动程序支持为容器设置AppArmor配置文件,但是我在文档中找不到任何示例或参考。

显然,Ubuntu中的LXC也支持AppArmor 。

您应该为您的应用程序编写一个AppArmor配置文件,并确保在启动容器内的进程之前先加载LXC / libcontainer / Docker /...。

应该强制使用这种方式使用的配置文件,并且要对其进行测试,您应该尝试进行非法访问并确保失败。

在这种情况下,二进制文件和实际执行的配置文件之间没有链接。您必须明确告诉Docker / LXC将这个配置文件用于您的容器。为MySQL二进制文件编写配置文件只会在主机上实施,而不能在容器中实施。


到目前为止,这是我(有限)的经验。我在从Docker容器中生成配置文件时遇到了问题,但是如果配置文件是在容器外部生成的,然后复制到其中,则它应该可以正常工作,前提是您必须在运行可执行文件之前在容器中启动AppArmor。
Naftuli Kay 2014年

@Siosm:LCX!= libcontainer。问题是关于LXC驱动程序。
0xC0000022L 2014年

@ 0xC0000022L:AppArmor配置文件实施模型对于用于将容器中的进程限制为任何工具都是相同的。
Siosm

3

答案很可能是:不。

Ubuntu服务器指南话题LXC讨论了相当多的问题询问,并提出以下声明:

不能进一步限制容器中的程序-例如,MySQL在容器配置文件下运行(保护主机),但是无法进入MySQL配置文件(保护容器)。

避免利用漏洞产生不良影响的更好选择是限制用户运行容器,并使用利用内核的功能的用户空间LXC容器。但是,据docker我所知,当前不支持userns

在这种情况下,从主机角度来看,MySQL将以非特权用户身份运行,而在容器内部,MySQL则可以以身份运行root。然后,您可以根据iptables需要将MySQL绑定到主机的外部端口。

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.