openssh升级
背景
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服务关了