记一次手动将OpenSSH从7.4升级到9.8的过程

ShiYQ@师 2024-07-19 11:07:03 阅读 53

文章目录

背景相关介绍安装 telnet-server安装zlib安装openssl备份并卸载老版本OpenSSH升级OpenSSH

背景

OpenSSH远程代码执行漏洞(CNVD-2024-29805)

漏洞介绍

OpenSSH是加拿大OpenBSD计划组的一套用于安全访问远程计算机的连接工具。该工具是SSH协议的开源实现,支持对所有的传输进行加密,可有效阻止窃听、连接劫持以及其他网络级的攻击。该漏洞源于信号处理程序中存在竞争条件,攻击者利用该漏洞可以在无需认证的情况下远程执行任意代码并获得系统控制权。

危害影响

OpenSSH 8.5p1版本至9.8p1之前版本均受该漏洞影响。

8.5p1 <= OpenSSH < 9.8p1

修复建议

目前,OpenSSH官方已发布新版本修复了该漏洞,建议用户及时确认产品版本,尽快采取修补措施。官方更新版本下载链接:

https://www.openssh.com/txt/release-9.8

相关介绍

OpenSSH 是 SSH(Secure Shell)协议的实现,用于在不安全的网络上提供安全的通信手段。它广泛用于远程登录、远程命令执行和安全文件传输。

OpenSSH 提供了许多工具,包括 ssh(用于登录到远程机器)、scp 和 sftp(用于文件传输),以及 sshd(SSH 守护进程)。

它确保通信的机密性和完整性,防止中间人攻击。

OpenSSL 是一个强大的加密库,提供了各种加密算法、哈希函数和加密协议(例如 TLS/SSL)的实现。

它被广泛用于保护网络通信,确保数据在传输过程中不会被窃听或篡改。

OpenSSL 提供了加密和解密功能、密钥生成和管理、数字证书处理等。

zlib 的作用

数据压缩:

OpenSSH 使用 zlib 来压缩和解压缩传输的数据。通过压缩数据,可以减少传输的数据量,从而提高传输速度和效率,尤其是在带宽有限的网络环境中。

减少带宽使用:

压缩可以显著减少 SSH 会话中数据传输所需的带宽。这对于需要传输大量数据的场景(例如文件传输或远程执行大量命令)特别有用。

提高传输效率:

对于文本数据,压缩效果尤其明显。通过减少传输的数据量,可以提高传输效率,并减少传输时间。

安装 telnet-server

避免ssh关闭后无法远程。

rpm -q telnet-server

#检查是否安装了telnet服务端

rpm -q telnet

#检查是否安装了telnet客户端

离线模式:通过有网主机下载

sudo yum install yum-utils

mkdir telnet-server-install

cd telnet-server-install

yumdownloader --resolve telnet-server

可通过ftp上传后安装

cd ~/telnet-server-install

sudo rpm -ivh *.rpm

下载 telnet-server 及其所有依赖包到当前目录。

或直接安装

yum install telnet -y

启动

systemctl enable telnet.socket

#设置开机启动该

systemctl start telnet.socket

#打开服务

防火墙开放telnet 或 开放23端口

sudo firewall-cmd --permanent --add-service=telnet

sudo firewall-cmd --reload

使用telnet ip地址进行连接登录

允许root登录

默认系统不允许root用户使用telnet远程登陆

echo ‘pts/0’ >>/etc/securetty

echo ‘pts/1’ >>/etc/securetty

可通过其它主机尝试:

<code>[root@standby opt]# telnet 10.10.10.171

Trying 10.10.10.171...

Connected to 10.10.10.171.

Escape character is '^]'.

Kernel 3.10.0-1160.el7.x86_64 on an x86_64

localhost login: root

Password:

Last failed login: Thu Jul 4 13:56:07 CST 2024 from ::ffff:10.10.10.42 on pts/0

There were 3 failed login attempts since the last successful login.

Last login: Thu Jul 4 10:30:43 from 172.20.1.1

可能还需要添加下 pts/3 和 pts/4

