容器通过 Linux Namespace 技术,对网络、PID、用户等等信息的隔离。
但是这种隔离并非物理隔离,只是一种逻辑上的隔离,如果你是root用户,Host上可以看到一切信息。
以PID Namespace来说,容器内进程的PID从1开始,但其在Host上的PID不仅可以看见,而且是另外一个值。
以用户 Namespace来说,容器内的用户UID和用户组GID,是可以和Host上的现有用户、用户组冲突的,比如容器内有个用户foo UID=1000,Host上有个用户 bar UID=1000,完全没有任何问题。
同时容器fs在Host的 /proc/<host pid>/root
目录下(参考这个),如果以 bar 用户 操作这个目录下需要foo 用户的文件/目录也是完全没有任何问题的,因为 bar的foo的UID相同。
下面是一些脚本
得到容器在Host上的PID:
|
|
探测容器用户、UID、用户组、GID:
|
|
检查当前系统有没有用户、用户组:
|
|
nsenter,进入某个PID的Namesapce,然后执行某些命令:
|
|
runuser,以某用户某group身份执行某些命令:
|
|
pgrep,列出同属某进程Namespace的所有其他进程:
|
|
lsns,显示每个容器的根namesapce,但实际用下来没有搞明白(可以参考这个和这个),没有nsenter好用:
|
|
评论