前言
收到漏洞扫描通知
OpenSSH 安全漏洞(CVE-2023-38408)
OpenSSH 安全漏洞(CVE-2023-51385)
OpenSSH 安全漏洞(CVE-2023-51384)
OpenSSH 安全漏洞(CVE-2023-51767)
OpenSSH 安全漏洞(CVE-2023-48795)
OpenSSH(OpenBSD SecureShell)是加拿大OpenBSD计划组的一套用于安全访问远程计算机的连接工具。该工具是SSH协议的开源实现,支持对所有的传输进行加密,可有效阻止窃听、连接劫持以及其他网络级的攻击。OpenSSH 9.3p2之前版本存在安全漏洞,该漏洞源于ssh-agent的PKCS11功能存在安全问题。攻击者可利用该漏洞执行远程代码。
意思就是版本太低,发现OpenSSH官网当前已经是OpenSSH-9.9p1,直接开始升级。
当前版本
[root@localhost sbin]# cat /etc/redhat-release
CentOS Linux release 7.9.2009 (Core)
[root@localhost sbin]# ssh -V
OpenSSH_9.3p1, OpenSSL 1.0.2k-fips 26 Jan 2017
升级后版本当前最新
名称 | 版本 | 官网 |
---|---|---|
openssh | openssh-9.9p1 | 连接 |
openssl | openssl-3.4.0 | 连接 |
zlib | zlib-1.3.1 | 连接 |
前置操作
为了避免升级过程中出现的意外导致服务器无法进行连接,建议对重要的内容先进行备份
创建快照
一定一定一定,服务商创建快照。
安装telnet
升级过程中会卸载旧版本ssh
导致远程无法连接,所以先安装一个telnet
检查
#检查是否安装了telnet服务端
rpm -q telnet-server
#检查是否安装了telnet客户端
rpm -q telnet
提示package telnet-server is not installed
表示未安装
安装
#安装telnet服务端
yum install telnet-server -y
#安装telnet客户端
yum install telnet -y
启动
#设置开机启动该
systemctl enable telnet.socket
#打开服务
systemctl start telnet.socket
防火墙开放23
端口
#添加23端口
firewall-cmd --permanent --add-port=23/tcp
# 移除
firewall-cmd --permanent --remove-port=23/tcp
#配置生效
firewall-cmd --reload
#查看开启端口
firewall-cmd --list-all
使用telnet ip
进行连接登录
[root@localhost ~]# telnet 10.0.0.159
Trying 10.0.0.159...
Connected to 10.0.0.159.
Escape character is '^]'.
Kernel 3.10.0-1160.71.1.el7.x86_64 on an x86_64
localhost login: root
Password:
Last failed login: Fri Nov 29 00:15:00 CST 2024 from ::ffff:10.0.0.144 on pts/2
There was 1 failed login attempt since the last successful login.
允许root登录
如上登录错误,默认系统不允许root用户使用telnet远程登陆
echo 'pts/0' >>/etc/securetty
echo 'pts/1' >>/etc/securetty
echo 'pts/2' >>/etc/securetty
echo 'pts/3' >>/etc/securetty
echo 'pts/4' >>/etc/securetty
输入正确的密码还是不能登录
主机端执行:tail /var/log/secure
看到了access denied: tty 'pts/3' is not secure !
再添加一个
echo 'pts/5' >>/etc/securetty
echo 'pts/6' >>/etc/securetty
设置telnet
后再登录一切正常了
开始升级
执行下方操作前,请确认telnet外部连接正常
备份
cd /opt
cp /etc/ssh/sshd_config sshd_config.backup
cp /etc/pam.d/sshd sshd.backup
检查相关依赖包
rpm -q gcc perl-IPC-Cmd zlib-devel
#安装没有的包
yum install -y gcc perl-IPC-Cmd zlib-devel
安装
安装zlib
cd /opt/
#下载zlib源码
wget http://www.zlib.net/zlib-1.3.1.tar.gz
#解压
tar -zxvf zlib-1.3.1.tar.gz
#编译并安装
cd zlib-1.3.1
#编译
./configure --prefix=/usr/local/zlib
#安装
make && make test && make install
#
ll /usr/local/zlib
ldconfig -v
/sbin/ldconfig
安装OpenSSL
SSL更新前如果编译目录下有原版本,需删除后编译,防止SSH编译失败! 2.结尾处截图为初发文时间更新版本,和操作语句新版本不冲突
检查OpenSSL当前已有版本
[root@localhost zlib-1.3.1]# openssl version -a
OpenSSL 1.0.2k-fips 26 Jan 2017
built on: reproducible build, date unspecified
platform: linux-x86_64
options: bn(64,64) md2(int) rc4(16x,int) des(idx,cisc,16,int) idea(int) blowfish(idx)
compiler: gcc -I. -I.. -I../include -fPIC -DOPENSSL_PIC -DZLIB -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -DKRB5_MIT -m64 -DL_ENDIAN -Wall -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -Wa,--noexecstack -DPURIFY -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DRC4_ASM -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DMD5_ASM -DAES_ASM -DVPAES_ASM -DBSAES_ASM -DWHIRLPOOL_ASM -DGHASH_ASM -DECP_NISTZ256_ASM
OPENSSLDIR: "/etc/pki/tls"
engines: rdrand dynamic
卸载
yum remove -y openssl
安装操作
cd /opt/
#下载zlib源码
wget https://github.com/openssl/openssl/releases/download/openssl-3.4.0/openssl-3.4.0.tar.gz
#解压
tar -zxvf openssl-3.4.0.tar.gz
#编译并安装
cd openssl-3.4.0
编译
./config --prefix=/usr/local/openssl shared zlib
这里编译时可能会遇到报错:缺少IPC/Cmd.pm
模块
[root@localhost openssl-3.4.0]# ./config shared zlib --prefix=/usr/local/openssl
Can't locate IPC/Cmd.pm in @INC (@INC contains: /opt/openssl-3.4.0/util/perl /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 . /opt/openssl-3.4.0/external/perl/Text-Template-1.56/lib) at /opt/openssl-3.4.0/util/perl/OpenSSL/config.pm line 19.
BEGIN failed--compilation aborted at /opt/openssl-3.4.0/util/perl/OpenSSL/config.pm line 19.
Compilation failed in require at /opt/openssl-3.4.0/Configure line 23.
BEGIN failed--compilation aborted at /opt/openssl-3.4.0/Configure line 23.
直接安装yum -y install perl-IPC-Cmd
后再进行编译,编译成功
或者提示如下这个是缺失perl 的插件,直接执行yum install -y 'perl(Data::Dumper)'
Can’t locate Data/Dumper.pm in @INC
安装
make && make install
有可能还会缺少crypto/comp/libcrypto-lib-c_zlib.o
,直接安装yum -y install zlib-devel
然后继续make install
更新系统OpenSSL
# 更新系统的 OpenSSL 链接,首先备份旧版本的 openssl 可执行文件
mv /usr/bin/openssl /usr/bin/openssl.old
# 创建新的符号链接:
ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl
# 更新系统库链接
echo "/usr/local/openssl/lib" >> /etc/ld.so.conf.d/openssl-3.4.0.conf
sudo ldconfig
# 验证系统openssl版本
openssl version
此时可能会出现错误
openssl: error while loading shared libraries: libssl.so.3: cannot open shared object file: No
查询
[root@localhost openssl-3.4.0]# whereis openssl
openssl: /usr/lib64/openssl /usr/local/openssl
查询是否已有找不到的依赖
find / -name libssl.so.3
find / -name libcrypto.so.3
添加软连接
ln -s /usr/local/openssl/lib64/libssl.so.3 /usr/lib64/libssl.so.3
ln -s /usr/local/openssl/lib64/libcrypto.so.3 /usr/lib64/libcrypto.so.3
安装成功
[root@localhost openssl-3.4.0]# openssl version
OpenSSL 3.4.0 22 Oct 2024 (Library: OpenSSL 3.4.0 22 Oct 2024)
安装OpenSSH
卸载原有OpenSSH
rpm -e --nodeps `rpm -qa | grep openssh`
安装
cd /opt/
#下载zlib源码
wget https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-9.9p1.tar.gz
#解压
tar -zxvf openssh-9.9p1.tar.gz
#
cd openssh-9.9p1
编译
./configure --prefix=/usr --sysconfdir=/etc/ssh --with-ssl-dir=/usr/local/openssl/ --with-zlib=/usr/local/zlib/ --with-ssl-engine
# 安装
make && make install
#查看目录版本
/usr/bin/ssh -V
OpenSSH设置
#调整文件权限
chmod 600 /etc/ssh/ssh_host_rsa_key /etc/ssh/ssh_host_ecdsa_key /etc/ssh/ssh_host_ed25519_key
#复制配置文件
cp -a contrib/redhat/sshd.init /etc/init.d/sshd
chmod u+x /etc/init.d/sshd
#允许root登录
echo 'PermitRootLogin yes' >> /etc/ssh/sshd_config
echo 'Subsystem sftp /usr/libexec/sftp-server' >> /etc/ssh/sshd_config
#添加开机启动
chkconfig --add sshd
chkconfig sshd on
# Centos 7 重启sshd
systemctl restart sshd
# Centos 6 重启sshd
/etc/init.d/sshd restart
/etc/init.d/sshd status
#查看升级后ssh版本
ssh -V