赞
踩
容器以进程的形式运行在主机上,运行的容器进程是隔离的,它拥有自己的文件系统、网络以及独立于主机 的进程树。下面将详细说明如何使用 docker run 1 来定义容器运行时的资源。
4.6.1.1 内核选项配置
(1)启用 AppArmor 安全配置
AppArmor 通过执行安全策略来保护 Linux系统和应用程序
免受各种威胁,这里的安全策略通过 AppArmor 配置文件体现(参考 4.1.4.2)。用户可以为容器创建自己的 AppArmor 配置文件,也可以使用 Docker 默认的 AppArmor 配置文件。- docker run --security-opt=”app
armor=$PROFILE” (2)设置 SELinux 安全选项
SELinux提供了一种有效的 Linux访问控制机
制,在 Docker 服务启动时,建议对 SELinux进行配置。那么在 启动容器的时候,同样建议使用该安全选项,通过为 Docker 容器创建或导入 SELinux策略模板,实现其安全防护。- docker run –security
-opt lable=level:TopSecret (3)内核功能受限使用
Linux内核的 Capabilities 机制,支持 Docker 容器内部仅授予其必要的内核功能,通过移除不必要功能,减 少攻击面来增强其安全性
。例如容器中通常是不需要 NET_ADMIN、SYS_ADMIN、SYS_MODULE等功能的。可以通过以下命令添加 / 删除所需的功能:
代码滥用系统调用会对系统造成安全威胁。通过 seccomp,限制程序使用某些系统调用,这样可以减少系统的 暴露面,同时使程序进入一种“安全”的状态。
默认情况下,Docker 会启用 seccomp 配置文件。在 Docker 1.10 版本以后,默认的配置文件会阻止部分系 统调用,即使容器已经进行了 --cap-add 设置,用户可以自定义该文件,通过白名单的方式获取相应的内核系统 调用权限:
比如,具体可使用使用“-c”或“–cpu-shares”参数运行容器:
当然,对于将 HTTP 服务绑定 80 端口,HTTPS 服务绑定 443 端口这种必须使用的,不在讨论范围。这里的 特权端口包括 22(SSH 服务)、21(FTP 服务)、25(SMTP 服务)、110(POP3 邮件服务)等。
另一方面,严格审计容器镜像的 Dockerfile 文件,确保只暴露必要的端口。 (4)容器中不要运行 SSH 等不必要的服务
通常用户在使用容器的时候,很自然地会和虚拟机进行类比,比如怎么进入容器内进行调试、sshd 怎么配 置等。要正确的使用容器,一定要有容器化的思维,正确的认识容器。特别是在微服务体系中,容器的本质就是 一个或少数进程以及运行进程所需要的各种依赖,即运行时环境的最小集。
如果在容器中运行了 SSH、TELNET 等服务,不仅不会增加该微服务的功能,反而会带来一系列的安全威胁 以及增加安全运维的复杂度。比如 SSH 服务的访问策略和安全合规性管理、各种容器的秘钥以及密码管理、SSH 服务安全升级等。因此在生产环境中,容器内不应运行 SSH 等不必要的服务。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。