公共服务器中如何彻底关闭用户Su和Sudo权限,限制提权操作?
- 内容介绍
- 相关推荐
本文共计924个文字,预计阅读时间需要4分钟。
在公共服务器上,禁止使用用户的 `su` 和 `sudo` 提权权限。核心目标是防止普通用户获得更高权限、规避审计、执行未授权操作。这并非简单的开关操作,而是分层控制:
彻底禁用 su 切换 root 或其他用户
默认情况下,任何知道目标用户密码的人都可通过 su - 切换。在公共服务器上必须阻断这一路径:
- 编辑
/etc/pam.d/su,添加两行强制限制:auth [success=ignore default=die] pam_succeed_if.so user = root quietauth required pam_deny.so
这样即使输入正确密码,su也会直接拒绝(除 root 自身外,但 root 本就不该直接登录)。 - 更稳妥的做法是禁用所有非 wheel 组成员的
su权限:
在同一文件中注释掉原有pam_wheel.so行,改为:auth required pam_wheel.so deny group=users
然后确保所有普通用户都不在wheel组中(gpasswd -d username wheel)。 - 额外加固:删除或重命名
/bin/su(仅限确定无任何合法运维依赖时),或设为仅 root 可执行:chmod 700 /bin/su;同时检查/usr/bin/su是否存在并同步处理。
精准清除 sudo 执行能力
不能只删 /etc/sudoers 里的某一行——用户可能通过所属组(如 sudo 或 wheel)间接获得权限。需多点清理:
- 确认用户未加入提权组:
groups username查看输出是否含sudo、wheel、admin等敏感组;若有,立即移除:sudo deluser username sudosudo gpasswd -d username wheel - 检查
/etc/sudoers及/etc/sudoers.d/下所有文件,删除或注释掉该用户的显式授权行,例如:# username ALL=(ALL) ALL# %devteam ALL=(root) /usr/bin/systemctl restart nginx - 运行
sudo -l -U username验证结果:应返回User username is not allowed to run sudo on hostname.
关闭提权相关命令的可执行权限(可选强化)
对高风险二进制文件做最小权限限制,防绕过:
- 将
sudo、su、pkexec设为仅 root 可执行:sudo chmod 700 /usr/bin/sudo /bin/su /usr/bin/pkexec - 检查是否存在非常规提权路径,如:
find /usr -name "*sudo*" -type f -executable 2>/dev/nullfind /opt -name "doas" -o -name "gosu" 2>/dev/null
对非必需工具统一移除执行位或卸载。
配套安全收口措施
禁用只是起点,还需堵住旁路和残留风险:
- 禁止 root 远程 SSH 登录:
编辑/etc/ssh/sshd_config,设PermitRootLogin no,重启sshd。 - 停用密码认证(若已配 SSH 密钥):
设PasswordAuthentication no,避免暴力破解弱口令后尝试su。 - 审计历史提权行为:
检查/var/log/auth.log或journalctl _COMM=sudo,确认无近期成功sudo或su记录。 - 设置 shell 为受限模式(如
rbash)或使用scponly等专用 shell,进一步限制命令执行范围。
本文共计924个文字,预计阅读时间需要4分钟。
在公共服务器上,禁止使用用户的 `su` 和 `sudo` 提权权限。核心目标是防止普通用户获得更高权限、规避审计、执行未授权操作。这并非简单的开关操作,而是分层控制:
彻底禁用 su 切换 root 或其他用户
默认情况下,任何知道目标用户密码的人都可通过 su - 切换。在公共服务器上必须阻断这一路径:
- 编辑
/etc/pam.d/su,添加两行强制限制:auth [success=ignore default=die] pam_succeed_if.so user = root quietauth required pam_deny.so
这样即使输入正确密码,su也会直接拒绝(除 root 自身外,但 root 本就不该直接登录)。 - 更稳妥的做法是禁用所有非 wheel 组成员的
su权限:
在同一文件中注释掉原有pam_wheel.so行,改为:auth required pam_wheel.so deny group=users
然后确保所有普通用户都不在wheel组中(gpasswd -d username wheel)。 - 额外加固:删除或重命名
/bin/su(仅限确定无任何合法运维依赖时),或设为仅 root 可执行:chmod 700 /bin/su;同时检查/usr/bin/su是否存在并同步处理。
精准清除 sudo 执行能力
不能只删 /etc/sudoers 里的某一行——用户可能通过所属组(如 sudo 或 wheel)间接获得权限。需多点清理:
- 确认用户未加入提权组:
groups username查看输出是否含sudo、wheel、admin等敏感组;若有,立即移除:sudo deluser username sudosudo gpasswd -d username wheel - 检查
/etc/sudoers及/etc/sudoers.d/下所有文件,删除或注释掉该用户的显式授权行,例如:# username ALL=(ALL) ALL# %devteam ALL=(root) /usr/bin/systemctl restart nginx - 运行
sudo -l -U username验证结果:应返回User username is not allowed to run sudo on hostname.
关闭提权相关命令的可执行权限(可选强化)
对高风险二进制文件做最小权限限制,防绕过:
- 将
sudo、su、pkexec设为仅 root 可执行:sudo chmod 700 /usr/bin/sudo /bin/su /usr/bin/pkexec - 检查是否存在非常规提权路径,如:
find /usr -name "*sudo*" -type f -executable 2>/dev/nullfind /opt -name "doas" -o -name "gosu" 2>/dev/null
对非必需工具统一移除执行位或卸载。
配套安全收口措施
禁用只是起点,还需堵住旁路和残留风险:
- 禁止 root 远程 SSH 登录:
编辑/etc/ssh/sshd_config,设PermitRootLogin no,重启sshd。 - 停用密码认证(若已配 SSH 密钥):
设PasswordAuthentication no,避免暴力破解弱口令后尝试su。 - 审计历史提权行为:
检查/var/log/auth.log或journalctl _COMM=sudo,确认无近期成功sudo或su记录。 - 设置 shell 为受限模式(如
rbash)或使用scponly等专用 shell,进一步限制命令执行范围。

