首先,我不是安全专家,以前从未使用过 LXC。
我正在尝试尽可能地强化 Gentoo 强化服务器。为此,我考虑使用 LXC(可能与 KVM 结合使用)来隔离尽可能多的网络服务。
我读过 LXC unix 手册页,但对于如何设置 Linux 容器,我还是不太清楚。在互联网上查找更多信息,我只找到了关于在 Linux 容器内运行整个系统的文档,而这并不是我想要做的。
我想使用 LXC 来运行容器内的一个应用程序,并且只包含应用程序所需的最少文件/资源。不是想要在容器内运行整个系统,甚至避免使用busybox。
例如,我想隔离服务ntpd
,据我所知,为了能够同步系统时钟,我无法在虚拟机中运行它。但我可以在里面运行它chroot
,或者我想我可以在 Linux 容器中运行它,以获得更好的隔离和安全性。
为此,我必须:
- 确定设置 chroot jail 时 ntpd 需要哪些文件。
- 这是我不知道该做什么以及如何做的:LXC 配置、模板、将我的文件放在哪里来设置容器等等。
- 运行它
lxc-execute
这是可能的吗?构建、运行和管理此类容器的各个步骤是什么?
答案1
从历史上看,LXC 存在许多严重的安全问题,阻碍其真正实现隔离,但主线 Linux 内核中的基础设施增强已经缓解了大多数(如果不是全部)这些问题。
看这里概述在捆绑 LXC 的 Ubuntu 连续版本中观察到的安全问题/增强功能。
我发现这Oracle Unbreakable Enterprise Kernel 文档对于解释如何执行应用程序级容器特别有用。
来自文档:
应用程序容器不是使用模板脚本创建的。相反,应用程序容器会挂载主机根文件系统的全部或部分,以提供对应用程序所需的二进制文件和库的访问。您可以使用 lxc-execute 命令在容器中调用 lxc-init(/sbin/init 的精简版)。lxc-init 会挂载任何所需的目录(例如 /proc、/dev/shm 和 /dev/mqueue),执行指定的应用程序,然后等待它完成执行。当应用程序退出时,容器实例将不复存在。