背景

OpenSSH 9.8之前版本存在安全漏洞,该漏洞源于存在操作系统命令注入漏洞。需要升级openssh版本至9.9

升级方案

查看当前服务器的openssh版本和系统版本

[root@nginx-proxy ~]# ssh -V
OpenSSH_8.0p1, OpenSSL 1.1.1k  FIPS 25 Mar 2021
[root@nginx-proxy openssh-9.9p1]# cat /etc/redhat-release 
Rocky Linux release 8.10 (Green Obsidian)

下载软件包

下载最新的openssh9.9,下载地址:https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/

上传到服务器并解压

[root@nginx-proxy ~]# ls
openssh-9.9p1.tar.gz
[root@nginx-proxy ~]# tar xf openssh-9.9p1.tar.gz 

安装telnet

安装telnet,防止升级过程中出现ssh安装失败问题,推荐一个rpm包下载地址:https://mirrors.zju.edu.cn


#下载telnet-0.17-76.el8.x86_64.rpm,telnet-server-0.17-76.el8.x86_64.rpm,xinetd-2.3.15-25.el8.x86_64.rpm这几个rpm包,其他系统可以到对应的镜像下进行下载,或者搭建本地 yum源进行安装
[root@nginx-proxy ~]# ll
总用量 2192
drwxr-xr-x. 7 1000 1000   12288 9月  19 18:20 openssh-9.9p1
-rw-r--r--. 1 root root 1964864 11月 19 08:13 openssh-9.9p1.tar.gz
-rw-r--r--. 1 root root   72516 11月 19 08:45 telnet-0.17-76.el8.x86_64.rpm
-rw-r--r--. 1 root root   48040 11月 19 08:45 telnet-server-0.17-76.el8.x86_64.rpm
-rw-r--r--. 1 root root  136548 11月 19 08:44 xinetd-2.3.15-25.el8.x86_64.rpm

##开始安装,安装顺序xinetd-->telnet-->telnet-server
[root@nginx-proxy ~]# rpm -ivh xinetd-2.3.15-25.el8.x86_64.rpm
Verifying...                          ################################# [100%]
准备中...                          ################################# [100%]
正在升级/安装...
   1:xinetd-2:2.3.15-25.el8           ################################# [100%]
[root@nginx-proxy ~]# rpm -ivh telnet-0.17-76.el8.x86_64.rpm
Verifying...                          ################################# [100%]
准备中...                          ################################# [100%]
正在升级/安装...
   1:telnet-1:0.17-76.el8             ################################# [100%]
[root@nginx-proxy ~]# rpm -ivh telnet-server-0.17-76.el8.x86_64.rpm 
Verifying...                          ################################# [100%]
准备中...                          ################################# [100%]
正在升级/安装...
   1:telnet-server-1:0.17-76.el8      ################################# [100%]

#查看服务状态
[root@nginx-proxy ~]# systemctl status telnet.socket
● telnet.socket - Telnet Server Activation Socket
   Loaded: loaded (/usr/lib/systemd/system/telnet.socket; disabled; vendor preset: disabled)
   Active: inactive (dead)
     Docs: man:telnetd(8)
   Listen: [::]:23 (Stream)
 Accepted: 0; Connected: 0;

 #设置服务开机自启并马上启动
[root@nginx-proxy ~]# systemctl enable telnet.socket --now
Created symlink /etc/systemd/system/sockets.target.wants/telnet.socket → /usr/lib/systemd/system/telnet.socket.

[root@nginx-proxy ~]# systemctl status telnet.socket
● telnet.socket - Telnet Server Activation Socket
   Loaded: loaded (/usr/lib/systemd/system/telnet.socket; enabled; vendor preset: disabled)
   Active: active (listening) since Tue 2024-11-19 08:49:17 EST; 11s ago
     Docs: man:telnetd(8)
   Listen: [::]:23 (Stream)
 Accepted: 0; Connected: 0;
   CGroup: /system.slice/telnet.socket

11月 19 08:49:17 nginx-proxy systemd[1]: Listening on Telnet Server Activation Socket.

##查看监听端口
[root@nginx-proxy ~]# ss -ntlup|grep 23
udp   UNCONN 0      0          127.0.0.1:323       0.0.0.0:*    users:(("chronyd",pid=775,fd=5))
udp   UNCONN 0      0              [::1]:323          [::]:*    users:(("chronyd",pid=775,fd=6))
tcp   LISTEN 0      128                *:23              *:*    users:(("systemd",pid=1,fd=30)) 

验证登录就好,接下来开始升级工作

编译环境准备

这边可以通过repotrack命令下载依赖包,详情请查看《Nginx离线部署这篇就够了》

我这边就直接通过yum安装了

[root@nginx-proxy ~]# yum install -y vim gcc gcc-c++ glibc make autoconf  pcre-devel pam-devel zlib-devel perl-IPC-Cmd wget tar
[root@nginx-proxy ~]# yum install  zlib zlib-devel  pam-devel perl libselinux-devel perl-Test-Simple openssl-devel -y

备份原来的openssh

#查找ssh位置
[root@nginx-proxy ~]# whereis ssh
ssh: /usr/bin/ssh /etc/ssh /usr/share/man/man1/ssh.1.gz

#开始备份
[root@nginx-proxy ~]# mv /usr/bin/ssh /usr/bin/ssh.bak
[root@nginx-proxy ~]# mv /etc/ssh /etc/ssh.bak
[root@nginx-proxy ~]# mv /usr/share/man/man1/ssh.1.gz /usr/share/man/man1/ssh.1.gz.bak

开始编译安装openssh

#进入到源码目录
[root@nginx-proxy ~]# cd openssh-9.9p1/

#生成配置文件
[root@nginx-proxy openssh-9.9p1]# ./configure --prefix=/usr/local/openssh9p6 --sysconfdir=/etc/ssh --with-pam --with-zlib
#开始安装
[root@nginx-proxy openssh-9.9p1]# make&&make install

#复制新的配置文件到原来目录
[root@nginx-proxy openssh-9.9p1]# cp /usr/local/openssh9p6/sbin/sshd /usr/sbin/sshd
[root@nginx-proxy openssh-9.9p1]# cp /usr/local/openssh9p6/bin/ssh /usr/bin/ssh
[root@nginx-proxy openssh-9.9p1]# cp /usr/local/openssh9p6/bin/ssh-keygen /usr/bin/ssh-keygen
[root@nginx-proxy openssh-9.9p1]# cp -p contrib/redhat/sshd.init /etc/init.d/sshd

#加执行权限
[root@nginx-proxy openssh-9.9p1]# chmod +x /etc/init.d/sshd
#修改sshd配置,这一步一定要做,因为新版本默认没有开启root远程登录
[root@nginx-proxy openssh-9.9p1]# cat <<eof >> /etc/ssh/sshd_config
PermitRootLogin yes #允许root用户通过SSH登录到系统
PubkeyAuthentication yes #启用公钥身份验证
PasswordAuthentication yes #启用密码身份验证
eof

#重启ssh
[root@nginx-proxy openssh-9.9p1]# systemctl restart sshd

#检查ssh版本
[root@nginx-proxy openssh-9.9p1]# ssh -V
OpenSSH_9.9p1, OpenSSL 1.1.1k  FIPS 25 Mar 2021

远程测试可以正常连接,到此升级完成。 记得把telnet服务关了

标签: none