我有一个运行MySQL的Docker容器(LXC)。由于Docker的思想通常是“每个容器运行一个进程”,因此,如果我定义针对MySQL二进制文件的AppArmor配置文件,是否将其实施?我有办法测试吗?
cgroups
,但不是很。为了安全起见,总比对不起好。我宁愿将MySQL锁定,也不愿让MySQL零时差找到摆脱cgroup的方法。
我有一个运行MySQL的Docker容器(LXC)。由于Docker的思想通常是“每个容器运行一个进程”,因此,如果我定义针对MySQL二进制文件的AppArmor配置文件,是否将其实施?我有办法测试吗?
cgroups
,但不是很。为了安全起见,总比对不起好。我宁愿将MySQL锁定,也不愿让MySQL零时差找到摆脱cgroup的方法。
Answers:
首先,cgroup不用于将应用程序与系统上的其他应用程序隔离。它们用于管理资源使用和设备访问。提供各种(有限的)隔离的是各种名称空间(PID,UTS,安装,用户...)。
而且,在Docker容器内启动的进程可能无法管理在其下运行的AppArmor配置文件。当前采用的方法是在启动容器之前设置特定的AppArmor配置文件。
看起来Docker中的libcontainer执行驱动程序支持为容器设置AppArmor配置文件,但是我在文档中找不到任何示例或参考。
显然,Ubuntu中的LXC也支持AppArmor 。
您应该为您的应用程序编写一个AppArmor配置文件,并确保在启动容器内的进程之前先加载LXC / libcontainer / Docker /...。
应该强制使用这种方式使用的配置文件,并且要对其进行测试,您应该尝试进行非法访问并确保失败。
在这种情况下,二进制文件和实际执行的配置文件之间没有链接。您必须明确告诉Docker / LXC将这个配置文件用于您的容器。为MySQL二进制文件编写配置文件只会在主机上实施,而不能在容器中实施。
答案很可能是:不。
在Ubuntu服务器指南话题LXC讨论了相当多的问题询问,并提出以下声明:
不能进一步限制容器中的程序-例如,MySQL在容器配置文件下运行(保护主机),但是无法进入MySQL配置文件(保护容器)。
避免利用漏洞产生不良影响的更好选择是限制用户运行容器,并使用利用内核的userns功能的用户空间LXC容器。但是,据docker
我所知,当前不支持userns
。
在这种情况下,从主机角度来看,MySQL将以非特权用户身份运行,而在容器内部,MySQL则可以以身份运行root
。然后,您可以根据iptables
需要将MySQL绑定到主机的外部端口。