安全学习路径:身份、主机、供应链与运行时

使用方式

安全不是“装一个扫描器”,而是身份、权限、边界、供应链、检测和合规的组合。这条路径按“谁能做什么 → 主机怎么加固 → 制品是否可信 → 运行时如何发现”推进。

四个阶段按依赖顺序排列,每个阶段建议留 3–4 小时:

安全控制要能回答“失败了会怎样”。只配置不验证,等于没有控制。

阶段一:身份与权限

目标:能回答“谁在什么条件下,对什么资源,能做什么”,并区分认证、授权和审计。

阅读顺序:

  1. sudo — 提权规则、命令白名单和环境保留的风险。
  2. ssh — 密钥认证、代理转发、端口转发和跳板。
  3. pam — 认证栈、密码策略、失败锁定和会话限制。
  4. sshd — 禁用密码登录、限制用户和算法配置。
  5. rbac — Role、ClusterRole、Binding 和 verbs/resources 的组合。
  6. serviceaccount — 工作负载身份、令牌投射和权限边界。
  7. kubeconfig — 上下文、证书、token 和集群切换。
  8. workload-identity — 用云身份替代长期静态密钥。
  9. ssh-cheatsheet — SSH 配置和排障速查。
  10. linux-permission-cheatsheet — 权限位、ACL 和特殊位速查。

动手任务:审计本机 sudo 规则和 SSH 认证方式;在测试集群创建一个只能读取指定命名空间 Pod 的 ServiceAccount,并用 kubectl auth can-i 验证边界。

sudo -l
sudo sshd -T | grep -E 'permitrootlogin|passwordauthentication|pubkeyauthentication'
kubectl create namespace demo
kubectl create serviceaccount reader -n demo
kubectl create role pod-reader --verb=get,list --resource=pods -n demo
kubectl create rolebinding reader --role=pod-reader --serviceaccount=demo:reader -n demo
kubectl auth can-i list pods -n demo --as=system:serviceaccount:demo:reader

过关标准:

阶段二:主机加固

目标:减少主机暴露面,建立基线、审计和入侵检测,能发现异常提权、文件篡改和暴力破解。

阅读顺序:

  1. auditd — 审计规则、命令执行、文件访问和日志检索。
  2. fail2ban — 登录失败检测、封禁策略和误封风险。
  3. openscap — SCAP 基线扫描、CIS 配置检查和报告。
  4. lynis — 主机加固审计和建议项。
  5. aide — 文件完整性基线、哈希数据库和定期校验。
  6. rkhunter — rootkit 特征扫描和误报处理。
  7. selinux-denied — 强制访问控制拒绝的排查方式。
  8. iptables — 包过滤、状态匹配和规则顺序。
  9. ufw — 简化防火墙管理,以及它和底层规则的关系。
  10. firewall-cmd — firewalld 区域、服务和运行时/永久配置。

动手任务:在测试机上跑一次 Lynis 和 OpenSCAP 基线,给敏感文件加一条 audit 规则,用 AIDE 建基线后修改文件验证告警,再配置 fail2ban 观察一次封禁。

sudo lynis audit system
sudo oscap xccdf eval --profile xccdf_org.ssgproject.content_profile_cis --results report.xml ssg-debian12-ds.xml
sudo auditctl -w /etc/passwd -p wa -k identity
sudo aideinit && sudo aide --check
sudo fail2ban-client status sshd

过关标准:

阶段三:容器与供应链

目标:让镜像、依赖和构建过程可验证,并用准入策略阻止不合格制品进入集群。

