近期项目上服务器做了漏洞扫描,扫描结果服务器普遍openssh版本过低,存在用户枚举漏洞(CVE-2018-15473)的问题,由于服务器过多,通过编译升级工作量过大,并且容易出错,所以就用生成更新RPM包,通过RPM包的方式来升级,具体操作过程记录如下(一定要在测试环境测试,不要直接到生产环境做升级操作,最好把telnet服务器配置启动,防止ssh升级失败,导致无法链接服务器,给自己多留条后路还是有必要的;切记、切记、切记):
创建Openssh RPM升级包
一、环境介绍:
System Version:CentOS 6.8 64bit
Openssh Version:OpenSSH_5.3p1(系统默认版本)
Openssh Version:OpenSSH_8.7p1(升级目标版本)
二、安装依赖包(由于公网yum源大多都已没有版本6的源,所以这里直接挂在的镜像配置的本地源)
yum install -y rpm-build gcc zlib-devel openssl-devel per-devel pam-devel
三、创建目录并下载源码包
mkdir -p ~/rpmbuild/{SOURCES,SPECS}
cd ~/rpmbuild/SOURCES/
wget https://cloudflare.cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-8.7p1.tar.gz
wget https://files-cdn.cnblogs.com/files/leaus/x11-ssh-askpass-1.2.4.1.tar.gz
四、更改源码相关配置数据
解压openssh源码包,并调整openssh.spec配置文件
tar xf openssh-8.7p1.tar.gz
cd openssh-8.7p1/contrib/redhat/
sed -i -e 's#%global no_x11_askpass 0#%global no_x11_askpass 1#g' -e 's#%global no_gnome_askpass 0#%global no_gnome_askpass 1#g' -e 's@BuildRequires: openssl-devel < 1.1@#BuildRequires: openssl-devel < 1.1@g' openssh.spec
复制openssh.spec到SPECS目录,并重新打包openssh包
cp openssh.spec ~/rpmbuild/SPECS/
cd ~/rpmbuild/SOURCES
rm -f openssh-8.7p1.tar.gz
tar zcf openssh-8.7p1.tar.gz openssh-8.7p1
rm -rf openssh-8.7p1
五、build生成RPM包
cd ~/rpmbuild/SPECS/
rpmbuild -ba openssh.spec
执行成功的返回结果如下:
查看生成的RPM包
六、打包归档
cd ~/rpmbuild/RPMS/x86_64
mkdir ~/openssh_centos6
cp openssh-* ~/openssh8.7_centos6
cd ~
tar zcf openssh8.7_centos6.tar.gz openssh8.7_centos6
下载保存,上传至需要更新的服务器节点安装即可
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
更新服务器Openssh操作
一、上传更新包openssh8.7_centos.tar.gz至服务器
二、备份ssh相关配置文件
mkdir ~/sshbak
cp -rp /etc/ssh ~/sshbak
cp -rp /etc/pam.d/sshd ~/sshbak
三、安装更新包(执行升级操作前,可以多开几个session连接,备用)
tar xf openssh8.7_centos6.tar.gz
cd openssh8.7_centos6
rpm -Uvh *.rpm
四、还原配置文件,并修改相关配置项
cat ~/sshbak/ssh/sshd_config > /etc/ssh/sshd_config
cat ~/sshbak/sshd > /etc/pam.d/sshd
sed -i -e 's/#PermitRootLogin/PermitRootLogin/g' -e 's/GSSAPIAuthentication/#GSSAPIAuthentication/g' /etc/ssh/sshd_config
原配置文件中PermitRootLogin yes配置项模式是注释状态,需要将行首的#去掉,开启该配置项,否则ssh连接的时候即便使用正确的密码,也无法验证通过;
GSSAPIAuthentication配置项注释掉,是为了缩短ssh连接等待时间。
五、重启ssh服务
service sshd restart
六、打开新的session链接,测试服务器ssh连接(不要关闭当前ssh连接,验证成功之后再断开)。
本文仅供大家参考,如有疑问,欢迎指正交流。