docker 安全
由于容器运行在主机上,且与主机共用一套内核,因此在容器的安全使用上会涉及到容器本身以及主机的安全加固,如针对系统调用,系统资源,远程访问等都需要进行安全方面的考量。 docker官网给出了简单的一些建议,如使用命名空间进行用户隔离,使用cgroup限制容器使用的资源上限,使用apparmor限制容器对资源的访问以及使用seccomp限制容器的系统调用等。但官方文档描述的场景比较简单,更多场景可以参考Dosec整理的Docker容器安全最佳实践白皮书V1.0,也可以微信关注公众号"Dosec"查看更多容器安全相关的文章。 下面简单了解下内核安全组件seccomp和apparmor seccomp: seccomp主要用于限制容器程序可以使用的系统调用,可以使用如下方式查看当前系统是否支持seccomp # grep CONFIG_SECCOMP= /boot/config-$(uname -r)
CONFIG_SECCOMP=y
seccomp使用profile 白名单机制来配置容器程序的权限,在运行容器时会使用默认配置,当然也可以使用--security-opt选项来覆盖默认的配置。seccomp默认情况下会block大约44个系统调用。使用docker info可以看到如下信息,默认会启动seccomp且使用默认profile Security Options: seccomp Profile: default 下面为使用自定义profile文件testprofile.json替换默认profile的操作 # docker run -itd --security-opt seccomp=testprofile.json busybox:latest /bin/sh 在docker的go源码中定义了seccomp支持的平台以及action和operation,源码总对seccomp的结构体定义如下,包含默认动作,使用的平台集以及系统调用集 // LinuxSeccomp represents syscall restrictions type LinuxSeccomp struct { DefaultAction LinuxSeccompAction `json:"defaultAction"` Architectures []Arch `json:architectures,omitempty` Syscalls []LinuxSyscall `json:syscalls,1)">` } 系统调用中包含系统调用的名称,动作和参数等 LinuxSyscall is used to match a syscall in Seccomp type LinuxSyscall { Names []string `json:names` Action LinuxSeccompAction `json:action` Args []LinuxSeccompArg `json:args,1)">` } 支持如下平台架构 const ( ArchX86 Arch = SCMP_ARCH_X86 ArchX86_64 Arch = SCMP_ARCH_X86_64 ArchX32 Arch = SCMP_ARCH_X32 ArchARM Arch = SCMP_ARCH_ARM ArchAARCH64 Arch = SCMP_ARCH_AARCH64 ArchMIPS Arch = SCMP_ARCH_MIPS ArchMIPS64 Arch = SCMP_ARCH_MIPS64 ArchMIPS64N32 Arch = SCMP_ARCH_MIPS64N32 ArchMIPSEL Arch = SCMP_ARCH_MIPSEL ArchMIPSEL64 Arch = SCMP_ARCH_MIPSEL64 ArchMIPSEL64N32 Arch = SCMP_ARCH_MIPSEL64N32 ArchPPC Arch = SCMP_ARCH_PPC ArchPPC64 Arch = SCMP_ARCH_PPC64 ArchPPC64LE Arch = SCMP_ARCH_PPC64LE ArchS390 Arch = SCMP_ARCH_S390 ArchS390X Arch = SCMP_ARCH_S390X ArchPARISC Arch = SCMP_ARCH_PARISC ArchPARISC64 Arch = SCMP_ARCH_PARISC64 ) 下面的常量定义可以参见linux系统调用seccomp_rule_add Define actions for Seccomp rules ( ActKill LinuxSeccompAction = SCMP_ACT_KILL ActTrap LinuxSeccompAction = SCMP_ACT_TRAP ActErrno LinuxSeccompAction = SCMP_ACT_ERRNO ActTrace LinuxSeccompAction = SCMP_ACT_TRACE ActAllow LinuxSeccompAction = SCMP_ACT_ALLOW ) ? apparmor: apparmor使用上与seccomp类似,也是需要一个profile。apparmor也有一个默认的profile,相比seccomp,apparmor可以限制更多的资源,如文件权限,网络,capabilities等。 ubuntu下多个版本的apparmor手册可以参见AppArmor ?SELinux:
TIPS:
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |