《默认安全原则落地指南》
第2章 最小权限原则
2、最小权限原则:概念解析、权限模型设计、用户与进程权限最小化实践
2.1 概念解析
最小权限原则(Principle of Least Privilege, PoLP)是网络安全与系统设计的核心基石。该原则要求任何用户、程序或进程仅应被授予完成其合法任务所必需的最小权限集合,且权限的有效期应尽可能短。
📌 核心思想: 权限不是越多越好,而是“刚刚好”。多一份权限,就多一分被滥用的风险。
图1:最小权限原则核心对比——权限应精确匹配任务需求
2.2 权限模型设计
设计权限模型时,通常采用分层、分域的思想,将权限抽象为三个核心维度:
图2:RBAC权限模型——用户→角色→权限→资源 的映射关系
2.3 用户与进程权限最小化实践
🔹 用户权限最小化
- 按角色分配: 使用 RBAC 模型,避免直接给个人授权。例如:审计员仅授予
SELECT权限。 - 临时提权: 使用
sudo或PAM机制,操作完成后自动降权。 - 定期审计: 每季度审查用户权限列表,撤销长期未使用的权限。
- 默认拒绝: 新用户默认无权限,按需申请、审批后开通。
🔹 进程权限最小化
- 专用运行账号: 每个服务使用独立的系统账号(如
nginx、mysql),禁止使用 root 运行。 - 文件系统权限: 进程仅对其工作目录拥有读写权限,其他目录只读或不可见。
- 能力(Capabilities)裁剪: 使用
capsh或 Docker--cap-drop移除不需要的 Linux Capabilities。 - Seccomp / AppArmor: 限制进程可调用的系统调用,防止内核漏洞利用。
图3:进程权限最小化四步实施流程
🔹 实践代码示例(Linux 环境)
# 1. 创建专用系统账号(无登录权限) sudo useradd -r -s /sbin/nologin myapp # 2. 设置文件所有权和最小权限 sudo chown myapp:myapp /opt/myapp sudo chmod 750 /opt/myapp # 仅 owner 和 group 可读写执行 sudo chmod 640 /opt/myapp/config # 配置文件仅 owner 可写 # 3. 使用 systemd 限制进程能力(Capabilities) [Service] User=myapp CapabilityBoundingSet=CAP_NET_BIND_SERVICE AmbientCapabilities=CAP_NET_BIND_SERVICE NoNewPrivileges=yes # 4. 使用 Docker 运行时的最小权限 docker run -d \ --name myapp \ --user 1001:1001 \ --cap-drop=ALL \ --cap-add=NET_BIND_SERVICE \ --security-opt seccomp=default.json \ --read-only \ myapp:latest
📋 最小权限检查清单
🎯 核心要点回顾: 最小权限原则不是一次性配置,而是一个持续审计、持续收敛的过程。每次系统变更后,都应重新评估权限是否仍然“最小”。