首页/系统/信创系统运维速查/sudo 免密策略的最小化使用
安全加固65 条

sudo 免密策略的最小化使用

自动化与运维机器人需要免密时,按命令粒度配置 NOPASSWD;范围写宽等于放大风险,定期复核授权清单并清理失效条目。

信创系统运维速查系统更新于 2026-10-13

免密 sudo 的边界

自动发布与巡检机器人无法应答口令提示,因此需要 NOPASSWD。关键在于把免密范围压到最小:按命令粒度授权,只放行自动化真正用到的那几条,并限定执行用户。范围写宽的代价很直接——被授权的脚本一旦可被普通用户修改,免密 sudo 就等于把 root 权限交给了任何能写那个脚本的人。

基本信息

配置位置/etc/sudoers.d/ 下独立文件,用 visudo 或 visudo -f 编辑
写法用户 主机=(目标用户) NOPASSWD: 命令绝对路径
查看授权sudo -l -U 用户名
语法校验visudo -c
限制来源命令写绝对路径,且尽量匹配具体子命令与参数
复核周期建议随人员与系统变更同步复核,至少每季度一次

典型使用场景

  • CI/CD 发布账户需要免密重启指定服务
  • 监控探针需要免密执行特定检查命令
  • 批量巡检脚本收集系统信息,逐条授权读取类命令
  • 备份任务需要免密挂载或卸载指定目录
  • 运维机器人执行受控的固定命令集

片段示例与复核

片段示例与复核
# /etc/sudoers.d/deploy(只放行固定命令)
deploy ALL=(root) NOPASSWD: /usr/bin/systemctl restart myapp
deploy ALL=(root) NOPASSWD: /usr/bin/systemctl status myapp
deploy ALL=(root) NOPASSWD: /usr/bin/systemctl reload myapp

visudo -f /etc/sudoers.d/deploy     # 用 visudo 编辑,保存时自动校验语法
sudo -l -U deploy                    # 复核该账户最终生效的授权清单
su - deploy -c 'sudo -n systemctl status myapp'   # 实测免密执行是否可用

范围收敛与风险核查

范围收敛与风险核查
grep -rn NOPASSWD /etc/sudoers /etc/sudoers.d/ 2>/dev/null   # 全局清点免密条目
ls -l /opt/scripts/deploy.sh                                # 授权脚本的权限:普通用户可写即风险
find /opt/scripts -perm -o+w -type f 2>/dev/null             # 找出全局可写脚本
sudo -l -U deploy | wc -l                                    # 授权条目数量,条目越多越需复核
visudo -c                                                    # 每次改动后统一校验

写法与风险

写法授权范围风险
NOPASSWD: ALL全部命令免密等价于免口令 root,最高风险
NOPASSWD: /usr/bin/systemctl该命令的任意参数可借 systemctl 间接执行任意服务操作
NOPASSWD: /usr/bin/systemctl restart myapp单一子命令收敛到具体动作,推荐
NOPASSWD: /opt/scripts/deploy.sh单个脚本脚本可写即等于提权通道
限定目标用户 (root) 或 (appuser)切换身份范围目标用户越宽,影响面越大
NOPASSWD: ALL 等价于免口令 root:只在完全隔离的自动化账户上按需使用,评审通过后及时收敛,不要长期留在生产机上。
命令匹配看实际执行路径与参数模式:写 /usr/bin/systemctl 会放行该命令的大量参数组合,需要更严格控制时应把子命令甚至参数一并写入授权行。

易错点

  • 授权了免密的部署脚本,而脚本文件本身对普通用户可写,等于给所有人留了提权通道
  • 命令写相对路径或通配形式,sudo 匹配到的实际程序与预期不同,授权范围超出设计
  • 把 NOPASSWD: ALL 当作省事的通用方案,自动化账户一旦泄露就是完整 root 权限
  • 人员离职或系统下线后未清理授权条目,遗留账户仍持有免密权限
  • 改 sudoers 时没用 visudo,语法错误导致全局 sudo 失效,故障排查时连提权都做不了

数据来源与参考

  • man 5 sudoers(NOPASSWD)
  • sudo 官方文档(命令匹配)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