非特权容器的好处和缺点是什么?


Answers:


14

运行非特权容器是在生产环境中运行容器的最安全方法。容器在安全性方面的宣传很差,原因之一是因为一些用户发现,如果用户在容器中成为root用户,那么也有可能在主机上获得root用户。基本上,无特权的容器所做的是从主机屏蔽用户ID。使用非特权容器,非root用户可以创建容器,并且将以root身份出现在容器中,但在主机上将以userid 10000的形式出现(无论您将userid映射为什么)。我最近基于Stephane Graber在LXC 上的博客系列撰写了一篇有关此主题的博客文章(LXC的杰出思想/主要开发者之一,并且肯定会有人关注)。我再说一遍,非常出色。

从我的博客:

从容器中:

lxc-attach -n ubuntu-unprived
root@ubuntu-unprived:/# ps -ef
UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0 04:48 ?        00:00:00 /sbin/init
root       157     1  0 04:48 ?        00:00:00 upstart-udev-bridge --daemon
root       189     1  0 04:48 ?        00:00:00 /lib/systemd/systemd-udevd --daemon
root       244     1  0 04:48 ?        00:00:00 dhclient -1 -v -pf /run/dhclient.eth0.pid
syslog     290     1  0 04:48 ?        00:00:00 rsyslogd
root       343     1  0 04:48 tty4     00:00:00 /sbin/getty -8 38400 tty4
root       345     1  0 04:48 tty2     00:00:00 /sbin/getty -8 38400 tty2
root       346     1  0 04:48 tty3     00:00:00 /sbin/getty -8 38400 tty3
root       359     1  0 04:48 ?        00:00:00 cron
root       386     1  0 04:48 console  00:00:00 /sbin/getty -8 38400 console
root       389     1  0 04:48 tty1     00:00:00 /sbin/getty -8 38400 tty1
root       408     1  0 04:48 ?        00:00:00 upstart-socket-bridge --daemon
root       409     1  0 04:48 ?        00:00:00 upstart-file-bridge --daemon
root       431     0  0 05:06 ?        00:00:00 /bin/bash
root       434   431  0 05:06 ?        00:00:00 ps -ef

从主持人:

lxc-info -Ssip --name ubuntu-unprived
State:          RUNNING
PID:            3104
IP:             10.1.0.107
CPU use:        2.27 seconds
BlkIO use:      680.00 KiB
Memory use:     7.24 MiB
Link:           vethJ1Y7TG
TX bytes:      7.30 KiB
RX bytes:      46.21 KiB
Total bytes:   53.51 KiB

ps -ef | grep 3104
100000    3104  3067  0 Nov11 ?        00:00:00 /sbin/init
100000    3330  3104  0 Nov11 ?        00:00:00 upstart-udev-bridge --daemon
100000    3362  3104  0 Nov11 ?        00:00:00 /lib/systemd/systemd-udevd --daemon
100000    3417  3104  0 Nov11 ?        00:00:00 dhclient -1 -v -pf /run/dhclient.eth0.pid -lf /var/lib/dhcp/dhclient.eth0.leases eth0
100102    3463  3104  0 Nov11 ?        00:00:00 rsyslogd
100000    3516  3104  0 Nov11 pts/8    00:00:00 /sbin/getty -8 38400 tty4
100000    3518  3104  0 Nov11 pts/6    00:00:00 /sbin/getty -8 38400 tty2
100000    3519  3104  0 Nov11 pts/7    00:00:00 /sbin/getty -8 38400 tty3
100000    3532  3104  0 Nov11 ?        00:00:00 cron
100000    3559  3104  0 Nov11 pts/9    00:00:00 /sbin/getty -8 38400 console
100000    3562  3104  0 Nov11 pts/5    00:00:00 /sbin/getty -8 38400 tty1
100000    3581  3104  0 Nov11 ?        00:00:00 upstart-socket-bridge --daemon
100000    3582  3104  0 Nov11 ?        00:00:00 upstart-file-bridge --daemon
lxc       3780  1518  0 00:10 pts/4    00:00:00 grep --color=auto 3104

如您所见,进程在容器内部以root身份运行,但没有以root身份出现,而是从主机显示为100000。

总结一下:好处-增加了安全性,并增加了安全性隔离。缺点-刚开始时有点困惑,而不是初学者。


3
因此,如果我理解正确,容器本身并不是100%安全的。无论您运行哪个容器,都有可能野兽逃脱。只有在这种情况下,容器的类型才变得重要。对于特权容器,野兽将在根目录下疯狂运行,种植rootkit并咀嚼有价值的SSL密钥。对于非特权用户,它将仅限于创建容器的用户帐户,对吗?窃取他的SSH密钥等。这真的更安全吗?可以用四个嵌套盒的图片来解释吗?
anatoly techtonik

2
简而言之,开箱即用的容器本身并不安全,无法用于生产。像对待其他Linux环境一样对待LXC环境。您也不会让您的Linux机器完全打开吗?是的,您的容器将仅受限于用户帐户所映射到的容器。查阅Graber关于非特权角色的文章:我认为最大的问题是能够利用内核和系统调用,因为每个容器都共享同一内核。有多种方法可以通过cgroup和其他应用程序(例如selinux,apparmor和seccomp等)增强安全性。
geekbass

3
斯特凡·格拉伯(StéphaneGraber)-stgraber.org/2014/01/17/lxc-1-0-unprivileged-containers
geekbass

因此,为运行容器创建一个单独的受限用户。看起来很公平。我接受这个作为答案。谢谢。
anatoly techtonik

4

它们是用于测试,沙箱和封装的非常有价值的工具。希望将网络服务器安全地锁定在其自己的工作环境中,从而无法访问敏感的私有文件吗?使用容器。您的应用程序需要旧版本的库以及特定的配置文件,而这些版本与其他应用程序不兼容吗?也是一个容器。基本上chroot做对了。它使您可以将服务分别维护得足够分开,因此维护每个服务都非常容易,并且可以将它们移动或复制到另一台计算机上,而不必打扰现有系统。

缺点是您需要记住名称空间,因为几乎所有内容都是容器本地的。您必须了解自己所在的位置,并且容器之间的通信并非易事。当您需要模块化但又不想虚拟机的开销时,这是个好主意,而且您保存在容器中的东西实际上并没有多大关系。

对于“普通”用户,您可以使用容器将一台机器供两个人使用,同时将它们保持在完全不同的机器上。例如,室友。


3
尽管对容器的用途进行了很好的描述,但这仍然不能解释特权容器和非特权容器之间的区别。
anatoly techtonik

1

好吧,尽管有了共享内核,尽管它以某种方式增加了攻击者释放攻击的要求(或者说,它有助于限制攻击面),但是尽管如此,未获得特权的容器仍无法与获得主机根的直接黑客完全隔离开来。 。

因此,这是一个错误的假设/主张。话虽这么说,互联网上许多用户的技术能力水平仍将以许多他们在技术上并不真正有能力的方式来运行inet服务。:)

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.