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/securetty

echo "pts/2" >> /etc/securetty

echo "pts/3" >> /etc/securetty

echo "pts/4" >> /etc/securetty

echo "pts/5" >> /etc/securetty

echo "pts/6" >> /etc/securetty

echo "pts/7" >> /etc/securetty

echo "pts/8" >> /etc/securetty

echo "pts/9" >> /etc/securetty

echo "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.socket

systemctl 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.1
 
ls /usr/local/
 
./configure --prefix=/usr/local/zlib
make -j 2
make test
make install
 
ls /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.old

mv /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-certificate

tar -xzvf openssl-1.1.1w.tar.gz

cd openssl-1.1.1w/

./config --prefix=/usr

make && make install

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

验证

whereis openssl

openssl: /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  version

OpenSSL 1.1.1w  11 Sep 2023

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

Bin: /usr/local/bin/openssl

include库 :/usr/local/include/openssl

lib库:/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 openssl

openssl  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.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.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 telnet

rpm -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.so

vi /etc/pam.d/remote,注释下列这行:
#auth required pam_securetty.so


systemctl start xinetd
systemctl enable xinetd
systemctl status xinetd

systemctl restart telnet.socket
systemctl enable telnet.socket



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

service 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_*.pub

service sshd restart
ssh -V


vi /etc/ssh/sshd_config

注释掉PermitRootLogin yes

service sshd restart

ssh -V

systemctl stop xinetd
systemctl disable xinetd
systemctl stop telnet.socket
systemctl disable telnet.socket


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值