欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 养生 > linux centos7.9升级openssh9.8过程

linux centos7.9升级openssh9.8过程

2025/5/3 3:09:38 来源:https://blog.csdn.net/ly4983/article/details/140901361  浏览:    关键词:linux centos7.9升级openssh9.8过程

一、前言

1.升级背景

因漏洞扫描扫描出openssh相关的高危漏洞,处理新发布的CVE-2024-6387关于openssh的漏洞,需要升级openssh到9.8版本。

2.确认系统

本文记录的过程是基于centos7.9(2009)系统,对于其他linux系统不一定适用,请确认自己的系统对号入座。
 

查看系统版本命令
cat /etc/centos-release

查看ssh版本
ssh -V

[root@xntz1 ly]# ssh -V
OpenSSH_7.4p1, OpenSSL 1.0.2k-fips  26 Jan 2017

3.升级前准备

由于openssh升级可能出现问题,导致ssh连接不上,因此为防止升级过程中出现异常,导致后续无法使用ssh,我们需要先打卡telnet窗口备用。

telnet安装

准备tools工具

centos7.9 安装光盘下找到

xinetd-2.3.15-14.el7.x86_64.rpm

telnet-server-0.17-65.el7_8.x86_64.rpm 

进行安装

[root@xntz1 ly]# rpm -ivh xinetd-2.3.15-14.el7.x86_64.rpm telnet-server-0.17-65.el7_8.x86_64.rpm 
Preparing...                          ################################# [100%]
Updating / installing...1:telnet-server-1:0.17-65.el7_8    ################################# [ 50%]2:xinetd-2:2.3.15-14.el7           ################################# [100%]

启用telnet服务

编辑/etc/xinetd.d/telnet文件,将其中的disable = yes改为disable = no

允许root用户通过telnet登陆:

编辑/etc/pam.d/login,注释掉下面这行#auth [user_unknown=ignore success=ok ignore=ignore default=bad] pam_securetty.so

开启root用户远程登陆

编辑/etc/pam.d/remote,注释下列这行:

#auth required pam_securetty.so

备份配置文件/etc/securetty

cp /etc/securetty /etc/securetty.bak
添加超级用户登陆设备至/etc/securetty文件:echo "pts/1" >> /etc/securettyecho "pts/2" >> /etc/securettyecho "pts/3" >> /etc/securettyecho "pts/4" >> /etc/securettyecho "pts/5" >> /etc/securettyecho "pts/6" >> /etc/securettyecho "pts/7" >> /etc/securettyecho "pts/8" >> /etc/securettyecho "pts/9" >> /etc/securettyecho "pts/10" >> /etc/securetty

启动xinetd服务并设置开机自启

sudo systemctl start xinetd
sudo systemctl enable xinetd

配置防火墙允许telnet连接(如果已启用)

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

确认telnet服务状态

sudo systemctl status xinetd

重启telnet服务,添加到启动项

systemctl restart telnet.socketsystemctl enable telnet.socket

注意 允许root用户远程telnet方法:

1、开启 telnet

  修改/etc/xinetd.d/telnet 将里面的 disable=yes 行前面加上#注释掉

  重新启动xinetd 服务 /etc/rc.d/init.d/xinetd restart
注:由于安全考虑,telnet 不允许 root 用户直接登录,需要您先建立一个普通用户,使用这个用户登录,再切换到 root 用户。
2、配置允许 root 用户登录
  法一、允许 root 用户登录是很不安全的,但是有时候为了测试的方便,也可以允许 root 用户登录,但是这个方法最好不要对公网开放使用。

将/etc/pam.d/login文件中的 auth       required     pam_securetty.so 加上“#”注释掉,就可以实现在登录的时候允许 root 用户了。注:有些时候使用该方法后依然无法让root用户telnet到linux系统,此时可以参考方法二

  法二、 修改/etc/securetty文件,增加root用户可以登录系统的虚拟终端

     echo "pts/0" >>/etc/securetty
     echo "pts/1" >>/etc/securetty

