1. 系统更新与补丁管理
定期运行sudo apt update && sudo apt upgrade命令,确保系统和软件包为最新版本,修补已知安全漏洞;配置unattended-upgrades软件包实现自动安全更新,避免因未及时修复漏洞导致系统暴露风险。
2. 最小安装与依赖优化
安装系统时选择“最小安装”选项,或使用aptitude、apt的--no-install-recommends参数,避免安装不必要的软件包和依赖,减少系统潜在的攻击面。
3. 防火墙配置
使用ufw(Uncomplicated Firewall)工具设置默认策略为“拒绝所有传入连接”,仅允许必要的端口(如SSH的22端口、HTTP的80端口、HTTPS的443端口)对外开放;对于复杂网络环境,可使用iptables配置精细化规则,限制入站和出站流量。
4. 用户权限与SSH安全
创建普通用户并赋予必要权限,避免直接使用root账户进行日常操作;禁用root用户通过SSH远程登录(修改/etc/ssh/sshd_config文件中的PermitRootLogin no),更改SSH默认端口(如从22改为2222),启用SSH密钥认证(替代密码认证),防止暴力破解。
5. 安全增强工具
启用AppArmor(Debian默认支持)限制程序权限,通过配置文件约束进程可访问的资源和操作;安装fail2ban防止SSH暴力破解,自动封禁多次尝试失败的IP地址;使用auditd记录系统活动,便于追踪异常行为。
6. 日志与监控
配置logwatch或journalctl实时监控系统日志,定期审查/var/log/auth.log(认证日志)、/var/log/syslog(系统日志)等文件,识别潜在的安全威胁(如异常登录、未授权访问)。
1. 镜像安全
python:3.11-alpine、node:16-alpine),避免使用未经验证的第三方镜像;Alpine等小型镜像体积小、依赖少,可显著降低攻击面。Trivy、Docker Scan(Docker Desktop内置)、Snyk等工具扫描镜像,检测已知漏洞(如CVE)、恶意软件或不安全配置;将扫描集成到CI/CD流水线,设置“高危漏洞阻止部署”的安全门禁。node:16-alpine作为构建阶段,node:16-alpine作为运行阶段。2. 容器运行时安全
RUN adduser -D appuser),并以该用户身份运行容器(USER appuser);避免容器以root用户运行,降低逃逸或提权风险。--memory(内存限制)、--cpus(CPU限制)、--pids(进程数限制)等参数限制容器资源,防止容器因资源耗尽导致宿主机崩溃;例如,docker run --memory=512m --cpus=2 myapp:latest。--privileged参数(赋予容器root权限),如需特定能力(如绑定低端口),使用--cap-add添加必要能力(如NET_BIND_SERVICE),并通过--cap-drop移除多余能力(如ALL);设置容器为“只读文件系统”(--read-only=true),防止恶意修改文件。3. 网络安全
docker network create --driver bridge secure-network),将不同安全域的服务部署到不同网络,限制容器间非必要的通信;默认情况下,自定义bridge网络中的容器无法直接互通。-p 8080:80),避免暴露敏感服务(如数据库的3306端口);结合宿主机防火墙(如ufw)限制访问源(如仅允许公司IP访问8080端口)。4. 镜像签名与可信发布
使用Docker Content Trust(DCT)或Sigstore/cosign对镜像进行签名,确保镜像未被篡改;拉取镜像时启用签名验证(export DOCKER_CONTENT_TRUST=1),防止拉取恶意镜像;企业级场景可使用Harbor、Quay等仓库的签名与扫描功能,实现镜像的全生命周期安全管理。
5. 运行时安全检查
定期使用Docker Bench for Security(docker-bench-security.sh)检查Docker主机和容器的安全配置,识别不符合最佳实践的项目(如特权容器、root用户运行的容器);使用Falco监控容器运行时行为,及时发现异常(如容器内执行rm -rf /、连接敏感端口)。