当前位置:   article > 正文

linux centos7.9升级openssh9.8过程

linux centos7.9升级openssh9.8过程

一、前言

1.升级背景

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

2.确认系统

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

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

查看ssh版本
ssh -V

  1. [root@xntz1 ly]# ssh -V
  2. 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 

进行安装

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

启用telnet服务

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

允许root用户通过telnet登陆:

  1. 编辑/etc/pam.d/login,注释掉下面这行
  2. #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
  1. 添加超级用户登陆设备至/etc/securetty文件:
  2. echo "pts/1" >> /etc/securetty
  3. echo "pts/2" >> /etc/securetty
  4. echo "pts/3" >> /etc/securetty
  5. echo "pts/4" >> /etc/securetty
  6. echo "pts/5" >> /etc/securetty
  7. echo "pts/6" >> /etc/securetty
  8. echo "pts/7" >> /etc/securetty
  9. echo "pts/8" >> /etc/securetty
  10. echo "pts/9" >> /etc/securetty
  11. echo "pts/10" >> /etc/securetty

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

  1. sudo systemctl start xinetd
  2. sudo systemctl enable xinetd

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

  1. sudo firewall-cmd --permanent --add-service=telnet
  2. sudo firewall-cmd --reload

确认telnet服务状态

sudo systemctl status xinetd

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

  1. systemctl restart telnet.socket
  2. 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

  1. #执行以下命令
  2. cd /usr/local/src
  3. wget https://www.zlib.net/zlib-1.3.1.tar.gz
  4. #解压zlib
  5. tar -xzvf zlib-1.3.1.tar.gz
  6. #进入zlib解压目录
  7. cd zlib-1.3.1
  8. ls /usr/local/
  9. ./configure --prefix=/usr/local/zlib
  10. make -j 2
  11. make test
  12. make install
  13. ls /usr/local/zlib/
  14. echo '/usr/local/zlib/lib' >> /etc/ld.so.conf.d/zlib.conf
  15. 加载配置
  16. ldconfig -v
  17. ldconfig
  18. 查zlib版本
  19. cat /usr/local/zlib/lib/pkgconfig/zlib.pc
  20. 创建新的链接
  21. cp /usr/local/zlib/lib/libz.so.1.3.1 /usr/lib64/
  22. cd /usr/lib64/
  23. mv libz.so libz.so.bak
  24. mv libz.so.1 libz.so.1.bak
  25. ln -s libz.so.1.3.1 libz.so.1
  26. 确认新版本是否存在
  27. strings /lib64/libz.so.1 |grep "ZLIB*"
  28. 操作了一通发现没有1.3.1 也不知道安装成功没有

测试

备份、卸载原有OpenSSL
 

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

安装openssl
 

  1. wget https://www.openssl.org/source/openssl-1.1.1w.tar.gz --no-check-certificate
  2. tar -xzvf openssl-1.1.1w.tar.gz
  3. cd openssl-1.1.1w/
  4. ./config --prefix=/usr
  5. make && make install

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

验证

  1. whereis openssl
  2. openssl: /usr/bin/openssl /usr/lib64/openssl /usr/include/openssl /usr/share/man/man1/openssl.1ssl.gz /usr/share/man/man1/openssl.1
  3. [root@vm206 openssl-1.1.1w]# openssl version
  4. OpenSSL 1.1.1w 11 Sep 2023

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

  1. Bin: /usr/local/bin/openssl
  2. include库 :/usr/local/include/openssl
  3. lib库:/usr/local/lib64/
  4. engine库:/usr/lib64/openssl/engines

查看openssh位置,备份

whereis ssh sshd

  1. ssh: /usr/bin/ssh /etc/ssh /usr/share/man/man1/ssh.1.gz
  2. 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 这样可以省去的软连接、更新链接库的问题

验证

  1. whereis openssl
  2. openssl  version
  3. OpenSSL 1.1.1h 22 Sep 2020

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

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

升级openssh

systemctl stop sshd

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

备份文件目录

  1. mv /etc/ssh /etc/ssh.bak
  2. mv /usr/bin/ssh /usr/bin/ssh.bak
  3. mv /usr/sbin/sshd /usr/sbin/sshd.bak
  4. mv /etc/pam.d/sshd  /etc/pam.d/sshd.bak

卸载旧版OpenSSH

yum remove openssh

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

  1. yum update -y
  2. yum install epel-release -y
  3. yum install openssh-clients openssh-server openssh-devel -y
  4. 以上内容没有操作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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/933496
推荐阅读
相关标签
  

闽ICP备14008679号