注:
  ttyn,是文本模式下的控制台,n代表第几个控制台,可以用CTRL+ALT+F1...F6或者用chvt n来切换.
  pts/n是在图形模式下的模拟控制台(模拟终端),n代表的是第几个模拟终端.

二、升级过程

1.升级zlib

#执行以下命令
cd /usr/local/src
wget https://www.zlib.net/zlib-1.3.1.tar.gz
#解压zlib
tar -xzvf zlib-1.3.1.tar.gz#进入zlib解压目录
cd zlib-1.3.1ls /usr/local/./configure --prefix=/usr/local/zlib
make -j 2
make test
make installls /usr/local/zlib/
echo '/usr/local/zlib/lib' >> /etc/ld.so.conf.d/zlib.conf加载配置
ldconfig -v
ldconfig查zlib版本cat /usr/local/zlib/lib/pkgconfig/zlib.pc创建新的链接
cp /usr/local/zlib/lib/libz.so.1.3.1 /usr/lib64/
cd /usr/lib64/
mv libz.so libz.so.bak
mv libz.so.1 libz.so.1.bak
ln -s  libz.so.1.3.1 libz.so.1确认新版本是否存在
strings /lib64/libz.so.1 |grep "ZLIB*"
操作了一通发现没有1.3.1 也不知道安装成功没有

测试

备份、卸载原有OpenSSL
 

[root@xntz1 /]# whereis openssl
openssl: /usr/bin/openssl     /usr/lib64/openssl   /usr/share/man/man1/openssl.1ssl.gz备份mv /usr/bin/openssl /usr/bin/openssl.oldmv /usr/lib64/openssl  /usr/lib64/openssl .old卸载 openssl (这一步看个人需要,我有洁癖所以我卸载了)yum remove openssl

安装openssl
 

wget https://www.openssl.org/source/openssl-1.1.1w.tar.gz --no-check-certificatetar -xzvf openssl-1.1.1w.tar.gzcd openssl-1.1.1w/./config --prefix=/usrmake && make install

这里我的目录选择了/usr 是因为系统最初始的openssl的目录就是/usr 这样可以省去的软连接、更新链接库的问题

验证

whereis opensslopenssl: /usr/bin/openssl /usr/lib64/openssl /usr/include/openssl /usr/share/man/man1/openssl.1ssl.gz /usr/share/man/man1/openssl.1[root@vm206 openssl-1.1.1w]# openssl  versionOpenSSL 1.1.1w  11 Sep 2023

可以看到我这边的目录和老版本的openssl的目录保持了一致,唯一不同的是多了一个/usr/include/openssl 库目录
如果不加--prefix=/usr ,openssl的默认路径如下

Bin: /usr/local/bin/opensslinclude库 :/usr/local/include/openssllib库:/usr/local/lib64/engine库:/usr/lib64/openssl/engines

查看openssh位置,备份

whereis ssh sshd

ssh: /usr/bin/ssh /etc/ssh /usr/share/man/man1/ssh.1.gz
sshd: /usr/sbin/sshd /usr/share/man/man8/sshd.8.gz

mv /etc/ssh /etc/ssh.bak
mv /usr/bin/ssh /usr/bin/ssh.bak
mv /usr/sbin/sshd /usr/sbin/sshd.bak
mv /etc/pam.d/sshd /etc/pam.d/sshd.old

以上执行后又还原回来了

cp -rf /etc/ssh /etc/ssh.bak
cp -rf /usr/bin/openssl /usr/bin/openssl.bak
cp -rf /etc/pam.d /etc/pam.d.bak
cp -rf /usr/lib/systemd/system /usr/lib/systemd/system.bak

卸载原来的版本

查看

[root@xntz1 ~]# rpm -qa | grep ssh
openssh-7.4p1-21.el7.x86_64
openssh-clients-7.4p1-21.el7.x86_64
libssh2-1.8.0-4.el7.x86_64
openssh-server-7.4p1-21.el7.x86_64

安装方式1

cd /home/ly/

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

systemctl stop sshd

tar -zxvf openssh-9.8p1.tar.gz

cd  openssh-9.8p1

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

