如何在 Linux 上更新 sudo 版本如何在 Linux 上更新 sudo 版本如何在 Linux 上更新 sudo 版本如何在 Linux 上更新 sudo 版本
  • 文章
  • 正则表达式
    • 工具
  • 登录
找到的结果: {phrase} (显示: {results_count} 共: {results_count_total})
显示: {results_count} 共: {results_count_total}

加载更多搜索结果...

搜索范围
模糊匹配
搜索标题
搜索内容
发表 admin at 2025年2月28日
类别
  • 未分类
标签

如何在 Linux 上更新 sudo 版本

问题:我了解到sudo命令中发现了一个严重的安全漏洞,我想立即将sudo升级到最新版本以修复我的Linux系统上的漏洞。如何更新 [插入您的 Linux 发行版] 上的 sudo 版本?

在 Linux 上,sudo 命令(“substitute user do”或“superuser do”的缩写)旨在允许用户使用另一个用户(最常见的是超级用户“root”)的访问能力来运行程序。 sudo 通常用于为选定的用户提供 Linux 系统上的管理控制权。尽管 sudo 具有防止误用的内置机制(例如安全策略、输入/输出日志记录),但 sudo 命令中任何漏洞的潜在影响仍然非常高。

例如,在 sudo 中发现的最新堆缓冲区溢出漏洞 (CVE-2021-3156) 可以触发权限提升,并允许任何非特权用户(不在 sudoers 列表中,甚至 nobody 中的用户)绕过密码身份验证并获得 root 访问权限。一旦低级别服务帐户通过暴力攻击被破坏,该漏洞很容易被利用作为第二阶段攻击。

由于大多数 Linux 发行版默认都提供 sudo,因此 sudo 中的任何漏洞很可能会直接影响您。

如何检查您的 sudo 是否存在漏洞 (CVE-2021-3156)

这里我介绍如何检查您的 sudo 是否容易受到最新的堆缓冲区溢出漏洞 (CVE-2021-3156) 的影响。虽然该指令非常针对此漏洞,但可以根据相应的 CVE 漏洞披露轻松针对任何其他 sudo 漏洞进行调整。

方法一:检查sudo版本

您可以使用以下命令检查 sudo 的版本,并将其与受影响的版本进行比较。


$ sudo --version

受 CVE-2021-3156 影响的 sudo 版本:

  • 从 1.8.2 到 1.8.31p2 的所有旧版 sudo

  • sudo 从 1.9.0 到 1.9.5p1 的所有稳定版本

方法二:通过命令行测试CVE-2021-3156漏洞:

仅从 sudo 版本来看,您可能无法判断 sudo 是否存在漏洞,因为补丁可以向后移植。更可靠的方法是直接测试漏洞。要测试您的 sudo 是否受到堆缓冲区溢出漏洞的影响,您可以使用以下命令行。

首先以非 root 用户身份登录 Linux 系统,然后运行:


$ sudoedit -s /

如果您的 sudo 容易受到攻击,它将显示一条错误消息,内容为“sudoedit: /: 不是常规文件”

如果您的 sudo 已修补,它将显示一条以 usage 开头的使用消息:

更新受支持的 Linux 发行版上的 sudo 版本

一旦您发现您的 sudo 受到已知漏洞的影响,您应该立即更新 sudo。最简单的方法当然是使用 Linux 系统的默认包管理器。但是,此方法仅适用于您的 Linux 发行版尚未达到生命周期 (EOL) 的情况。如果您的 Linux 发行版因其支持生命周期已过期而不再维护,则存储库将不会使用安全补丁进行更新。在这种情况下,您无法使用包管理器更新 sudo,而需要手动更新,如下所述。

这里我假设你的Linux系统仍然受支持。在更新 sudo 之前,一个可选步骤是检查 sudo 软件包的更改日志,以确认 sudo 软件包已针对已知漏洞进行了修补。在此示例中,考虑的漏洞是 CVE-2021-3156。如果您将升级 sudo 作为定期维护的一部分,则可以跳过检查更改日志。

在 Ubuntu、Debian 或 Linux Mint 上更新 sudo:

要在 DEB 包的更新日志中检查 sudo 的漏洞补丁:


$ sudo apt update; apt changelog sudo | grep CVE-2021-3156

    - debian/patches/CVE-2021-3156-pre1.patch: check lock record size in
    - debian/patches/CVE-2021-3156-pre2.patch: sanity check size when
    - debian/patches/CVE-2021-3156-1.patch: reset valid_flags to
    - debian/patches/CVE-2021-3156-2.patch: add sudoedit flag checks in
    - debian/patches/CVE-2021-3156-3.patch: fix potential buffer overflow
    - debian/patches/CVE-2021-3156-4.patch: fix the memset offset when
    - debian/patches/CVE-2021-3156-5.patch: don't assume that argv is

一旦您确认补丁可用,请继续更新 sudo:


$ sudo apt update; sudo apt --only-upgrade install sudo

请注意,即使更新成功后,sudo 版本也可能保持不变或受影响的版本之一。放心。这只是因为漏洞补丁通常只是向后移植到现有的 sudo 版本。因此,为了验证补丁是否已成功应用,建议针对该漏洞测试 sudo,如前所述。

在 Fedora 或 CentOS 上更新 sudo:

在 RPM 包的更新日志中检查 sudo 的漏洞补丁:


$ repoquery --changelog sudo | grep CVE-2021-3156

Fedora 33 openh264 (From Cisco) - x86_64        3.6 kB/s | 3.2 kB     00:00    
Fedora Modular 33 - x86_64                      952 kB/s | 1.5 MB     00:01    
Fedora Modular 33 - x86_64 - Updates            1.5 MB/s | 1.5 MB     00:01    
Fedora 33 - x86_64 - Updates                    2.0 MB/s |  10 MB     00:05    
Fedora 33 - x86_64                              1.3 MB/s |  15 MB     00:10    
RPM Fusion for Fedora 33 - Free - Updates       1.1 MB/s | 414 kB     00:00    
RPM Fusion for Fedora 33 - Free                 1.3 MB/s | 964 kB     00:00    
- fixed CVE-2021-3156 sudo: Heap buffer overflow in argument parsing

确认补丁存在后,继续更新 sudo:


$ sudo dnf update sudo

请注意,即使更新成功后,sudo 版本也可能保持不变或受影响的版本之一。放心。这是因为漏洞补丁通常只是反向移植到现有的 sudo 版本。要仔细检查这一点,如前所述,针对该漏洞重新测试 sudo 始终是一个好主意。

如果您的 CentOS 或 Fedora 系统已达到 EOL,您将需要手动更新 sudo,如下所述。

更新不受支持的 Linux 发行版上的 sudo 版本

如果您运行的是已达到 EOL 且不受支持的旧版 Linux 发行版(例如 CentOS 6、Ubuntu 17.04),那么不幸的是,您只能靠自己来应用安全补丁。对于某些Linux发行版,至少可以从官方网站下载最新稳定版本的sudo二进制包。例如,他们为不受支持的 RHEL/CentOS 5 和 6 提供了最新 sudo 的 RPM 包。

如果预构建的二进制包不可用,您可以从源代码构建最新的稳定版本(截至目前为 1.9.5p2)sudo,然后手动安装它。您还可以考虑使用 CheckInstall 从源代码构建 DEB/RPM 包。

下面介绍如何从源代码手动构建和安装 sudo。

对于 Ubuntu、Debian 或 Linux Mint:


$ sudo apt install make gcc
$ wget https://www.sudo.ws/dist/sudo-1.9.5p2.tar.gz
$ tar -xf sudo-1.9.5p2.tar.gz
$ cd sudo-1.9.5p2
$ ./configure --prefix=/usr
$ make
$ sudo make install

对于 CentOS 或 Fedora:


$ sudo dnf install make gcc
$ wget https://www.sudo.ws/dist/sudo-1.9.5p2.tar.gz
$ tar -xf sudo-1.9.5p2.tar.gz
$ cd sudo-1.9.5p2
$ ./configure --prefix=/usr
$ make
$ sudo make install

安装后,验证 sudo 是否是最新的:


$ sudo --version

Sudo version 1.9.5p2
Sudoers policy plugin version 1.9.5p2
Sudoers file grammar version 48
Sudoers I/O plugin version 1.9.5p2
Sudoers audit plugin version 1.9.5p2
©2015-2025 艾丽卡 support@alaica.com