输入正确的密码还是不能登录

主机端执行:tail /var/log/secure

看到了access denied: tty ‘pts/3’ is not secure !

再添加一个

echo ‘pts/3’ >>/etc/securetty

重启了telnet后再登录一切正常了

安装zlib

安装zlib:https://www.zlib.net/fossils/

cd /usr/local/src/

wget https://www.zlib.net/fossils/zlib-1.3.1.tar.gz

#解压文件

tar zxvf zlib-1.3.tar.gz

cd zlib-1.3

#安装前置依赖

yum install gcc gcc-c++ make -y

#编译安装zlib

./configure --prefix=/usr/local/zlib

make && make install

安装openssl

安装openssl:https://www.openssl.org/source/

cd /usr/local/src/

wget https://www.openssl.org/source/openssl-3.2.2.tar.gz

#解压文件

tar zxvf openssl-3.2.0.tar.gz

cd openssl-3.2.0

#安装相应的前置依赖

yum install -y perl-CPAN perl-ExtUtils-CBuilder perl-ExtUtils-MakeMaker

完成后输出:

已安装:

perl-CPAN.noarch 0:1.9800-299.el7_9 perl-ExtUtils-CBuilder.noarch 1:0.28.2.6-299.el7_9 perl-ExtUtils-MakeMaker.noarch 0:6.68-3.el7

作为依赖被安装:

gdbm-devel.x86_64 0:1.10-8.el7 libdb-devel.x86_64 0:5.3.21-25.el7 perl-Digest-SHA.x86_64 1:5.85-4.el7 perl-ExtUtils-Install.noarch 0:1.58-299.el7_9 perl-ExtUtils-Manifest.noarch 0:1.61-244.el7

perl-ExtUtils-ParseXS.noarch 1:3.18-3.el7 perl-IPC-Cmd.noarch 1:0.80-4.el7 perl-Locale-Maketext.noarch 0:1.23-3.el7 perl-Locale-Maketext-Simple.noarch 1:0.21-299.el7_9 perl-Module-CoreList.noarch 1:2.76.02-299.el7_9

perl-Module-Load.noarch 1:0.24-3.el7 perl-Module-Load-Conditional.noarch 0:0.54-3.el7 perl-Module-Metadata.noarch 0:1.000018-2.el7 perl-Params-Check.noarch 1:0.38-2.el7 perl-Perl-OSType.noarch 0:1.003-3.el7

perl-Test-Harness.noarch 0:3.28-3.el7 perl-devel.x86_64 4:5.16.3-299.el7_9 perl-local-lib.noarch 0:1.008010-4.el7 perl-version.x86_64 3:0.99.07-6.el7 pyparsing.noarch 0:1.5.6-9.el7

systemtap-sdt-devel.x86_64 0:4.0-13.el7

#–prefix指定编译到的目录,"shared"作用是生成动态链接库(即.so库)

./config --prefix=/usr/local/ssl --shared

完成后输出:

[root@localhost openssl-3.2.2]# ./config --prefix=/usr/local/ssl --shared

Configuring OpenSSL version 3.2.2 for target linux-x86_64

Using os-specific seed configuration

Created configdata.pm

Running configdata.pm

Created Makefile.in

Created Makefile

Created include/openssl/configuration.h

**********************************************************************

*** ***

*** OpenSSL has been successfully configured ***

*** ***

*** If you encounter a problem while building, please open an ***

*** issue on GitHub <https://github.com/openssl/openssl/issues> ***

*** and include the output from the following command: ***

*** ***

*** perl configdata.pm --dump ***

*** ***

*** (If you are new to OpenSSL, you might want to consult the ***

*** 'Troubleshooting' section in the INSTALL.md file first) ***

*** ***

**********************************************************************

#编译安装ssl,这个安装过程很长大概有10分钟左右

make && make install(安装时间有点长哟·)

#路径写入etc/ld.so.conf

echo ‘/usr/local/ssl/lib64’ >> /etc/ld.so.conf

备份并卸载老版本OpenSSH

