把提权授予摊开看
sudoers 决定谁可以用什么方式提权,它是权限管理的核心,也是最容易积累历史垃圾的地方:临时测试加的免密条目、离职人员留下的授权、为了「省事」放开的全权规则,往往在若干年后仍然存在。核查的方法很直接:把全部授予展开成清单,逐条找到授权来源、用途与责任人,找不到的即为整改对象。
基本信息
| 加固项 | 提权授权清单化 |
|---|---|
| 适用平台 | Linux(sudo,RHEL/CentOS/Debian/Ubuntu) |
| 风险等级 | 高 |
| 检查位置 | /etc/sudoers 与 /etc/sudoers.d/ 下的全部文件 |
| 重点项 | 免密条目与全权授予 |
典型使用场景
- 基线核查:给出当前提权授权清单与授权人对照表
- 人员变动:离场处理后核对授权是否已收回
- 等保访问控制:要求特权操作遵循最小授权原则
- 事件排查:确认攻击者是否通过既有授权完成提权
- 配置清理:清理长期无人维护的历史条目
核查命令
核查命令
visudo -c # 先校验语法,任何改动前后必做
grep -rE '^[^#]*NOPASSWD' /etc/sudoers /etc/sudoers.d/ 2>/dev/null
grep -rE '^[^#]*ALL' /etc/sudoers /etc/sudoers.d/ 2>/dev/null | head -20
ls -l /etc/sudoers.d/ # 目录内文件清单与权限
sudo -l -U alice # 查看某账号实际拥有的授权两类重点项
| 条目形态 | 含义 | 处置方式 |
|---|---|---|
| NOPASSWD | 免密执行,口令保护与二次确认同时失效 | 每条对应书面授权,无授权即删除 |
| ALL 命令授权 | 允许执行任意命令,效果等同完整提权 | 确认必要性,能收窄就收窄 |
| 运行身份写 ALL | 可以任意用户身份运行命令 | 越宽松越需要理由,优先收窄到具体身份 |
| 带通配符的路径 | 命令路径使用通配符可被参数绕过 | 改为精确路径或封装专用脚本 |
| Defaults 全局放宽项 | 影响所有用户的全局设置 | 逐项评估,避免全局降低要求 |
免密条目等于免确认提权:每一条都要有对应的书面授权与责任人,匿名账号、测试账号、临时排障留下的条目必须清理。核查时要覆盖全部被引用的文件,只扫主文件会漏掉引入目录中的规则。
两个容易踩的细节:一是引入目录中文件名包含点号或特定后缀的文件会被忽略,写了也不生效,判断生效规则应以实际展示的授权清单为准;二是规则支持续行写法,逐行文本搜索可能漏掉跨行的条目,最终结论要以工具展开的结果为参考。
台账化之后怎么维护
把授权整理成台账:账号或组、可执行的命令范围、运行身份、是否需要口令、授权来源、复核日期。台账按季度更新,人员变动时同步调整,新增授权走审批并写进台账。这样核查从「翻配置文件」变成「比对台账与实际清单」,效率与可追溯性都更高。