Sudo 的全称是“superuserdo”,它是Linux系统管理指令,允许用户在不需要切换环境的前提下以其它用户的权限运行应用程序或命令,通常是以 root 用户身份运行命令,以减少 root 用户的登录和管理时间,同时提高安全性。该漏洞是 sudo安全策略绕过问题,可导致恶意用户或程序在目标 Linux 系统上以 root 身份执行任意命令,即使 “sudoers configuration” 明确禁止该 root访问权限也不例外。
但是有个Sudo bug 可导致 Linux和macOS 普通用户获得 root 权限,该漏洞存在于1.7.1至1.8.25p1版本中,但是1.8.26到1.8.30的版本可能会被滥用,因为它们包含了EOF处理该漏洞的变化。Sudo 1.7.1是在2009年4月19日发布的,而第一个补丁版本(1.8.26)是在2019年9月17日发布的,所以这个bug大约存在了10年之久。
为此我们可以升级当前sudo版本至sudo-1.8.31。
开始
1、查看最开始的版本为:
linuxidc@linuxidc:~/www.linuxidc.com$ sudo --version
Sudo 版本 1.8.21p2
Sudoers 策略插件版本 1.8.21p2
Sudoers 文件语法版本 46
Sudoers I/O plugin version 1.8.21p2
2、升级sudo的版本
下载最新安装包(1.8.31)
linuxidc@linuxidc:~/www.linuxidc.com$ wget http://www.sudo.ws/dist/sudo-1.8.31.tar.gz
3、编译升级sudo的版本
linuxidc@linuxidc:~/www.linuxidc.com/sudo-1.8.31$ sudo make install
linuxidc@linuxidc:~/www.linuxidc.com/sudo-1.8.31$ ./configure
configure: Configuring Sudo version 1.8.31
checking for gcc... gcc
checking whether the C compiler works... yes
checking for C compiler default output file name... a.out
checking for suffix of executables...
checking whether we are cross compiling... no
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
checking whether gcc accepts -g... yes
checking for gcc option to accept ISO C89... none needed
checking how to run the C preprocessor... gcc -E
checking for grep that handles long lines and -e... /bin/grep
checking for egrep... /bin/grep -E
checking for ANSI C header files... yes
linuxidc@linuxidc:~/www.linuxidc.com/sudo-1.8.31$ make
for d in lib/util plugins/group_file plugins/sudoers plugins/system_group src include doc examples; do \
(cd $d && exec make all) && continue; \
exit $?; \
done
make[1]: 进入目录“/home/linuxidc/www.linuxidc.com/sudo-1.8.31/lib/util”
/bin/bash ../../libtool --tag=disable-static --mode=compile gcc -c -o digest.lo -I../../include -I../.. -I. -I../.. -D_PATH_SUDO_CONF=\"/etc/sudo.conf\" -DZLIB_CONST -D_FORTIFY_SOURCE=2 -g -O2 -fvisibility=hidden -fPIE -fstack-protector-strong ./digest.c
4、安装
linuxidc@linuxidc:~/www.linuxidc.com/sudo-1.8.31$ sudo make install
[sudo] linuxidc 的密码:
if test -d ./.hg && cd .; then \
if hg log --style=changelog -r "sort(branch(.) or follow(), -date)" > ChangeLog.tmp; then \
mv -f ChangeLog.tmp ChangeLog; \
else \
rm -f ChangeLog.tmp; \
fi; \
elif test -d ./.git && cd .; then \
./log2cl.pl -b master > ChangeLog; \
else \
echo "ChangeLog data not available" > ChangeLog; \
fi
for d in lib/util plugins/group_file plugins/sudoers plugins/system_group src include doc examples; do \
(cd $d && exec make pre-install) && continue; \
exit $?; \
done
5.查看升级后的版本
linuxidc@linuxidc:~/www.linuxidc.com$ sudo --version
Sudo 版本 1.8.31
Sudoers 策略插件版本 1.8.31
Sudoers 文件语法版本 46
Sudoers I/O plugin version 1.8.31
OK,就这样。