面对提醒Docker Engine 应该在 AppArmor 或 SELinux 中运行,如何在 Ubuntu 14.04 上的 AppArmor 下运行 Docker?
这Docker 安全文档和LXC 文档提到 Ubuntu 附带了用于 LXC 的 AppArmor 模板。要怎么做才能利用它?
假设有一个默认的 Ubuntu Server 14.04 主机,并且安装了 Docker curl -s https://get.docker.io/ubuntu/ | sudo sh
,那么接下来要做什么才能在运行容器时,Docker 引擎本身包含在 AppArmor 之下?
答案1
嗯,这是使用 Ubuntu 存储库之外的软件包时出现的问题。您需要让 Docker Engine 开发人员为您编写 apparmor 配置文件,或者自己编写。selinux 配置文件也一样。
现在您将开始获得选项,是否应该使用 LXC、apparmor、selinux 等。
例如,Docker 开发人员认为您需要更新 -http://blog.docker.com/这无疑是处理局势的一种方法。
Apparmor 和 selinux 可以(潜在地)保护您免受零日漏洞的攻击,但漏洞可以通过更新来修复。
apparmor 的优点是比较容易学习,缺点是你必须自己编写配置文件。
请参阅 apparmor 文档
https://help.ubuntu.com/community/AppArmor#Profile_customization
https://wiki.ubuntu.com/AppArmor
或者,对于一个实际的例子,使用一个相当简单的程序,参见http://blog.bodhizazen.com/linux/apparmor-privoxy-profile/
只要我们有意见……
与 Ubuntu 相比,RHEL 和 Fedora 在虚拟化方面略胜一筹。RHEL 正在与 Docker 合作提供支持,包括 selinux
http://www.redhat.com/about/news/press-archive/2014/4/red-hat-docker-expand-collaboration
我不太清楚 Fedora 和 Docker 的情况,但 Fedora 使用 selinux 和 virtmanager 来管理 LXC -http://major.io/2014/04/21/launch-secure-lxc-containers-on-fedora-20-using-selinux-and-svirt/
最终,您必须审查这些意见并选择最适合您的解决方案。
答案2
docker-engine 的当前版本是 1.10.2-cs1,以下是 Docker 提供的用于运行容器的默认 AppArmor 配置文件https://docs.docker.com/engine/security/apparmor/
#include <tunables/global>
profile docker-default flags=(attach_disconnected,mediate_deleted) {
#include <abstractions/base>
network,
capability,
file,
umount,
deny @{PROC}/{*,**^[0-9*],sys/kernel/shm*} wkx,
deny @{PROC}/sysrq-trigger rwklx,
deny @{PROC}/mem rwklx,
deny @{PROC}/kmem rwklx,
deny @{PROC}/kcore rwklx,
deny mount,
deny /sys/[^f]*/** wklx,
deny /sys/f[^s]*/** wklx,
deny /sys/fs/[^c]*/** wklx,
deny /sys/fs/c[^g]*/** wklx,
deny /sys/fs/cg[^r]*/** wklx,
deny /sys/firmware/efi/efivars/** rwklx,
deny /sys/kernel/security/** rwklx,
}
要将新的配置文件加载到 AppArmor 中:
$ apparmor_parser -r -W /path/to/your_profile
运行容器时,它会使用 docker-default 策略,除非您使用 security-opt 选项覆盖它。例如,以下内容明确指定了不同的 docker 策略:
$ docker run --rm -it --security-opt apparmor:docker-different hello-world