#备份ssh配置文件

cp -p /etc/ssh/sshd_config /etc/ssh/sshd_config.bak

cp -p /usr/sbin/sshd /usr/sbin/sshd.bak

cp -p /usr/bin/ssh /usr/bin/ssh.bak

cp -p /usr/bin/ssh-keygen /usr/bin/ssh-keygen.bak

cp -p /etc/ssh/ssh_host_ecdsa_key.pub /etc/ssh/ssh_host_ecdsa_key.pub.bak

#停止ssh服务

systemctl stop sshd

切勿关闭远程

#备份ssh文件

cp -r /etc/ssh /etc/ssh.old

#查询原有ssh包并卸载

rpm -qa | grep openssh

openssh-server-7.4p1-21.el7.x86_64

openssh-7.4p1-21.el7.x86_64

openssh-clients-7.4p1-21.el7.x86_64

#根据查询结果,卸载原有OpenSSH包

yum remove openssh-7.4p1-21.el7.x86_64

#再次查看已经没有了

rpm -qa | grep openssh

卸载后输出:

删除:

openssh.x86_64 0:7.4p1-21.el7

作为依赖被删除:

anaconda-core.x86_64 0:21.48.22.159-1.el7.centos anaconda-gui.x86_64 0:21.48.22.159-1.el7.centos anaconda-tui.x86_64 0:21.48.22.159-1.el7.centos fence-agents-all.x86_64 0:4.2.1-41.el7

fence-agents-apc.x86_64 0:4.2.1-41.el7 fence-agents-bladecenter.x86_64 0:4.2.1-41.el7 fence-agents-brocade.x86_64 0:4.2.1-41.el7 fence-agents-drac5.x86_64 0:4.2.1-41.el7

fence-agents-hpblade.x86_64 0:4.2.1-41.el7 fence-agents-ilo-moonshot.x86_64 0:4.2.1-41.el7 fence-agents-ilo-mp.x86_64 0:4.2.1-41.el7 fence-agents-ilo-ssh.x86_64 0:4.2.1-41.el7

fence-agents-rsa.x86_64 0:4.2.1-41.el7 fence-agents-rsb.x86_64 0:4.2.1-41.el7 fence-agents-wti.x86_64 0:4.2.1-41.el7 firstboot.x86_64 0:19.12-1.el7

gdm.x86_64 1:3.28.2-23.el7 gnome-classic-session.noarch 0:3.28.1-14.el7 gnome-initial-setup.x86_64 0:3.28.0-2.el7 gnome-keyring.x86_64 0:3.28.2-1.el7

gnome-keyring-pam.x86_64 0:3.28.2-1.el7 gnome-shell.x86_64 0:3.28.3-30.el7 gnome-shell-extension-alternate-tab.noarch 0:3.28.1-14.el7 gnome-shell-extension-apps-menu.noarch 0:3.28.1-14.el7

gnome-shell-extension-common.noarch 0:3.28.1-14.el7 gnome-shell-extension-horizontal-workspaces.noarch 0:3.28.1-14.el7 gnome-shell-extension-launch-new-instance.noarch 0:3.28.1-14.el7 gnome-shell-extension-places-menu.noarch 0:3.28.1-14.el7

gnome-shell-extension-top-icons.noarch 0:3.28.1-14.el7 gnome-shell-extension-user-theme.noarch 0:3.28.1-14.el7 gnome-shell-extension-window-list.noarch 0:3.28.1-14.el7 gnome-tweak-tool.noarch 0:3.28.1-7.el7

initial-setup.x86_64 0:0.3.9.45-1.el7.centos initial-setup-gui.x86_64 0:0.3.9.45-1.el7.centos openssh-clients.x86_64 0:7.4p1-21.el7 openssh-server.x86_64 0:7.4p1-21.el7

pulseaudio-gdm-hooks.x86_64 0:10.0-5.el7 python-meh.noarch 0:0.25.3-1.el7 python-meh-gui.noarch 0:0.25.3-1.el7

完毕!