###--with-zlib=/usr/local/zlib:指定 zlib 库的路径为 /usr/local/zlib。这是为了告诉 OpenSSH 在编译过程中使用指定路径下的 zlib 库。
###--with-ssl-dir=/usr/local/ssl:指定 OpenSSL 库的路径为 /usr/local/ssl。这是为了告诉 OpenSSH 在编译过程中使用指定路径下的 OpenSSL 库。
####--without-zlib-version-check:禁用对 zlib 版本的检查。这个选项可以用于跳过对 zlib 版本的检查,即使 zlib 版本不符合 OpenSSH 的要求,也会继续编译。

openssl升级

openssl1.1下载

OpenSSL 3.3.1 Free Download, Linux | IceWalkers

https://www.icewalkers.com/linux/software/518010/openssl.html

wget https://www.openssl.org/source/openssl-1.1.1w.tar.gz --no-check-certificate

tar -xzvf openssl-1.1.1h.tar.gz

cd openssl-1.1.1h/

./config --prefix=/usr

make && make install

这里我的目录选择了/usr 是因为系统最初始的openssl的目录就是/usr 这样可以省去的软连接、更新链接库的问题

验证

whereis opensslopenssl  version
OpenSSL 1.1.1h  22 Sep 2020

可以看到我这边的目录和老版本的openssl的目录保持了一致,唯一不同的是多了一个/usr/include/openssl 库目录
如果不加prefix ,openssl的默认路径如下

安装openssl3.1.2  ./config 时有报错,所以选在1.1.

升级openssh

systemctl stop sshd

# whereis ssh sshd
ssh: /usr/bin/ssh /etc/ssh /etc/ssh.bak /usr/share/man/man1/ssh.1.gz
sshd: /usr/sbin/sshd /usr/share/man/man8/sshd.8.gz

备份文件目录

mv /etc/ssh /etc/ssh.bakmv /usr/bin/ssh /usr/bin/ssh.bakmv /usr/sbin/sshd /usr/sbin/sshd.bakmv /etc/pam.d/sshd  /etc/pam.d/sshd.bak

卸载旧版OpenSSH

yum remove openssh

安装方式2:ssh能连上 但是不知道稳定不?

yum update -y
yum install epel-release -y
yum install openssh-clients openssh-server openssh-devel -y
以上内容没有操作ssh也能正常连接

tar -zxvf centos7_openssh-9.8.tar
cd centos7_openssh-9.8
rpm -Uvh --force --nodeps *.rpm
ssh-keygen -A
sudo chmod 600 /etc/ssh/ssh_host_*
sudo chmod 644 /etc/ssh/ssh_host_*.pub

vi /etc/ssh/sshd_config

注释掉PermitRootLogin yes

service sshd restart

ssh -V


rpm -qa | grep telnetrpm -ivh xinetd-2.3.15-14.el7.x86_64.rpm telnet-server-0.17-65.el7_8.x86_64.rpm vi  /etc/pam.d/login,注释掉下面这行,这个不用注释掉一样好使。
#auth [user_unknown=ignore success=ok ignore=ignore default=bad] pam_securetty.sovi /etc/pam.d/remote,注释下列这行:
#auth required pam_securetty.sosystemctl start xinetd
systemctl enable xinetd
systemctl status xinetdsystemctl restart telnet.socket
systemctl enable telnet.socketsudo firewall-cmd --permanent --add-service=telnet
sudo firewall-cmd --reloadservice sshd stop
tar -zxvf centos7_openssh-9.8.tar
cd centos7_openssh-9.8
rpm -Uvh *.rpm
rpm -Uvh --force --nodeps *.rpm
ssh-keygen -A
sudo chmod 600 /etc/ssh/ssh_host_*
sudo chmod 644 /etc/ssh/ssh_host_*.pubservice sshd restart
ssh -Vvi /etc/ssh/sshd_config注释掉PermitRootLogin yesservice sshd restartssh -Vsystemctl stop xinetd
systemctl disable xinetd
systemctl stop telnet.socket
systemctl disable telnet.socket

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词