一、问题背景
目前经过安全部门漏洞扫描设备扫描出CentOS系统存在OpenSSH相关漏洞,现修复建议是OpenSSH过低版本升级至9.6p1版本,但是升级过程中其他依赖也需安装,例如OpenSSL、zlib等。
二、下载安装包
需要下载对应版本安装包后,上传至服务器上(如服务器可以访问互联网,则可以使用wget方式下载)
1、OpenSSH-9.6p1版本
下载地址:Index of /pub/OpenBSD/OpenSSH/portable/
2、 OpenSSL-1.1.1q版本
下载地址:[ 1.1.1 ] - /source/old/1.1.1/index.html
3、zlib 1.3.1版本
下载地址:zlib Home Site
4、 pam-1.1.8-23和pam-devel-1.1.8-23版本
RPM resource pam下载地址:RPM resource pam=
RPM resource pam-devel(x86-64)=
三、安装telnet
注:在进行openssh升级之前,建议安装telnet服务,以防止在升级过程中一旦出现中断现象,服务器还可以通过telnet方式登录。
1、下载telnet-client、telnet-server、xinetd安装包
注:如服务器可以访问互联网,则可以使用wget方式下载
RPM resource telnetTelnet-client下载地址:RPM resource telnet
Telnet-server下载地址:RPM resource telnet-server(x86-64)
RPM resource xinetdXinetd下载地址:RPM resource xinetd
2、安装telnet-client、telnet-server、xinetd
[root@20240322-1149-test1 ~]# rpm -ivh xinetd-2.3.15-14.el7.x86_64.rpm
[root@20240322-1149-test1 ~]# rpm -ivh telnet-0.17-65.el7_8.x86_64.rpm
[root@20240322-1149-test1 ~]# rpm -ivh telnet-server-0.17-65.el7_8.x86_64.rpm
3、查看是否安装成功
[root@20240322-1149-test1 ~]# rpm -qa | grep telnet
[root@20240322-1149-test1 ~]# rpm -qa | grep xinetd
4、启动telnet依赖的xinetd服务,并查看是否正常启
[root@20240322-1149-test1 ~]# systemctl start xinetd
[root@20240322-1149-test1 ~]# ps -ef | grep xinet
5、编辑telnet文件
如果没有telnet文件也没关系,vim直接创建并编辑即可
[root@20240322-1149-test1 ~]# vim /etc/xinetd.d/telnet
添加:
service telnet
{
flags = REUSE
socket_type = stream
wait = no
user = root
server =/usr/sbin/in.telnetd
log_on_failure += USERID
disable = no
}
6、启动telnet服务并设置开机自启
[root@20240322-1149-test1 ~]# systemctl start telnet.socket
[root@20240322-1149-test1 ~]# systemctl enable telnet.socket
[root@20240322-1149-test1 ~]# systemctl status telnet.socket
7、防火墙放行telnet服务的23端口
[root@20240322-1149-test1 ~]# firewall-cmd --zone=public --add-port=23/tcp --permanent
[root@20240322-1149-test1 ~]# firewall-cmd --reload #刷新防火墙策略
8、通过telnet登录测试
登录失败,这个为正常现象,因为系统默认禁止root用户使用telnet登录终端,我们在日志中查看登录使用的终端并在/etc/securetty中解除禁止即可
9、 telnet登录问题解决方法
查看被禁止登录的终端
[root@20240322-1149-test1 ~]# tail /var/log/secure
编辑/etc/securetty 将禁止登录的终端添加进来即可
[root@20240322-1149-test1 ~]# vim /etc/securetty
10、再次使用telnet登录测试
登录成功
四、卸载老版本OpenSSH、OpenSSL
我们升级OpenSSH采用的是卸载主机中老版本的OpenSSH,再安装新版本的OpenSSH,依此来达成升级并解决漏洞的问题。
1、查看系统中安装的OpenSSH、OpenSSL
[root@20240322-1149-test1 ~]# rpm -qa openssh*
[root@20240322-1149-test1 ~]# rpm -qa openssl*
2、备份/etc/pam.d/sshd
[root@20240322-1149-test1 ~]# mv /etc/pam.d/sshd /etc/pam.d/sshd-bak
3、卸载系统中安装的OpenSSH、OpenSSL
在执行这步时需要确认telnet已经安装并且可以正常通过telnet登录系统
[root@20240322-1149-test1 ~]# rpm -e --nodeps openssh
[root@20240322-1149-test1 ~]# rpm -qa openssh
[root@20240322-1149-test1 ~]# rpm -e --nodeps openssl
[root@20240322-1149-test1 ~]# rpm -qa openssl
五、安装新版本OpenSSH、OpenSSL
1、安装openssl
#解压openssl安装包
[root@20240322-1149-test1 ~]# tar zxvf openssl-1.1.1q.tar.gz
#切换到安装目录
[root@20240322-1149-test1 ~]# cd openssl-1.1.1q/
#进行初始化
[root@20240322-1149-test1 openssl-1.1.1q]# ./config -Wl,-rpath=/usr/lib64 --prefix=/usr/local/openssl --openssldir=/usr/local/openssl --libdir=/usr/lib64
#执行安装
[root@20240322-1149-test1 openssl-1.1.1q]# make -j 4 && make install
#创建软链接
[root@20240322-1149-test1 openssl-1.1.1q]# ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl
#安装完成,查看版本
[root@20240322-1149-test1 openssl-1.1.1q]# openssl version
2、安装zlib
#解压安装包
[root@20240322-1149-test1 ~]# tar zxvf zlib-1.3.1.tar.gz
#进入安装目录
[root@20240322-1149-test1 ~]# cd zlib-1.3.1/
#添加prefix路径
[root@20240322-1149-test1 zlib-1.3.1]# ./configure --prefix=/usr/local/zlib
#编译并安装
[root@20240322-1149-test1 zlib-1.3.1]# make && make install
#写入动态库路径
[root@20240322-1149-test1 zlib-1.3.1]# echo "/usr/local/zlib/lib/" >> /etc/ld.so.conf
[root@20240322-1149-test1 zlib-1.3.1]# ldconfig –v
#查看软链接
[root@20240322-1149-test1 zlib-1.3.1]# ll /lib64/libz.*
#进入编译目录下
[root@20240322-1149-test1 zlib-1.3.1]# cd /usr/local/zlib/lib/
#复制执行目录到/lib64下
[root@20240322-1149-test1 lib]# cp libz.so.1.3.1 /lib64/libz.so.1.3.1
#进入lib64目录下创建软链接
[root@20240322-1149-test1 lib]# cd /lib64
[root@20240322-1149-test1 lib64]# ln -snf libz.so.1.3.1 /lib64/libz.so
[root@20240322-1149-test1 lib64]# ln -snf libz.so.1.3.1 /lib64/libz.so.1
3、安装pam、pam-devel
#将安装包放置在/usr/local下并执行安装命令
[root@20240322-1149-test1 ~]# cd /usr/local/
[root@20240322-1149-test1 ~]# rpm -ivh pam-1.1.8-23.el7.x86_64.rpm
[root@20240322-1149-test1 ~]# rpm -ivh pam-devel-1.1.8-23.el7.x86_64.rpm
4、安装openssh
#解压安装包
[root@20240322-1149-test1 ~]# tar -xzvf openssh-9.6p1.tar.gz
#进入openssh安装目录
[root@20240322-1149-test1 ~]# cd openssh-9.6p1
#编译安装
[root@20240322-1149-test1 openssh-9.6p1]# ./configure --prefix=/usr/ --sysconfdir=/etc/ssh --with-pam --with-md5-passwords --with-tcp-wrappers --with-ssl-dir=/usr/local/openssl --with-zlib=/usr/local/zlib --mandir=/usr/share/man
#执行安装
[root@20240322-1149-test1 openssh-9.6p1]# make && make install
#授权
[root@20240322-1149-test1 openssh-9.6p1]# chmod 600 /etc/ssh/ssh_host_rsa_key
[root@20240322-1149-test1 openssh-9.6p1]# chmod 600 /etc/ssh/ssh_host_ecdsa_key
[root@20240322-1149-test1 openssh-9.6p1]# chmod 600 /etc/ssh/ssh_host_ed25519_key
#相关操作配置
[root@20240322-1149-test1 openssh-9.6p1]# cp -p contrib/redhat/sshd.init /etc/init.d/sshd
[root@20240322-1149-test1 openssh-9.6p1]# chmod +x /etc/init.d/sshd
[root@20240322-1149-test1 openssh-9.6p1]# echo "PermitRootLogin yes" >> /etc/ssh/sshd_config
[root@20240322-1149-test1 openssh-9.6p1]# sed -i '/UsePAM no/c\UsePAM yes' /etc/ssh/sshd_config
[root@20240322-1149-test1 openssh-9.6p1]# sed -i '/^Subsystem/c\Subsystem sftp /usr/libexec/sftp-server' /etc/ssh/sshd_config
[root@20240322-1149-test1 openssh-9.6p1]# sed -i '/^SELINUX=enforcing/c\SELINUX=disabled' /etc/selinux/config
[root@20240322-1149-test1 openssh-9.6p1]# mv /etc/pam.d/sshd-bak /etc/pam.d/sshd
#查看更新后版本
[root@20240322-1149-test1 openssh-9.6p1]# ssh –V
#启动sshd服务并设置开机自启
[root@20240322-1149-test1 openssh-9.6p1]# rm -rf /usr/lib/systemd/system/sshd.service
[root@20240322-1149-test1 openssh-9.6p1]# systemctl daemon-reload
[root@20240322-1149-test1 openssh-9.6p1]# systemctl restart sshd
[root@20240322-1149-test1 openssh-9.6p1]# systemctl status sshd
[root@20240322-1149-test1 openssh-9.6p1]# systemctl enable sshd
5、使用ssh登录终端测试