禁止普通用户sudo提权的核心是移除其在/etc/sudoers中的授权入口:先查groups username和sudo grep -r定位来源,再按组(deluser/gpasswd)、直接规则(visudo删除)或自定义组分类撤销,最后用sudo -v/-l验证失效,并加固权限与宽泛规则。

禁止普通用户使用 sudo 提权,核心是移除其在 /etc/sudoers 中的授权入口。不能靠删命令或改权限,必须从授权机制本身入手——因为 sudo 的控制权完全由 sudoers 文件和用户所属组决定。
确认用户当前如何获得 sudo 权限
先查清来源,避免误操作:
- 运行
groups username,看是否在sudo(Debian/Ubuntu)或wheel(RHEL/CentOS)组里 - 运行
sudo grep -r "username\|%" /etc/sudoers /etc/sudoers.d/ 2>/dev/null,检查是否有直接用户行或组规则匹配 - 执行
sudo -l -U username(需当前有 sudo 权限者运行),可直观看到该用户被允许执行哪些命令
按授权方式分别撤销
撤销方法取决于当初是怎么加的:
- 如果用户是通过组获得权限(最常见):
– Ubuntu/Debian:运行sudo deluser username sudo
– RHEL/CentOS:运行sudo gpasswd -d username wheel - 如果在
/etc/sudoers或/etc/sudoers.d/中有直接配置行(如username ALL=(ALL) ALL):
– 运行sudo visudo,定位并删除对应行;
– 若配置在/etc/sudoers.d/下某文件中,用sudo visudo -f /etc/sudoers.d/filename编辑删除 - 如果属于自定义授权组(如
%adminusers):
– 先用gpasswd -d username adminusers将其移出组;
– 再确认/etc/sudoers中该组规则是否仍有必要保留
验证是否已生效
切换到该用户后测试:
- 运行
sudo -v:若提示user is not in the sudoers file,说明已成功禁止 - 运行
sudo ls /root:应直接报错退出,不弹密码提示 - 再次执行
sudo -l:会显示拒绝访问,而非列出命令列表
额外加固建议
仅移除授权还不够,防止绕过:
- 检查
/etc/sudoers中是否存在宽泛规则,例如NOPASSWD: ALL或通配符命令,这类配置本身就有风险,应一并清理或收紧 - 确保
/etc/sudoers权限为440、属主为root:root,防止未授权修改:ls -l /etc/sudoers - 禁用危险命令别名(如
alias sudo='')不是真正禁止,只是干扰终端行为,不影响脚本或直接调用,不推荐依赖











