服务器安全
最小权限、补丁、防火墙。
30 分钟
服务器安全
Spring Boot 写得再规范,跑在 弱口令 SSH、全开防火墙、从不打补丁 的机器上仍会整体沦陷。服务器安全是 最小权限、及时补丁、网络隔离、可观测 的组合——后端工程师至少能 部署自己的 JAR 而不扩大攻击面。
学习目标
- 应用 最小权限 原则到 OS 用户、DB 账号、云 IAM
- 列出生产主机 必须关闭或保护 的入口
- 将补丁与日志习惯与 spring-boot-essentials 部署流程衔接
最小权限(Least Privilege)
| 层级 | 坏实践 | 好实践 |
|---|---|---|
| OS | root 跑 Java 进程 | 专用 app 用户,无 shell 登录 |
| DB | 应用用 root | 仅 GRANT 所需表的 CRUD |
| 云 IAM | 开发密钥 Admin | CI 只读 ECR + 部署单一服务 |
| 文件 | 配置 777 | keystore、.env 600,属主 app |
Spring application.yml 里 数据库密码 用环境变量注入(见 sb-config),与 OS 权限 同一纪律。
网络与防火墙
Internet → 443 (LB/Nginx) → 8080 (内网 Spring Boot)
✗ 禁止公网直连 8080、3306、6379
- 仅暴露必要端口:HTTPS、必要时 SSH(改端口 + 密钥登录)
- 管理口:VPN 或堡垒机,禁止 0.0.0.0/0 SSH
- 容器:Kubernetes NetworkPolicy 限制 Pod 间访问
API 层的 CORS 与 TLS 不能替代 网络 ACL。
补丁与依赖
两类补丁都要管:
- OS / 内核:
unattended-upgrades或云镜像定期更新 - 应用依赖:Maven/Gradle 锁版本 + CI 跑 OWASP Dependency-Check / Dependabot
Log4Shell 类事件说明:运行时 RCE 往往来自依赖,不是业务代码一行行写错。合并 PR 前看 是否有 CVE。
secrets 与配置
.env、kube Secret、云 Secret Manager——不进 Git- 轮换:DB 密码、JWT signing key、第三方 API key 有 过期与撤销流程
- 日志:禁止 打印完整 Authorization 头、密码字段(Logback 脱敏)
与 sec-hash、 直接相关。