阅读顺序:

  1. trivy — 镜像、文件系统、IaC 和 SBOM 扫描。
  2. cosign — 签名、验证、密钥对和 keyless 模式。
  3. kyverno — 用 Kubernetes 原生策略做校验、变更和生成。
  4. gatekeeper — OPA/Rego 约束模板和准入控制。
  5. grype — 基于 SBOM 的漏洞匹配和严重度。
  6. syft — 生成 SBOM,覆盖镜像和文件系统。
  7. gitleaks — 在提交和历史中检测密钥泄露。
  8. semgrep — 源码静态分析和不安全模式检测。
  9. slsa-verifier — 校验 provenance 和构建来源。
  10. in-toto — 供应链步骤签名、布局和验证。

动手任务:为一个镜像生成 SBOM 并扫描漏洞,用 cosign 签名,写一条 Kyverno 策略只允许已签名镜像,再用 slsa-verifier 校验一次构建来源。

syft localhost:5000/demo:1.0 -o spdx-json > sbom.json
grype sbom:sbom.json --fail-on high
trivy image --severity HIGH,CRITICAL localhost:5000/demo:1.0
cosign sign --key cosign.key localhost:5000/demo:1.0
cosign verify --key cosign.pub localhost:5000/demo:1.0

过关标准:

阶段四:运行时与合规

目标:在容器运行时发现异常行为,用最小权限和网络策略限制影响范围,并让密钥和证书可轮换。

阅读顺序:

  1. falco — 基于系统调用的运行时规则和告警。
  2. tetragon — eBPF 可观测、进程执行策略和阻断。
  3. pod-security-admission — privileged、baseline、restricted 三个级别。
  4. networkpolicy — 默认拒绝、标签选择和出入口规则。
  5. cert-manager — 证书签发、续期和私钥保护。
  6. vault — 动态密钥、租约、审计和加密即服务。
  7. build-openbao — OpenBao 的部署与初始化流程。
  8. seccomp — 系统调用过滤和默认运行时配置。
  9. apparmor — 文件、能力和网络访问的强制配置。
  10. container-security-checklist — 容器上线前的安全检查清单。

动手任务:在测试集群启用 restricted 级别,创建默认拒绝的 NetworkPolicy,只放行必要流量;用 Falco 或 Tetragon 捕获一次容器内启动 shell 的行为;用 Vault 或 OpenBao 发放一个有租期的凭据。

kubectl create namespace demo-restricted
kubectl label namespace demo-restricted pod-security.kubernetes.io/enforce=restricted
kubectl -n demo-restricted run bad-pod --image=busybox --privileged -- sleep 3600
kubectl create namespace demo-runtime
kubectl -n demo-runtime run demo-pod --image=busybox -- sleep 3600
kubectl -n demo-runtime apply -f default-deny.yaml
kubectl -n demo-runtime exec -it demo-pod -- sh
kubectl logs -n falco -l app=falco --tail=20
vault kv put secret/demo password=change-me
vault lease renew "$LEASE_ID"

过关标准:

常见误区

读完自测

合上页面,先回答,再展开对照。

  1. RBAC 中的 Role 和 ClusterRole 有什么区别?什么情况下必须用 ClusterRole?
  2. 镜像扫描、签名和 provenance 分别解决供应链中的什么问题?
  3. Pod Security Admission 设为 restricted 后,为什么还需要 Falco 或 Tetragon?
答案
  1. Role 只在某个命名空间内生效,ClusterRole 是集群范围或跨命名空间复用。需要授权集群级资源(如 nodes、persistentvolumes、clusterroles)或通过 ClusterRoleBinding 在所有命名空间生效时,必须使用 ClusterRole。
  2. 镜像扫描发现已知漏洞和错误配置;签名证明镜像由可信主体签署且未被篡改;provenance 证明镜像由哪个仓库、提交和流水线构建。扫描不能防止篡改,签名不能说明构建过程,provenance 不能替代漏洞检测。
  3. restricted 只约束 Pod 的安全上下文和字段组合,无法发现运行后的异常行为,例如容器内启动 shell、读取敏感文件、发起意外外连或执行挖矿程序。运行时检测基于系统调用和行为规则,能弥补准入控制看不到的部分。

相关条目