文章声明 文章声明:此文基于实操撰写 生产环境:此文升级是基于9.3p2升级9.4p1 ssh -V查看版本是:OpenSSH_9.3p2, OpenSSL 1.1.1t 7 Feb 2023 问题关键字:OpenSSH 升级, OpenSSH 更新, OpenSSH 漏洞修复 漏洞信息:OpenSSH 命令注入漏洞(CVE-2020-15778)、OpenSSH 安全漏洞(CVE-2023-38408)
漏洞描述 OpenSSH 命令注入漏洞(CVE-2020-15778) 详细描述:
OpenSSH(OpenBSD Secure Shell)是OpenBSD计划组的一套用于安全访问远程计算机的连接工具。该工具是SSH协议的开源实现,支持对所有的传输进行加密,可有效阻止窃听、连接劫持以及其他网络级的攻击。 OpenSSH 9.3p3及之前版本中的scp的scp.c文件存在命令注入漏洞。该漏洞源于外部输入数据构造可执行命令过程中,网络系统或产品未正确过滤其中的特殊元素。攻击者可利用该漏洞执行非法命令。
OpenSSH 安全漏洞(CVE-2023-38408) 详细描述:
OpenSSH(OpenBSD Secure Shell)是加拿大OpenBSD计划组的一套用于安全访问远程计算机的连接工具。该工具是SSH协议的开源实现,支持对所有的传输进行加密,可有效阻止窃听、连接劫持以及其他网络级的攻击。
OpenSSH 9.3p2之前版本存在安全漏洞,该漏洞源于ssh-agent的PKCS11功能存在安全问题。攻击者可利用该漏洞执行远程代码。
前述 OpenSSH(OpenBSD Secure Shell)是OpenBSD计划组的一套用于安全访问远程计算机的连接工具。该工具是SSH协议的开源实现,支持对所有的传输进行加密,可有效阻止窃听、连接劫持以及其他网络级的攻击。OpenSSH 8.9版本至9.4之前版本存在安全漏洞,该漏洞源于将智能卡密钥添加到ssh-agent,会导致忽略每次转发的目标约束。 注:此操作步骤同样适用于Red Hat系所有 9.x 服务器系统。
注意事项:
在升级之前,建议打开多个SSH终端连接,并安装telnet服务器,确保在SSH服务器升级异常时,可以通过telnet服务器远程连接,进行紧急问题修复处理。 因为最开始需要直接卸载openssh,卸载完之后就连不上了,如有问题不好解决,所以建议多开几个SSH终端连接。 在升级前一定要备份原有的配置文件,以防出现意外情况。
安装一些必要的命令(需要用到的) 安装一些必要的命令(需要用到的)
yum install wget gcc openssl-devel pam-devel rpm-build zlib-devel -y
如果没有外网,可以选择在有网络的服务器上下载rpm安装包,yum离线下载安装包可参考:Centos7 yum如何下载离线安装包?(详解)
或者是直接使用我提供的离线包:openssh7.4p1 升级到 openssh9.4p1 所需的离线包
网盘下载: 链接:https://pan.baidu.com/s/1lqPe1J3wbUuEyA9otQO35g?pwd=open 提取码:open
命令解析:
1.1 OpenSSL:OpenSSH 使用了 OpenSSL 的加密库。因此,在更新 OpenSSH 之前,需要先更新 OpenSSL 的版本。
1.2 PAM:OpenSSH 使用了Pluggable Authentication Modules (PAM),因此需要安装 PAM 相关的库文件。
1.3 Zlib:OpenSSH 使用了 Zlib 库进行数据压缩。因此,需要安装 Zlib 的库文件。
1.4 GCC 和 G++:OpenSSH 的编译需要 GCC 和 G++ 编译器。
Centos 服务器升级OpenSSH到9.3p2 1、安装依赖 安装一些必要的命令(需要用到的)
2、编译安装openssl 2.1 官网下载安装包:openssl官网
wget https://www.openssl.org/source/old/1.1.1/openssl-1.1.1t.tar.gz
或者是使用我提供的离线包:openssh7.4p1 升级到 openssh9.4p1 所需的离线包
网盘下载: 链接:https://pan.baidu.com/s/1lqPe1J3wbUuEyA9otQO35g?pwd=open 提取码:open
如果遇到以下问题,后面加上--no-check-certificate
wget https://www.openssl.org/source/old/1.1.1/openssl-1.1.1t.tar.gz --no-check-certificate
2.2 解压并放到/usr/local/目录
tar xf openssl-1.1.1t.tar.gz -C /usr/local
2.3 编译安装openssl
# 进入openssl目录cd /usr/local/openssl-1.1.1t # 编译安装openssl ./config shared --prefix=/usr/local/opensslmake -j 4make install
2.4 为openssl做软连接
echo "/usr/local/openssl/lib/" >> /etc/ld.so.conf # 加载配置文件 ldconfig # 备份以前的opensslmv /usr/bin/openssl /usr/bin/openssl.old # 软连接,如果提示软连接已存在,记得备份软连接,然后在执行下面再次软连接,要不然会出问题,会导致root目录看不了,磁盘看不了,sftp连接不上;ln -sv /usr/local/openssl/bin/openssl /usr/bin/opensslln -s /usr/local/openssl/lib/libssl.so.1.1 /usr/lib64/libssl.so.1.1ln -s /usr/local/openssl/lib/libcrypto.so.1.1 /usr/lib64/libcrypto.so.1.1
软连接,如果提示软连接已存在,记得备份软连接,然后在执行上面再次进行软连接,要不然会出问题,会导致root目录看不了,磁盘看不了,sftp连接不上,等等一系列问题;
2.5 查看openssl版本
openssl version -a
3、查看、备份并卸载原有OpenSSH 确保终端一直连接 断开远程连接就不能用了
[root@localhost ~]
openssh-clients-7.4p1-21.el7.x86_64
openssh-7.4p1-21.el7.x86_64
openssh-server-7.4p1-21.el7.x86_64
[root@localhost ~]
OpenSSH_7.4p1, OpenSSL 1.0.2k-fips 26 Jan 2017
[root@localhost ~]
[root@localhost ~]
[root@localhost ~]
[root@localhost ~]
mv: 无法获取'/etc/init.d/sshd' 的文件状态(stat): No such file or directory
rpm -e --nodeps $(rpm -qa |grep openssh)
确保已经卸载成功(没有返回则卸载成功)
rpm -qa | grep openssh
4、下载OpenSSH二进制包(9.5版本,将4替换为5即可) openssh官网:下载官网
wget https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-9.4p1.tar.gz
或者是使用我提供的离线包:openssh7.4p1 升级到 openssh9.4p1 所需的离线包
网盘下载: 链接:https://pan.baidu.com/s/1lqPe1J3wbUuEyA9otQO35g?pwd=open 提取码:open
5、解压并编译安装OpenSSH # 将下载的openssh安装包移动到/usr/local下
[root@localhost ~]# mv openssh-9.4p1.tar.gz /usr/local/
# 进入/usr/local/目录解压openssh9.4
[root@localhost ~]# cd /usr/local/
[root@localhost local]# tar xf openssh-9.4p1.tar.gz
# 进入openssh目录
[root@localhost local]# cd openssh-9.4p1
# 编译安装
[root@localhost openssh-9.4p1]# CCFLAGS="-I/usr/local/include"
LDFLAGS="-L/usr/local/lib64"
./configure
--sysconfdir=/etc/ssh
--with-zlib
--with-ssl-dir=/usr/local/openssl
[root@localhost openssh-9.4p1]# make -j 4
[root@localhost openssh-9.4p1]# make install
6、授权 [root@localhost openssh-9.4p1]# chmod 600 /etc/ssh/*
7、复制配置文件 [root@localhost openssh-9.4p1]# cp -rf /usr/local/sbin/sshd /usr/sbin/sshd[root@localhost openssh-9.4p1]# cp -rf /usr/local/bin/ssh /usr/bin/ssh[root@localhost openssh-9.4p1]# cp -rf /usr/local/bin/ssh-keygen /usr/bin/ssh-keygen[root@localhost openssh-9.4p1]# cp -ar /usr/local/openssh-9.4p1/contrib/redhat/sshd.init /etc/init.d/sshd[root@localhost openssh-9.4p1]# cp -ar /usr/local/openssh-9.4p1/contrib/redhat/sshd.pam /etc/pam.d/sshd.pam
8、修改配置允许root用户远程登录 # 修改配置允许root用户远程登录(允许使用密码登录,允许root远程登录,开启端口,赋予/etc/init.d/sshd权限)cat >>/etc/ssh/sshd_configEOF PermitRootLogin yes X11Forwarding yes PasswordAuthentication yes KexAlgorithms diffie-hellman-group1-sha1,diffie-hellman-group14-sha1,diffie-hellman-group-exchange-sha1,diffie-hellman-group-exchange-sha256,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group1-sha1,curve25519-sha256@libssh.org EOF[root@localhost openssh-9.4p1]# sed -i "s/^#Port/Port/g" /etc/ssh/sshd_config[root@localhost openssh-9.4p1]# chmod 755 /etc/init.d/sshd
9、启用sshd,生成服务配置文件,并重启服务 # 启用sshd,生成服务配置文件[root@localhost openssh-9.4p1]# systemctl enable sshd sshd.service is not a native service, redirecting to /sbin/chkconfig. Executing /sbin/chkconfig sshd on # 重启服务[root@localhost openssh-9.4p1]# systemctl restart sshd # 查看服务状态[root@localhost openssh-9.4p1]# systemctl status sshd
10、验证升级是否成功 [root@localhost ~]# ssh -V OpenSSH_9.4p1, OpenSSL 1.1.1t 7 Feb 2023
可能遇到的问题及解决方式 问题一: 编译如果有此报错,可能是你没安装gcc…需要的命令,返回最上面: 安装一些必要的命令(需要用到的),安装完再次编译就可以了。
问题二: 编译时报错信息:
checking for cc... cc
checking whether the C compiler works... no
configure: error: in `/usr/local/openssh-9.3p2':
configure: error: C compiler cannot create executables
See `config.log' for more details
gcc问题,如果gcc是5.4将gcc降级为4.8.5,我遇到的问题就是因为gcc的版本为5.4,将gcc版本降为4.8.5即可。
问题三: 编译时报错信息:
checking for openssl/opensslv.h... yes
checking OpenSSL header version... 009070e0 (OpenSSL 0.9.7n-dev xx XXX xxxx)
checking for OpenSSL_version... no
checking for OpenSSL_version_num... no
checking OpenSSL library version... configure: error: OpenSSL >= 1.0.1 required (have "009070e0 (OpenSSL 0.9.7n-dev xx XXX xxxx)")
这个报错是说版本要必须大于等于1.0.1,但是ssh -V我看的时候是1.0.2,可能还是因为版本太低了,我就升级了一个openssl版本为1.1.1,就可以了。安装openssl可参考:编译安装openssl
问题四: 升级OpenSSH后SFTP无法连接问题
vim /etc/ssh/sshd_config #override default of no subsystems #Subsystem sftp /usr/local/openssh/libexec/sftp-server改成下面这句 Subsystem sftp internal-sftp
systemctl restart sshd
再试一下就可以了。
参考文献 [1] 国家信息安全漏洞库:http://www.cnnvd.org.cn/
[2] 腾讯安全:https://s.tencent.com/research/bsafe/
[3] Centos7 yum如何下载离线安装包?(详解):https://liucy.blog.csdn.net/article/details/125780172?spm=1001.2014.3001.5502
版权声明:本文内容始发于CSDN>作者:A-刘晨阳,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
始发链接:https:
在此特别鸣谢原作者的创作。
此篇文章的所有版权归原作者所有,商业转载建议请联系原作者,非商业转载请注明出处。