通过配置sudoers限制shell命令并启用pam_wheel.so+su_wheel_only,可双重禁止交互式提权:sudo -i等被sudoers拦截,sudo su则因su被pam拒绝而失败。

Linux 中不能直接“禁止用户通过 sudo 切换 root”,因为 sudo 本身不提供“切换用户”的原生功能;它只允许以指定用户身份执行命令。所谓“用 sudo 切换 root”,实际是以下几种常见操作的误称:
• sudo su 或 sudo su - —— 本质是用当前用户权限运行 su 进程,再由 su 向 root 验证密码;
• sudo -i 或 sudo -s —— 本质是让 sudo 直接启动 root 的 shell(无需 root 密码,依赖 sudoers 授权);
• sudo bash、sudo /bin/sh 等 —— 同样属于 sudo 启动任意 shell,效果等同于获得交互式 root 权限。
真正要禁止的是:sudo 执行 root shell 或 su 类命令
核心思路不是封 sudo 工具本身,而是限制它能运行哪些命令。关键在 /etc/sudoers 文件配置:
- 删除或注释掉该用户/组的
ALL=(ALL) ALL或ALL=(ALL:ALL) ALL这类宽泛授权 - 显式禁止危险命令,例如在 sudoers 中添加(使用
visudo编辑):Defaults forbidsshellCmnd_Alias SHELLS = /bin/bash, /bin/sh, /bin/zsh, /usr/bin/bash, /usr/bin/sh, /usr/bin/zsh, /bin/ksh, /usr/bin/ksh%wheel ALL = !SHELLS, !/bin/su, !/usr/bin/su, !/usr/bin/sudo - 若仅需执行特定管理任务,应改用最小权限原则:只授权具体命令,如
sudo /usr/sbin/useradd,而非开放 shell
同时必须配合禁用 su 机制(否则 sudo su 仍可绕过)
单独限制 sudo 不够,因为 sudo su 会调用 su 流程,而 su 是否生效取决于 PAM 和 /etc/login.defs。所以务必同步配置:
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
- 编辑
/etc/pam.d/su,启用 wheel 校验:auth required pam_wheel.so use_uid(取消注释或添加) - 在
/etc/login.defs末尾追加:SU_WHEEL_ONLY yes(注意:无空格、无引号、无等号) - 确保目标用户不在
wheel组:gpasswd -d username wheel
验证是否生效
普通用户执行以下命令应全部失败:
-
sudo -i→ 报错 “Sorry, user xxx is not allowed to execute …” -
sudo su -→ 报错 “sudo: su: command not allowed” 或 “Authentication failure”(取决于 sudoers 配置) -
sudo /bin/bash→ 被明确拒绝(若已加入 SHELLS 黑名单)
日志可查 /var/log/secure 或 /var/log/auth.log,搜索 sudo: 和 su: 确认拦截行为。
不复杂但容易忽略:sudo 和 su 是两条独立路径,必须双管齐下才能真正堵住交互式提权入口。










