Docker守护进程安全配置项目详解

2020-06-17 07:23:10易采站长站整理

"nofile": {
"Name": "nofile",
"Hard": 64000,
"Soft": 64000
}
}
}

2.7 设置 cgroup

–cgroup-parent 选项允许设置用于容器的默认cgroup父级。 如果未设置此选项,则对于fs cgroup驱动程序,默认为 /docker ;对于systemd cgroup驱动程序,默认为 system.slice 。

如果cgroup有一个正斜杠( / ),则cgroup在根cgroup下创建,否则cgroup在守护程序cgroup下创建。

假设守护程序在cgroup daemoncgroup中运行,则 –cgroup-parent=/foobar 在 /sys/fs/cgroup/memory/foobar 中创建一个cgroup,而使用 –cgroup-parent=foobar 则创建 

/sys/fs/cgroup/memory/daemoncgroup/foobar 
中创建 cgroup。

systemd cgroup驱动程序对–cgroup-parent具有不同的规则。 Systemd按切片表示层次结构,切片的名称对树中的位置进行编码。 因此,systemd cgroup的 –cgroup-parent 应为切片名称。 名称可以包含一系列用短划线分隔的名称,这些名称描述了从根切片到切片的路径。 例如, –cgroup-parent=user-a-b.slice 表示容器的内存cgroup在

 /sys/fs/cgroup/memory/user.slice/user-a.slice/user-a-b.slice/docker-<id>.scope 
中创建。

也可以使用容器运行来设置,使用docker create和docker run上的 –cgroup-parent 选项,会优先于守护程序上的 –cgroup-parent 选项。

2.8 配置 seccomp

使用的测试配置文件,禁止在 Docker 里使用 chmod 命令


https://github.com/docker/labs/blob/master/security/seccomp/seccomp-profiles/default-no-chmod.json
[root@localhost docker]# docker run --rm -it alpine sh
/ # ls bin etc lib mnt proc run srv tmp var
dev home media opt root sbin sys usr / # touch foo.sh
/ # chmod +x foo.sh
chmod: foo.sh: Operation not permitted
/ # exit

实际可以完成禁止、允许、告警某些系统相关的调用,参考: https://github.com/torvalds/linux/blob/master/arch/x86/entry/syscalls/syscall_64.tbl

2.9 配置支持无守护程序的容器

–live-restore 确保 docker 守护进程关闭时不影响容器。

测试时再关闭 docker 守护进程后,nginx 容器仍能正常提供访问。

 

2.10 禁用 docker 的实验性功能

设置 “experimental”: false

2.11 限制容器通过 suid 或 sgid 提权

no-new-privileges 安全选项可防止容器内的应用程序进程在执行期间获得新的特权。

举例:有一个在映像中设置了 setuid/setgid 位的程序,例如sudo,容器中的进程也具有执行该程序的(文件)权限,试图通过诸如setuid/setgid之类的设施获取特权的任何操作将被拒绝。