最小权限原则是服务器安全的通用法则,落到日常操作是两件事:应用进程用独立低权限账号运行,管理动作经 sudo 精确授权。原则朴素,执行细节却常被简化。
## 原则的含义
最小权限指任何主体只持有完成其职责所必需的权限,不多给一分。应用进程不需要读系统配置、不需要改任意文件、更不需要 root 身份;运维人员日常也不必以 root 身份操作。权限越大的主体越少、持有时间越短,攻击与误操作的影响面就越小。
## 为什么应用不该跑在 root 下
root 进程一旦被攻破,攻击者直接获得系统最高权限:读取所有数据、安装后门、清理痕迹、横向移动,防御纵深归零。低权限账号下,漏洞利用的成果被圈在资源边界内:能读的目录有限、能改的文件有限、提权还需要二次突破。误操作同理:应用低权限账号的失控脚本删不掉系统文件,root 下的失控脚本可以。代价几乎为零的隔离,换来的是攻击成本的量级提升。
## sudo 的精确授权
管理动作的规范化靠 sudo:普通账号执行授权范围内的特权命令,全程留痕。授权粒度到具体命令路径,而不是一刀切放开所有命令。
bash # 运维账号只授权发布与回滚两条特权命令 deploy ALL=(root) NOPASSWD: /usr/local/bin/deploy.sh, /usr/local/bin/rollback.sh
配置的要点:命令写绝对路径,防止路径劫持;能用脚本封装的动作就用脚本授权,比散授权一堆原生命令更可控;免密选项只用于自动化场景,人工操作保留密码确认这道闸。
## 常见错误
应用部署完顺手用 root 起服务,权限收敛形同虚设;sudo 授权图方便直接放开全部命令,等于换了个名字的 root;忘了为不同应用建不同账号,多个应用共用一个账号,边界又糊回去了。顺云用户在初始化服务器时就把应用账号与授权矩阵规划好,后期的安全边界才有地基。