核心是仅允许 wheel 组执行 sudo 提权:禁用 %sudo 等冗余组授权,显式配置 %wheel all=(all) all,清理用户级规则,设 /bin/su 权限为 0750 且属组 wheel,并禁用 root ssh 登录。

限制非 wheel 组用户执行权限提升操作,核心是关闭默认的 sudo 全局授权,并只允许特定组(如 wheel)通过 /etc/sudoers 获得提权能力。这不是“禁止谁”,而是“只允许谁”——Linux 权限控制的本质是白名单机制。
禁用默认 sudo 用户组授权
很多发行版(如 CentOS/RHEL)默认启用 %wheel ALL=(ALL) ALL,但同时也可能保留类似 %sudo ALL=(ALL) ALL 或宽松规则。必须检查并清理冗余配置:
- 运行
sudo grep -E '^(%sudo|%wheel|ALL)' /etc/sudoers /etc/sudoers.d/* 2>/dev/null查看所有生效的组级规则 - 注释或删除所有非 wheel 的组授权行,例如:
%sudo ALL=(ALL) ALL、%admin ALL=(ALL) ALL - 确认
/etc/sudoers文件末尾存在#includedir /etc/sudoers.d,否则子目录配置不会加载
显式启用 wheel 组且仅限该组
确保只有 wheel 组成员能使用 sudo,且规则位置靠前(sudoers 自上而下匹配):
- 用
sudo visudo编辑主配置,在文件靠前位置添加(不要放在注释后或空行后):%wheel ALL=(ALL) ALL - 若需免密执行,改为:
%wheel ALL=(ALL) NOPASSWD: ALL(注意NOPASSWD:后有空格) - 保存退出后,立即验证:新创建的非 wheel 用户执行
sudo -l应提示 “not in the sudoers file”
剥离非 wheel 用户的 sudo 权限
即使用户已被加入其他组,只要没在 sudoers 中被明确授权,就不会获得提权能力。但需主动清理残留授权:
- 检查用户是否被单独授权:
sudo grep '^username\|^username' /etc/sudoers /etc/sudoers.d/* 2>/dev/null - 移除类似
alice ALL=(ALL) ALL这类用户级规则 - 确认用户确实不在 wheel 组:
groups alice;如误加,执行sudo gpasswd -d alice wheel - 无需修改
/etc/passwd或改 UID,这些操作危险且不必要
补充加固:防止绕过 sudo 的提权方式
仅控 sudo 不够,还需封堵常见替代路径:
- 禁用
su命令对非 wheel 用户的访问:将/bin/su权限设为0750,属组设为 wheel:sudo chown root:wheel /bin/su && sudo chmod 0750 /bin/su - 检查是否有可被滥用的 setuid 程序(如
find / -perm -4000 2>/dev/null),非必要不保留自定义 setuid 二进制 - 确保 SSH 禁用 root 登录:
PermitRootLogin no在/etc/ssh/sshd_config中已生效











