sudoers 配置的要点
提权授权集中在主配置文件与其包含目录下的片段里。授权的基本格式是「谁 在哪些主机上 以哪个身份 可以执行哪些命令」,把范围收窄到具体命令是最小权限的落地方式。配置的关键纪律有两条:一定用专门的编辑工具,它会在保存时做语法检查;命令要写完整绝对路径,只写命令名会留下被路径劫持的风险。语法写错的代价很直接——提权整体不可用,连修复都要另找通道。
基本信息
| 主配置 | /etc/sudoers |
|---|---|
| 片段目录 | /etc/sudoers.d/ 下按用途分文件 |
| 编辑工具 | 专用编辑命令,退出时自动做语法检查 |
| 语法检查 | 可单独执行全量检查模式 |
| 授权粒度 | 按用户或用户组,按命令或命令集合 |
| 免密选项 | 标签形式加在命令前,谨慎使用 |
典型使用场景
- 运维授权:允许运维组重启与查看指定服务,而不是开放全部命令
- 免密自动化:发布脚本需要提权执行固定命令时按命令粒度放行
- 审计要求:授权范围可查可证,限制到具体命令便于合规检查
- 临时授权:通过独立片段下发,任务结束删除片段即可回收
- 排障定位:确认某个账号为什么不能执行提权命令
- 集中管理:把授权拆成多个片段文件,避免主文件频繁变更
配置流程
配置流程
visudo # 编辑主文件,退出时自动语法检查
visudo -f /etc/sudoers.d/ops # 编辑独立片段
# 片段示例:允许运维组管理指定服务
%ops ALL=(root) /usr/bin/systemctl restart nginx, /usr/bin/systemctl status nginx
visudo -c # 全量语法检查,改完必做
sudo -l -U opsuser # 查看某个账号最终可执行的提权命令授权字段读法
| 位置 | 含义 | 写法建议 |
|---|---|---|
| 第一个字段 | 被授权对象 | 用户或用户组,组名通常带前缀 |
| 第二个字段 | 生效主机范围 | 单机环境用通配写法即可 |
| 第三个字段 | 以哪个身份执行 | 按需指定,避免无条件最高权限 |
| 第四个字段 | 可执行命令 | 写完整路径,多条用逗号分隔 |
| 免密标签 | 执行时是否校验口令 | 仅对固定自动化命令使用 |
不要用重定向把授权文本直接追加到配置文件里:这样既绕过了语法检查,也容易把权限与属主改坏。统一通过专用编辑工具或片段目录下发,并在每次变更后执行语法检查,同时保留一个可用于修复的独立管理通道。
授权命令时写完整路径的原因很实在:如果只写命令名,被授权者可以在自己的可执行路径里放一个同名程序,间接获得以最高权限运行任意代码的能力。同理,带有通配符的宽泛授权也要尽量避免。