升级OpenSSH可解决以下漏洞:
OpenSSH 用户枚举漏洞(CVE-2018-15919)
OpenSSH 安全漏洞(CVE-2017-15906)
OpenSSH 用户枚举漏洞(CVE-2018-15473)
OpenSSH 命令注入漏洞(CVE-2020-15778)【升级的时候不安装openssh-clients可以解决】
制作OpenSSH的RPM包
升级OpenSSH有两种方式,一种是用源码编译安装,另一种是手动制作RPM包,如果只升级一次的话用编译安装的方式倒也可以,作者这边是要升级报漏洞的多台服务器OpenSSH,做成RPM包来升级的话会更快一点
本文的操作环境是CentOS 7.6,需要升级的环境是服务器上的RHEL 7.6,因为服务器无法连接外网,因此选择在CentOS 上做好RPM包传到RHEL上,亲测可行
各位读者如果同样是CentOS/RHEL 7.6环境的话可以直接下载我做好的RPM包
在写本文时最新的版本是OpenSSH 8.5p1
OpenSSH 8.5
这里从下载源码包到制作RPM包都通过shell脚本来自动执行:
- touch rpmbuild_openssh.sh
- vim rpmbuild_openssh.sh,将下面的代码复制进去
- sh rpmbuild_openssh.sh 8.5
#!/usr/bin/env bash
# @File :rpmbuild_openssh.sh
# @Desc :制作openssh rpm软件包,通过tar包build
openssh_version=$1
#判断是否传入正确的软件包
if [ "${openssh_version}" ] ;then
echo -e "\033[41;37m当前build的openssh版本为: ${openssh_version}\033[0m"
else
echo "常用版本有:8.0, 8.1, 8.2, 8.3, 8.4"
echo
echo -e " 请输入需要build的openssh版本号 示例: \033[36;1m$0 8.4\033[0m"
exit 1
fi
# 安装依赖
function install_dependency() {
yum install -y wget rpm-build zlib-devel openssl-devel gcc perl-devel pam-devel unzip libXt-devel imake gtk2-devel openssl-libs >> /dev/null && sleep 3
}
# 下载软件包
function download_package() {
mkdir -p /root/rpmbuild/{SOURCES,SPECS}
cd /root/rpmbuild/SOURCES
echo -e "\033[34;1m开始下载软件包:openssh-${openssh_version}p1.tar.gz \033[0m"
wget http://ftp.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-${openssh_version}p1.tar.gz >> /dev/null && echo "openssh-${version}p1.tar.gz下载成功..."
if [ $? -ne 0 ]; then
echo "openssh-${openssh_version}p1.tar.gz下载失败...请检查网络环境或版本是否存在"
exit 2
else
echo -e "\033[34;1m开始下载软件包:x11-ssh-askpass-1.2.4.1.tar.gz \033[0m"
wget https://src.fedoraproject.org/repo/pkgs/openssh/x11-ssh-askpass-1.2.4.1.tar.gz/8f2e41f3f7eaa8543a2440454637f3c3/x11-ssh-askpass-1.2.4.1.tar.gz >> /dev/null && echo "x11-ssh-askpass-1.2.4.1.tar.gz下载成功..." && sleep 3
if [ $? -ne 0 ]; then
echo "x11-ssh-askpass-1.2.4.1.tar.gz下载失败...请检查网络环境是否正常"
exit 2
else
tar -xf openssh-${openssh_version}p1.tar.gz && tar -xf x11-ssh-askpass-1.2.4.1.tar.gz
fi
fi
}
# 修改配置文件和build
function config_and_build() {
cp openssh-${openssh_version}p1/contrib/redhat/openssh.spec /root/rpmbuild/SPECS/
sed -i -e "s/%define no_x11_askpass 0/%define no_x11_askpass 1/g" /root/rpmbuild/SPECS/openssh.spec
sed -i -e "s/%define no_gnome_askpass 0/%define no_gnome_askpass 1/g" /root/rpmbuild/SPECS/openssh.spec
sed -i 's/BuildRequires: openssl-devel < 1.1/#&/' /root/rpmbuild/SPECS/openssh.spec
cd /root/rpmbuild/SPECS
echo -e "\033[34;1m开始制作 openssh${openssh_version} 相关rpm软件包 \033[0m"
rpmbuild -ba openssh.spec
if [ $? -eq 0 ]; then
echo -e "\033[34;1mopenssh${openssh_version} 相关rpm软件包制作成功,生成的软件包信息如下: \033[0m"
echo
echo -e "\033[33;1m软件包存放路径:/root/rpmbuild/RPMS/x86_64/ \033[0m" && ls /root/rpmbuild/RPMS/x86_64/
else
echo -e "\033[33;1mopenssh${openssh_version} 相关rpm软件包制作失败,请根据报错信息进行解决,再重新进行编译 \033[0m"
fi
}
function main() {
install_dependency
download_package
config_and_build
}
main
准备升级
制作成功的话页面上会打印出以下内容,一共制作了6个包,一般只需要
openssh-8.5p1-1.el7.x86_64.rpm
openssh-server-8.5p1-1.el7.x86_64.rpm
openssh-clients-8.5p1-1.el7.x86_64.rpm
如果要解决OpenSSH 命令注入漏洞(CVE-2020-15778)的话就不需要openssh-clients
openssh8.5 相关rpm软件包制作成功,生成的软件包信息如下:
软件包存放路径:/root/rpmbuild/RPMS/x86_64/
openssh-8.5p1-1.el7.x86_64.rpm openssh-clients-8.5p1-1.el7.x86_64.rpm
openssh-askpass-8.5p1-1.el7.x86_64.rpm openssh-debuginfo-8.5p1-1.el7.x86_64.rpm
openssh-askpass-gnome-8.5p1-1.el7.x86_64.rpm openssh-server-8.5p1-1.el7.x86_64.rpm
备份配置文件
- mkdir ~/sshbak && cd ~
- cp /etc/pam.d/sshd sshbak/
- cp /etc/ssh/sshd_config sshbak
- 检查一下sshd_config里的PermitRootLogin yes,如果这一项被注释掉或者是no的话需要改成yes,否则无法登录
开始升级
1.停止sshd服务 service sshd stop
2.将做好的三个包放到同一个目录,我是直接放到了/root/
cd /root/rpmbuild/RPMS/x86_64
cp openssh-8.5p1-1.el7.x86_64.rpm ~/
cp openssh-server-8.5p1-1.el7.x86_64.rpm ~/
cp openssh-clients-8.5p1-1.el7.x86_64.rpm ~/
3.卸载旧版本的OpenSSH
rpm -e
rpm -qa | grep openssh--nodeps
4.rpm安装新版本
[root@localhost ~]# rpm -Uvh *.rpm
准备中... ################################# [100%]
正在升级/安装...
1:openssh-8.5p1-1.el7 ################################# [ 33%]
2:openssh-clients-8.5p1-1.el7 ################################# [ 67%]
3:openssh-server-8.5p1-1.el7 ################################# [100%]
5.还原配置文件
[root@localhost ~]# cp sshbak/sshd /etc/pam.d/sshd
cp:是否覆盖"/etc/pam.d/sshd"? y
[root@localhost ~]# cp sshbak/sshd_config /etc/ssh/sshd_config
cp:是否覆盖"/etc/ssh/sshd_config"? y
6.授权并启动
# chmod这一步不执行的话可能无法启动sshd服务
[root@localhost ~]# chmod 600 /etc/ssh/*
[root@localhost ~]# service sshd start
Starting sshd (via systemctl): [ 确定 ]
[root@localhost ~]# ssh -V
OpenSSH_8.5p1, OpenSSL 1.0.2k-fips 26 Jan 2017
升级成功
现在已经升级到了OpenSSH 8.5,如果不需要使用scp的话可以卸载掉openssh-clients,因为OpenSSH 命令注入漏洞(CVE-2020-15778)是由openssh-clients引起的
rpm -e openssh-clients-8.5p1-1.el7.x86_64 --nodeps
Q.E.D.