非特权容器有哪些优点和缺点?

非特权容器有哪些优点和缺点?

技术解释什么是非特权容器相当不错。然而,它并不适合普通PC用户。人们何时以及为什么应该使用非特权容器,是否有一个简单的答案,它们的优点和缺点是什么?

答案1

运行非特权容器是在生产环境中运行容器的最安全方法。在安全性方面,容器的宣传效果不佳,原因之一是一些用户发现,如果用户在容器中获得 root 权限,那么也有可能在主机上获得 root 权限。基本上,非特权容器所做的就是从主机中屏蔽用户 ID。对于非特权容器,非 root 用户可以创建容器,并且会以 root 身份出现在容器中,但会在主机上显示为 userid 10000(无论您将 userid 映射为什么)。我最近写了一篇关于此的博客文章斯蒂芬·格雷伯的博客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。

总结一下: 好处 - 增加安全性并增加安全隔离。缺点 - 一开始有点令人困惑,不适合新手用户。

答案2

它们是非常有价值的测试、沙箱和封装工具。想要网络服务器被安全地锁定在自己的工作环境中,无法访问敏感的私人文件吗?使用容器。您的应用程序需要旧版本的库和特定的配置文件,与其他应用程序不兼容?也是一个容器。基本上 chroot 就完成了。它允许您将服务维护得足够独立,因此维护每个服务都变得更加容易,并且可以将它们移动或复制到另一台计算机,而不必干扰现有系统。

缺点是您需要记住名称空间,因为几乎所有内容都是容器本地的。你必须知道自己在哪里,容器之间的通信并不是微不足道的。当您需要模块化,但不想要虚拟机的开销,并且您保存在容器中的东西实际上没有太大关系时,这是一个好主意。

对于“普通”用户,您可以使用容器为两个人使用一台机器,同时让他们就像在完全不同的机器上一样。以室友为例。

答案3

好吧,使用共享内核,尽管它增加了对手以某些方式挣脱束缚的要求(或者更确切地说;它有助于限制攻击面),但非特权容器仍然没有完全与获得主机根的直接黑客隔离,尽管如此。

因此,这是一个有点错误的假设/主张。话虽如此,互联网上许多用户的技术能力水平仍然会运行 inet 服务,但他们在技术上并不真正能够以多种方式运行,所以嘿。 :)

相关内容