赞
踩
因漏洞扫描扫描出openssh相关的高危漏洞,处理新发布的CVE-2024-6387关于openssh的漏洞,需要升级openssh到9.8版本。
本文记录的过程是基于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
由于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
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代表的是第几个模拟终端.
- #执行以下命令
- 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 的要求,也会继续编译。
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.
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
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。