容器安全加固
Docker容器运行安全加固
为保证容器安全运行,建议用户根据业务,配置如下加固项,具体操作方法请参考官方说明:
- 启用apparmor能力:运行容器时可指定apparmor文件,apparmor能够提供安全策略,保护Linux系统和应用程序。启用apparmor能力前需要先开启Linux内核的apparmor功能。
- 启用SELinux能力:运行容器时可指定SELinux配置,提高安全性。启用SELinux能力前需要使用“--selinux-enabled”配置在Docker守护进程中生效。
- 启用现场还原能力:需要启用“--live-restore”配置减少对Docker守护进程的依赖。
- 为容器设置系统资源的配额,避免容器占用过多的系统资源,导致资源耗尽。系统资源包括但不限于CPU、内存。
- 避免在容器中运行不可信的应用。
- 避免在容器中侦听不必要的端口。
- 为容器配置适当的CPU优先级。
- 将容器的根文件系统挂载为只读模式。
- 将传入的容器流量绑定到特定的主机接口,为容器的端口映射配置指定IP地址。
- 限制容器运行使用的文件句柄和fork进程数量。
- 容器服务对外侦听的业务接口启用认证和加密传输机制,保证业务数据不被窃取。
- 避免在容器中运行SSH服务端。
- 避免共享命名空间,包括:网络命名空间、UTS命名空间、user命名空间。
- 避免在容器中挂载docker.sock。
- 确保没有任何用户加入Docker用户组。
- 用户在使用创建容器或模板、更新容器或模板相关接口时,需谨慎配置环境变量、ConfigMap等参数,并确保使用安全镜像。避免通过环境变量、ConfigMap等传递敏感信息,以防止敏感数据泄露,或因配置不当而存在提权风险。建议用户结合自身业务,在使用数据前做好充分校验。
容器应用日志安全加固
如果容器应用中存在日志打印到标准输出,可能会出现容器应用日志绕接失败,导致磁盘空间耗尽。建议用户根据业务,配置“/etc/docker/daemon.json”配置文件中“log-opts”字段的“max-size”和“max-file”参数。该配置会在重启Docker后,对修改配置之后创建的容器应用生效。
参数说明:
- max-size:日志自动转储的最大转储文件大小。
- max-file:日志自动转储的最大转储文件数量。
主机安全加固
- 为容器创建单独分区。Docker的默认目录是“/var/lib/docker”,建议为Docker创建单独的磁盘分区,避免容器占用的磁盘容量和主机其他应用使用的磁盘容量相互影响。
- Docker主机必须进行加固。建议对运行Docker容器的主机进行安全加固,并定期进行漏洞扫描。
- 使用最新的Docker版本。建议及时更新Docker的版本,规避Docker软件的已知漏洞。
- 开启Docker守护进程和关键文件的审计功能。开启审计功能能够追溯攻击事件的根源,此功能开启后,会造成一定的性能影响,需要用户根据业务决定是否开启。
Docker守护进程安全加固
- 限制容器间的相互网络访问。Docker守护进程默认允许容器间相互网络通信,容易造成信息泄露,建议将-icc=false配置在Docker守护进程中。
- 防止开启守护进程的远程访问接口。不要使用Docker Remote API服务,且需要严格控制docker.sock文件的读写权限,只将必要的用户配置到Docker用户组中。若业务需要开启Docker Remote API服务,建议通过--authorization-plugin开启守护进程的细粒度访问策略控制。
- 限制容器的文件句柄数、fork进程数。建议将--default-ulimit 中 nofile和nproc参数配置在Docker守护进程中,避免fork炸弹或者耗尽文件句柄资源的情况,导致主机受到攻击。容器资源限制的数值需要根据业务评估,不合理的限额会导致容器无法运行。例如--default-ulimit nofile=64:64 --default-ulimit nproc=512:512,限制单个进程的文件句柄数为64,单个UID用户的fork进程数为512。
- 禁用用户空间代理。建议将--userland-proxy=false配置在Docker守护进程中,减小攻击面。
- 启用user namespace命名空间。启用后,会提供容器用户与主机用户的权限隔离,例如使用--userns-remap=defalut配置在Docker守护进程中。
- 避免使用aufs存储驱动,aufs是不受支持的驱动程序。
- 配置日志驱动。根据业务评估是否需要开启日志驱动。
- 确保Docker守护进程使用到的文件权限最小化。若Docker的配置文件被恶意利用,可能导致Docker守护进程出现异常行为。需要重点关注的文件和目录包括但不限于:
/etc/docker/certs.d/,/etc/docker/daemon.json,/etc/default/docker,/usr/lib/systemd/system/docker.service,/etc/sysconfig/docker,/var/run/docker.sock,/etc/docker/,/usr/lib/systemd/system/docker.socket
父主题: 安全加固