[root@localhost src]# rpm -qa | grep openssh

[root@localhost src]#

升级OpenSSH

cd /usr/local/src/

wget http://ftp.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-9.8p1.tar.gz

#解压

tar zxvf openssh-9.8p1.tar.gz

cd openssh-9.8p1

#编译安装openssh 指明zlib路径和ssl路径

./configure --prefix=/usr/local/openssh --with-zlib=/usr/local/zlib --with-ssl-dir=/usr/local/ssl

完成后输出:

OpenSSH has been configured with the following options:

User binaries: /usr/local/openssh/bin

System binaries: /usr/local/openssh/sbin

Configuration files: /usr/local/openssh/etc

Askpass program: /usr/local/openssh/libexec/ssh-askpass

Manual pages: /usr/local/openssh/share/man/manX

PID file: /var/run

Privilege separation chroot path: /var/empty

sshd default user PATH: /usr/bin:/bin:/usr/sbin:/sbin:/usr/local/openssh/bin

Manpage format: doc

PAM support: no

OSF SIA support: no

KerberosV support: no

SELinux support: no

libedit support: no

libldns support: no

Solaris process contract support: no

Solaris project support: no

Solaris privilege support: no

IP address in $DISPLAY hack: no

Translate v4 in v6 hack: yes

BSD Auth support: no

Random number source: OpenSSL internal ONLY

Privsep sandbox style: seccomp_filter

PKCS#11 support: yes

U2F/FIDO support: yes

Host: x86_64-pc-linux-gnu

Compiler: cc -std=gnu11

Compiler flags: -g -O2 -pipe -Wall -Wextra -Wpointer-arith -Wuninitialized -Wsign-compare -Wformat-security -Wsizeof-pointer-memaccess -Wno-pointer-sign -Wno-unused-parameter -Wno-unused-result -fno-strict-aliasing -D_FORTIFY_SOURCE=2 -ftrapv -fno-builtin-memset -fstack-protector-strong -fPIE

Preprocessor flags: -I/usr/local/ssl/include -I/usr/local/zlib/include -D_XOPEN_SOURCE=600 -D_BSD_SOURCE -D_DEFAULT_SOURCE -D_GNU_SOURCE -DOPENSSL_API_COMPAT=0x10100000L

Linker flags: -L/usr/local/ssl/lib64 -L/usr/local/zlib/lib -Wl,-z,relro -Wl,-z,now -Wl,-z,noexecstack -fstack-protector-strong -pie

Libraries: -ldl -lutil -lresolv

+for channels: -lcrypto -lz

+for sshd: -lcrypt

make && make install

#ssh允许root登录、需要密码进行验证

echo ‘PermitRootLogin yes’ >>/usr/local/openssh/etc/sshd_config

echo ‘PubkeyAuthentication yes’ >>/usr/local/openssh/etc/sshd_config

echo ‘PasswordAuthentication yes’ >>/usr/local/openssh/etc/sshd_config

#将编译安装的新配置文件 拷贝到原路径下

cp /usr/local/openssh/etc/sshd_config /etc/ssh/sshd_config

cp /usr/local/openssh/sbin/sshd /usr/sbin/sshd

cp /usr/local/openssh/bin/ssh /usr/bin/ssh

cp /usr/local/openssh/bin/ssh-keygen /usr/bin/ssh-keygen

cp /usr/local/openssh/etc/ssh_host_ecdsa_key.pub /etc/ssh/ssh_host_ecdsa_key.pub

#拷贝启动脚本

cp -p contrib/redhat/sshd.init /etc/init.d/sshd

#给sshd添加可执行权限

chmod +x /etc/init.d/sshd

#设置开机自启

systemctl enable sshd

#重新启动sshd服务

systemctl restart sshd

#查看sshd服务状态

systemctl status sshd

#查看ssh版本是否升级成功,可以查看到已经是9.5版本了

ssh -V

OpenSSH_9.8p1, OpenSSL 3.2.2 4 Jun 2024

到此 OpenSSH 升级完成,还望大家多多指点。



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。