免密提权意味着什么
sudo 的默认行为是执行前要求输入本人口令,这道确认并不只是防误操作:它能证明操作者知道口令,也在日志里留下一次明确的动作。加上免密选项后这道门被移除,任何能使用该账号的人(包括通过会话劫持或恶意脚本)都能直接执行特权命令。所以免密授权的数量应当极少,且每一条都能对应到明确的授权理由。
基本信息
| 加固项 | 最小化免密提权授权 |
|---|---|
| 适用平台 | Linux(sudo,RHEL/CentOS/Debian/Ubuntu) |
| 风险等级 | 中 |
| 检查位置 | /etc/sudoers 与引入目录中的免密条目 |
| 校验要求 | 任何改动前后都要做语法校验 |
典型使用场景
- 基线核查:扫描全部免密条目并逐条确认必要性
- 自动化评估:脚本任务确实需要免密时,限定到具体命令
- 人员变动:离场后确认相关免密授权已收回
- 事件排查:确认攻击者能否借助既有免密授权提权
- 整改验收:清理完成后复查清单是否收敛
核查命令
核查命令
grep -rn 'NOPASSWD' /etc/sudoers /etc/sudoers.d/ 2>/dev/null
visudo -c # 校验语法,任何修改后必做
sudo -l -U alice # 查看某账号实际生效的授权
ls -l /etc/sudoers.d/ # 引入目录内的文件清单接入方式对照
| 接入方式 | 适用场景 | 风险控制 |
|---|---|---|
| 人工免密 | 常规运维使用免密 | 不推荐,改为口令确认或限定命令 |
| 脚本免密 | 自动化任务执行固定命令 | 把命令限定到具体路径,避免使用通配符 |
| 限定身份免密 | 以特定服务账号身份执行 | 把运行身份收窄到具体账号而非任意用户 |
| 带通配符免密 | 为图省事放开某目录下的命令 | 风险最高,实际权限可能远超预期 |
带通配符的免密授权(例如放开某个目录下的所有可执行文件、或放开通用服务管理命令)实际上等同完整提权:这些命令往往可以间接执行任意程序或写任意文件。发现这类条目要按高危处理,逐条评估后再决定保留形式。
两个执行细节:被引入的目录里,文件名包含点号或以特定后缀结尾的文件会被忽略,写了不生效,判断实际授权应以工具的展开结果为参考;另外规则支持续行写法,逐行搜索可能漏掉跨行的免密条目,扫描只是初筛,最终清单要人工核对。
清理与替代方案
清理的顺序建议是:先去掉长期无人使用的历史条目,再把人工免密改为口令确认,最后针对确实需要免密的任务收窄命令范围与运行身份。替代思路是把复杂操作封装成参数固定的专用脚本,只授权执行该脚本,这样既满足自动化,又把可执行范围锁死在一个入口上。