docker容器的安全加固

比眉伴天荒 2022-01-10 01:21 641阅读 0赞

社区中常用的做法是利用lxcfs来提供容器中的资源可见性。lxcfs是一个开源的FUSE(用户态文件系统)实现来支持LXC容器。

LXCFS通过用户态文件系统,在容器中提供下列 procfs 的文件:

  1. /proc/cpuinfo
  2. /proc/diskstats
  3. /proc/meminfo
  4. /proc/stat
  5. /proc/swaps
  6. /proc/uptime

比如,把宿主机的 /var/lib/lxcfs/proc/memoinfo 文件挂载到Docker容器的/proc/meminfo位置后。容器中进程读取相应文件内容时,LXCFS的FUSE实现会从容器对应的Cgroup中 读取正确的内存限制。从而使得应用获得正确的资源约束设定
一、利用LXCFS增强docker容器隔离性和资源可见性

问题:我们在不做这个的时后,默认建立的容器查看到的内存相关信息是主机的,这是不合理的。我们前面已经学过资源控制了,已经控制了资源,查看到的又不符合,这是不对的。
在这里插入图片描述
1、下载LXCFS软件

  1. [root@docker1 ~]# yum install -y lxcfs-2.0.5-3.el7.centos.x86_64.rpm

安装完lxcfs之后,会在/var/lib目录下生成lxcfs目录。只是/var/lib/lxcfs目录中没有内容。

2、启动lxcfs

  1. [root@docker1 ~]# cd /var/lib/lxcfs/
  2. [root@docker1 lxcfs]# ls
  3. #按回车结束,千万不要用Crtl+c,因为Ctrl+c会将该进程杀死。
  4. [root@docker1 lxcfs]# lxcfs /var/lib/lxcfs/ &
  5. ================================================
  6. [root@docker1 lxcfs]# ls
  7. #启动lxcfs之后,会在/var/lib/lxcfs目录下生成cgroup目录和proc目录
  8. [root@docker1 lxcfs]# cd /var/lib/lxcfs/
  9. [root@docker1 lxcfs]# ls

在这里插入图片描述
使用”ps ax”命令,查看lxcfs的进程

  1. [root@docker1 lxcfs]# ps ax

在这里插入图片描述
3、在docker中测试

  1. [root@docker1 lxcfs]# docker run -it --name vm5 -m 200m \
  2. > -v /var/lib/lxcfs/proc/cpuinfo:/proc/cpuinfo \
  3. > -v /var/lib/lxcfs/proc/diskstats:/proc/diskstats:rw \
  4. > -v /var/lib/lxcfs/proc/meminfo:/proc/meminfo:rw \
  5. > -v /var/lib/lxcfs/proc/stat:/proc/stat:rw \
  6. > -v /var/lib/lxcfs/proc/swaps:/proc/swaps:rw \
  7. > -v /var/lib/lxcfs/proc/uptime:/proc/uptime:rw \
  8. > ubuntu
  9. root@01bea1ed2d02:/# free -m
  10. total used free shared buffers cached
  11. Mem: 200 1 198 77 0 0
  12. -/+ buffers/cache: 0 199
  13. Swap: 200 0 200
  14. #我们可以看到总内存为200m,表示配置成功

在这里插入图片描述
注意:
不能直接把/var/lib/lxcfs/proc目录挂载到容器内的/proc目录下,因为容器内的/proc目录下本身是有内容的,是系统的进程信息等等,如果直接把/var/lib/lxcfs/proc目录挂载到容器内的/proc目录下,会覆盖容器内/proc目录下的内容,而/proc目录下记录的是容器的进程信息等等内容,是不能被覆盖的,所以不能直接把/var/lib/lxcfs/proc目录挂载到容器内的/proc目录下。

二、设置特权级运行的容器:–privileged=true

有的时候我们需要容器具备更多的权限,比如操作内核模块,控制swap交换分区,挂载USB磁盘,修改MAC地址等。
我们建立容器后,进入容器的root帐号的权限是受限制的,不是真正的root用户。

  1. [root@docker1 lxcfs]# docker run -it --name vm1
  2. ubunturoot@a983b94ba067:/# ip a

在这里插入图片描述
加入–privileged=true参数,获得的是具有管理员权限的root用户。

  1. [root@docker1 lxcfs]# docker run -it --name vm2 --privileged=true ubuntu
  2. root@245ff0ab4c3f:/# ip a
  3. ===========================
  4. root@245ff0ab4c3f:/# ip link set down eth0
  5. root@245ff0ab4c3f:/# ip a

在这里插入图片描述
2、设置容器白名单:–cap-add

–privileged=true 的权限非常大,接近于宿主机的权限,为了防止用户的滥用,需要增加限制,只提供给容器必须的权限。此时Docker 提供了权限白名单的机制,使用–cap-add添加必要的权限。
在这里插入图片描述

发表评论

表情:
评论列表 (有 0 条评论,641人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Linux安全加固手册

    1      身份鉴别 1.1         密码安全策略 操作系统和数据库系统管理用户身份鉴别信息应具有不易被冒用的特点,口令应有复杂度要求并定期更换。 设置

    相关 IIS7安全加固

    限制目录执行权限 在“处理程序映射”中,把“编辑功能权限”中的“脚本”去掉,这样即使上传了木马文件在此目录,也是无法执行的。 删除不必要的脚本映射 在“处理程序映射”

    相关 docker容器安全加固

    社区中常用的做法是利用lxcfs来提供容器中的资源可见性。lxcfs是一个开源的FUSE(用户态文件系统)实现来支持LXC容器。 LXCFS通过用户态文件系统,在容器中提供下