Docker安全设置

Docker安全

Linux内核的命名空间机制提供的容器隔离安全。
Linux控制组机制对容器资源的控制能力安全。
Linux内核的能力机制所带来的操作权限安全
Docker程序(特别是服务端)本身的抗攻击性。
其他安全增强机制对容器安全性的影响。

docker与系统共享内核,在宿主机上产生相应的进程 (Pid参数)
Linux Cgroups 限制一个进程组能够使用的资源上限,包括 CPU、内存、磁盘、网络带宽等等。
Linux Cgroups 给用户暴露出来的操作接口是文件系统。
它以文件和目录的方式组织在操作系统的 /sys/fs/cgroup 路径下。

Docker进行CPU限额
cpu_period 和 cpu_quota 这两个参数需要组合使用,用来限制进程在长度为 cpu_period 的一段时间内,只能被分配到总量为 cpu_quota 的CPU 时间,以上设置表示20%的cpu时间。

--cpu-period=100000 设定CPU时间的大小
--cpu-quota=20000   以上CPU时间内,本进程占用的CPU时间(20000/100000)
/sys/fs/cgroup/cpu/cpu.cfs_period_us
/sys/fs/cgroup/cpu/cpu.cfs_quota_us
/sys/fs/cgroup/cpu/tasks:记录本目录下的限制的进程PID

创建新的测试目录(自动复制上层目录限制文件)
在这里插入图片描述
设置CPU限制(总时间为20000)

echo "20000" > cpu.cfs_quota_us

创建容器,将pid放入tasks中

docker run -it --name vm1 --cpu-quota 20000 ubuntu
在容器中执行以下测试命令
dd if=/dev/zero of=/dev/null &

在这里插入图片描述
ctrl+pq后台运行
添加Pid至tasks文件

echo "1566" > tasks

查看结果
在这里插入图片描述
删除测试目录

cgdelete cpu:test

Docker进行memory(内存)限额
memory+swap

yum  install  -y 	libcgroup-tools.x86_64 

参数

指定内存		--memory 200M 
指定swap分区	--memory-swap=200M
内存 	/sys/fs/cgroup/memory/test/memory.limit_in_bytes	设置内存限制
swap 	/sys/fs/cgroup/memory/test/memory.memsw.limit_in_bytes  设置SWAP限制

查看参数内存信息
在这里插入图片描述
进入目录/sys/fs/cgroup/memory/,限制内存最大使用为300M

echo "314572800" > memory.limit_in_bytes 

测试

cgexec -g memory:test dd if=/dev/zero of=test bs=1M count=400   

发现swap被使用了100M
在这里插入图片描述
限制可用SWAP也为300M,再次创建,失败
在这里插入图片描述
设置对应的docker容器下的memory的内存相应的操作权限 (cgred服务)
新建用户student
设置其限制参数

systemctl start cgred.service 

编辑 /etc/cgrules.conf

student memory test/

在这里插入图片描述
重新启动服务

systemctl restart cgred.service 

切换至用户student
进入/dev/shm目录,开始写入
测试

dd if=/dev/zero of=/dev/shm/test bs=1M count=298M成功
大于298M全部失败,内存被限制在了300M左右

限制读写速度(/sys/fs/cgroup/blkio/)

--device-read-bps list            以byte为单位限制读速度
--device-read-iops list           以IO效率为单位限制读速度
--device-write-bps list           以byte为单位限制写速度
--device-write-iops list          以IO效率为单位限制读速度

设置限制

docker run  -it --name vm3 --device-write-bps /dev/sda:10M ubuntu

测试

dd if=/dev/zero of=file bs=1M count=30 oflag=direct

在这里插入图片描述
利用文件冻结和启动文件
在这里插入图片描述
文件
在这里插入图片描述
利用LXCFS增强docker容器隔离性和资源可见性
原因:在运行容器时指定了容器的相应的内存大小及其相应的swap分区大小,但是在容器内查看时发现其使用率相应大小还是与宿主机相同,因此容器的隔离性不好

安装lxcfs,并指定目录

yum install lxcfs-2.0.5-3.el7.centos.x86_64.rpm -y
lxcfs /var/lib/lxcfs/ &

查看生成的文件

ll /var/lib/lxcfs/

在这里插入图片描述
指定参数生成容器

docker run -it -m 300m \
-v /var/lib/lxcfs/proc/cpuinfo:/proc/cpuinfo:rw \
-v /var/lib/lxcfs/proc/diskstats:/proc/diskstats:rw \
-v /var/lib/lxcfs/proc/meminfo:/proc/meminfo:rw \
-v /var/lib/lxcfs/proc/stat:/proc/stat:rw \
-v /var/lib/lxcfs/proc/swaps:/proc/swaps:rw \
-v /var/lib/lxcfs/proc/uptime:/proc/uptime:rw \
--name ubuntu \
ubuntu 

此时参数被严格限制
在这里插入图片描述
设置特权级运行的容器:–privileged=true
有的时候我们需要容器具备更多的权限,比如操作内核模块,控制swap交换分区,挂载USB磁盘,修改MAC地址等。

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

安全加固:
镜像:
安全的基础镜像
删除镜像中的SUID,SGID权限
启用Dokcer的内容信任
最小安装原则
使用Clair进行镜像安全扫描
使用非root用户运行容器

容器:
Docker主机进行安全加固
限制容器之间网络流量
配置Docker守护程序的TLS身份
启用用户命名空间的支持(userns-remap)
限制容器的内存使用量
适当设置CPU的优先级

Dokcer工具:
Docker Bench for Security
Clair
Cilium
Anchore

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值