收回普通用户sudo权限需先确认授权方式,再精准清除:查groups和sudoers文件定位来源,依组、主配置或sudoers.d文件分别用deluser/gpasswd、sed或rm移除,最后visudo -c验证并清理ssh/crontab等提权路径。

收回普通用户的 sudo 权限,关键在于切断其获得权限的路径,而不是简单禁用账户或改密码。Linux 本身不自动关联登录状态与 sudo 权限,所以必须主动清理授权来源。
先确认用户是怎么获得 sudo 权限的
不同系统授权方式不同,得先查清楚再动手:
- 运行 groups username 看用户是否属于
sudo(Ubuntu/Debian)或wheel(CentOS/RHEL)组 - 执行 sudo grep -r "^username" /etc/sudoers /etc/sudoers.d/ 检查是否在主配置文件或独立文件中被直授权限
- 注意:
/etc/sudoers.d/下的文件名常与用户名一致,也可能是自定义命名,需逐个查看内容
按授权方式精准移除
找到来源后,对应处理,避免误删他人配置:
- 如果用户靠加入
sudo或wheel组获得权限:
• Ubuntu/Debian:运行 sudo deluser username sudo
• 通用方式(包括 RHEL/CentOS):运行 sudo gpasswd -d username wheel(或sudo) - 如果权限写在
/etc/sudoers主文件里:
• 先备份:sudo cp /etc/sudoers /etc/sudoers.bak
• 再安全删除行:sudo sed -i '/^username[[:space:]]/d' /etc/sudoers - 如果权限在
/etc/sudoers.d/username这类独立文件中:
• 直接删除该文件:sudo rm /etc/sudoers.d/username
操作后必须验证和收尾
一步错可能导致整个系统 sudo 失效,所以不能跳过验证:
- 运行 sudo visudo -c 检查语法是否正确,输出
sudo: parsed OK才算安全 - 用 sudo -l -U username 查看该用户当前还能执行哪些命令,确认已无权限
- 若该用户曾配置过 SSH 密钥、crontab 或其他提权入口,建议一并清理(如
sudo -u username crontab -e查看并清空)
长期管理建议
手动操作适合单次调整,批量或定期回收推荐脚本化:
- 用 lastlog -b 90 找出 90 天未登录的用户,过滤 UID ≥ 1000 的普通账户
- 对每个目标用户,自动执行 deluser/gpasswd + 删除 sudoers.d 文件 + visudo -c 验证
- 把脚本加入 cron 定期运行(如每月一次),比依赖人工更可靠











