docker安全加固(lxcfs增强docker容器的隔离性、设置特权级运行的容器、设置容器白名单、安全加固思路 )

1.通过lxcfs增强docker容器的隔离性和资源可见性

docker run -it --name vm1 -m 256M ubuntu 创建一个容器并指定可用内存为256M

root@e53bceea7a86:/# free -m  ##发现看到的并不是256M

在这里插入图片描述


yum install -y lxcfs-2.0.5-3.el7.centos.x86_64.rpm 安装lxcfs
lxcfs /var/lib/lxcfs &运行,/var/lib/lxcfs是lxcfs默认数据目录
cd /var/lib/lxcfs
lscgroup是资源限制,proc是系统信息
cd proc
ls

docker run -it --name vm2 -m 256M \ ##创建容器,把相应的内容挂载到容器内
 >-v /var/lib/lxcfs/proc/cpuinfo:/proc/cpuinfo \ 
 >-v /var/lib/lxcfs/proc/diskstats:/proc/diskstats \ 
 >-v /var/lib/lxcfs/proc/meminfo:/proc/meminfo \ 
 >-v /var/lib/lxcfs/proc/stat:/proc/stat \ 
 >-v /var/lib/lxcfs/proc/swaps:/proc/swaps \ 
 >-v /var/lib/lxcfs/proc/uptime:/proc/uptime \
 >ubuntu

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


2.设置特权级运行的容器 --privileged=true

在这里插入图片描述
有时候我们需要容器具备更多权限,比如操作内核模块,控制swap分区,修改MAC地址等。
docker run --help | grep priv#查看权限参数 --privileged,默认这个权限是被禁掉的
docker run -it --name vm3 --privileged=true ubuntu成功添加

root@3e9320090d5f:/# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
10: eth0@if11: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
    link/ether 02:42:ac:11:00:04 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.4/16 brd 172.17.255.255 scope global eth0
       valid_lft forever preferred_lft forever
root@3e9320090d5f:/# ip addr add 172.17.0.5/24 dev eth0
root@3e9320090d5f:/# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
10: eth0@if11: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
    link/ether 02:42:ac:11:00:04 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.4/16 brd 172.17.255.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet 172.17.0.5/24 scope global eth0

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
默认情况下这个权限比较大,基本上接近宿主机的权限,为了防止用户的权限滥用,需要增加安全机制,只提供给容器必要的权限


3.设置容器白名单:–cap-add

capability权限查询可参考link

docker run -it --name vm4 --cap-add=NET_ADMIN ubuntu可以控制网络,但其他不行

root@4c24e856a67e:/# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
12: eth0@if13: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
    link/ether 02:42:ac:11:00:05 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.5/16 brd 172.17.255.255 scope global eth0
       valid_lft forever preferred_lft forever
root@4c24e856a67e:/# ip addr add 172.17.0.6/24 dev eth0
root@4c24e856a67e:/# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
12: eth0@if13: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
    link/ether 02:42:ac:11:00:05 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.5/16 brd 172.17.255.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet 172.17.0.6/24 scope global eth0

docker inspect vm4 | grep Pri 特权关闭 “Privileged”:false,
docker inspect vm4 | grep Cap看不全
docker inspect vm4 | less
docker inspect -f {{.HostConfig.Privileged}} vm4 查看指定字段的值,为false
docker inspect -f {{.HostConfig.CapAdd}} vm4

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


4.安全加固思路

4.1 保证镜像安全

使用安全的基础镜像;
删除镜像中的setuid和setgid权限(suid、sgid);
启用docker内容信任(证书认证);
最小安装原则;
对镜像进行安全漏洞扫描,镜像安全扫描 器(Clair);
容器使用非root运行

4.2 保证容器安全

对docker主机进行安全加固;
限制容器之间的网络流量(某个容器流量升高, 会对其他容器或主机有影响);
配置docker守护程序的TLS身份验证;
启用用户命名空间支持(userns-remap参数,在容器第一次启动前就要加上,写在/etc/docker/daemon.json文 件里,还需要对docker数据目录做权限配置 /var/lib/docker);
限制容器内存使用量;
适当设置容器CPU优先级,/sys/fs/cgroup/cpu/cpu.shares这个文件里设置

4.3 docker安全遗留问题

默认情况下只有6个namespace命名空间,很多主要的内核子系统是没有命名空间的,如SELinux, Cgroup,/sys下的文件系统,/proc/sys,/proc/sysrq-trigger等
在这里插入图片描述


docker inspect vm4 | grep Pid
cd /proc/Pid/ns
ls

在这里插入图片描述


设备没有命名空间:/dev/mem(进程和物理地址的映射),/dev/sd*文件系统设备,内核模块等

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值