公共服务器中如何彻底关闭用户Su和Sudo权限,限制提权操作?

2026-04-30 14:292阅读0评论SEO资源
  • 内容介绍
  • 相关推荐

本文共计924个文字,预计阅读时间需要4分钟。

公共服务器中如何彻底关闭用户Su和Sudo权限,限制提权操作?

在公共服务器上,禁止使用用户的 `su` 和 `sudo` 提权权限。核心目标是防止普通用户获得更高权限、规避审计、执行未授权操作。这并非简单的开关操作,而是分层控制:

彻底禁用 su 切换 root 或其他用户

默认情况下,任何知道目标用户密码的人都可通过 su - 切换。在公共服务器上必须阻断这一路径:

  • 编辑 /etc/pam.d/su,添加两行强制限制:
    auth [success=ignore default=die] pam_succeed_if.so user = root quiet
    auth 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 里的某一行——用户可能通过所属组(如 sudowheel)间接获得权限。需多点清理:

  • 确认用户未加入提权组:
    groups username 查看输出是否含 sudowheeladmin 等敏感组;若有,立即移除:
    sudo deluser username sudo
    sudo 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.

关闭提权相关命令的可执行权限(可选强化)

对高风险二进制文件做最小权限限制,防绕过:

  • sudosupkexec 设为仅 root 可执行:
    sudo chmod 700 /usr/bin/sudo /bin/su /usr/bin/pkexec
  • 检查是否存在非常规提权路径,如:
    find /usr -name "*sudo*" -type f -executable 2>/dev/null
    find /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.logjournalctl _COMM=sudo,确认无近期成功 sudosu 记录。
  • 设置 shell 为受限模式(如 rbash)或使用 scponly 等专用 shell,进一步限制命令执行范围。

本文共计924个文字,预计阅读时间需要4分钟。

公共服务器中如何彻底关闭用户Su和Sudo权限,限制提权操作?

在公共服务器上,禁止使用用户的 `su` 和 `sudo` 提权权限。核心目标是防止普通用户获得更高权限、规避审计、执行未授权操作。这并非简单的开关操作,而是分层控制:

彻底禁用 su 切换 root 或其他用户

默认情况下,任何知道目标用户密码的人都可通过 su - 切换。在公共服务器上必须阻断这一路径:

  • 编辑 /etc/pam.d/su,添加两行强制限制:
    auth [success=ignore default=die] pam_succeed_if.so user = root quiet
    auth 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 里的某一行——用户可能通过所属组(如 sudowheel)间接获得权限。需多点清理:

  • 确认用户未加入提权组:
    groups username 查看输出是否含 sudowheeladmin 等敏感组;若有,立即移除:
    sudo deluser username sudo
    sudo 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.

关闭提权相关命令的可执行权限(可选强化)

对高风险二进制文件做最小权限限制,防绕过:

  • sudosupkexec 设为仅 root 可执行:
    sudo chmod 700 /usr/bin/sudo /bin/su /usr/bin/pkexec
  • 检查是否存在非常规提权路径,如:
    find /usr -name "*sudo*" -type f -executable 2>/dev/null
    find /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.logjournalctl _COMM=sudo,确认无近期成功 sudosu 记录。
  • 设置 shell 为受限模式(如 rbash)或使用 scponly 等专用 shell,进一步限制命令执行范围。