修复等保漏洞:升级ssh到9.4版本

故事背景

等保每年例行的漏洞安全扫描,扫到了SSH需要升级,但是升级SSH还是比较危险的,如果升级失败,或者升级过程中SSH断开,则无法再用SSH连上服务器...

使用telnet登录服务器

如果ssh无法连接服务器,需要通过telnet登录服务器,参考链接:www.cnblogs.com/hahaha11112...

shell 复制代码
## 安装xinted
yum install -y xinetd
### yum 安装telnet-server telnet-client
yum -y install telnet-server telnet
### 查看软件版本
rpm -qa telnet-server
telnet-server-0.17-66.el7.x86_64

## 配置telnet 文件
## 若此文件不存在,则创建这个文件。将其中disable=yes改为disable=no或注释掉。
vim /etc/xinetd.d/telnet
service telnet 
{ flags = REUSE 
socket_type = stream 
wait = no
user = root
server = /usr/sbin/in.telnetd
log_on_failure += USERID
disable = no
}

### 重启服务
systemctl restart xinetd 
systemctl restart telnet.socket

## telnet 默认的情况之下不允许 root 以 telnet 进入 Linux 主机,创建普通用户登录系统切换root。
telnet 192.168.99.147
makefile 复制代码
添加用户: useradd -m 用户名
设置密码: passwd 用户名
删除用户: userdel -r 用户名

升级

准备工作做完了,正式开始升级 参考链接:blog.csdn.net/liu_chen_ya...

安装一些必要的命令(需要用到的)

yum install wget gcc openssl-devel pam-devel rpm-build zlib-devel -y

下载openssl

wget www.openssl.org/source/old/... --no-check-certificate

2.2 解压并放到/usr/local/目录

tar xf openssl-1.1.1t.tar.gz -C /usr/local

2.3 编译安装openssl

js 复制代码
# 进入openssl目录
cd /usr/local/openssl-1.1.1t 
# 编译安装openssl 
./config shared --prefix=/usr/local/openssl
make -j 4 
make install

2.4 为openssl做软连接

js 复制代码
echo "/usr/local/openssl/lib/" >> /etc/ld.so.conf
# 加载配置文件
ldconfig
# 备份以前的openssl
mv /usr/bin/openssl /usr/bin/openssl.old
# 软连接,如果提示软连接已存在,记得备份软连接,然后在执行下面再次软连接,要不然会出问题,会导致root目录看不了,磁盘看不了,sftp连接不上;
ln -sv /usr/local/openssl/bin/openssl /usr/bin/openssl
ln -s /usr/local/openssl/lib/libssl.so.1.1 /usr/lib64/libssl.so.1.1
ln -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

确保终端一直连接 断开远程连接就不能用了

shell 复制代码
## 查看当前安装包
[root@localhost ~]# rpm -qa | grep openssh
openssh-clients-7.4p1-21.el7.x86_64
openssh-7.4p1-21.el7.x86_64
openssh-server-7.4p1-21.el7.x86_64

## 查看当前OpenSSH版本(Centos7 默认使用OpenSSH_7.4p1)
[root@localhost ~]# ssh -V
OpenSSH_7.4p1, OpenSSL 1.0.2k-fips  26 Jan 2017

## 备份现有的SSH
[root@localhost ~]# mv /etc/ssh/ /etc/ssh.bak
[root@localhost ~]# mv /usr/bin/ssh /usr/bin/ssh.bak
[root@localhost ~]# mv /usr/sbin/sshd /usr/sbin/sshd.bak

## 如果您是第一次升级,备份/etc/init.d/sshd时会不存在,不影响后续操作
[root@localhost ~]# mv /etc/init.d/sshd /etc/init.d/sshd.bak
mv: 无法获取'/etc/init.d/sshd' 的文件状态(stat): No such file or directory

## 卸载现有OpenSSH
rpm -e --nodeps $(rpm -qa |grep openssh)
##确保已经卸载成功(没有返回则卸载成功)
rpm -qa | grep openssh

4、下载OpenSSH二进制包

wget cdn.openbsd.org/pub/OpenBSD...

5、解压并编译安装OpenSSH

shell 复制代码
# 将下载的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、授权

shell 复制代码
[root@localhost openssh-9.4p1]# chmod 600 /etc/ssh/*

7、复制配置文件

js 复制代码
[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用户远程登录

shell 复制代码
# 修改配置允许root用户远程登录(允许使用密码登录,允许root远程登录,开启端口,赋予/etc/init.d/sshd权限)
cat >>/etc/ssh/sshd_config<<EOF
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,生成服务配置文件,并重启服务

shell 复制代码
# 启用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、验证升级是否成功

shell 复制代码
[root@localhost ~]# ssh -V
OpenSSH_9.4p1, OpenSSL 1.1.1t 7 Feb 2023

问题

error: %preun(openssh-server-8.5p1-1.el7.x86_64) scriptlet failed, exit status 1

rpm -e --nodeps --noscripts $(rpm -qa |grep openssh)

总结

升级SSH版本的时候一定要小心,先打开telnet登录以备升级失败登不上服务器,另外备份好旧版本,试过升级一台机器发现升级失败,因为没有权限,搞了半天也不行,本来就是root账号,用了sudo也不行,后面重装了ssh才回滚成功

相关推荐
何苏三月6 分钟前
设计模式 - 单例模式(懒汉式、饿汉式、静态内部类、枚举)
java·单例模式
Renas_TJOvO10 分钟前
排序算法汇总
java·数据结构·算法
秋恬意20 分钟前
Java 反射机制详解
java·开发语言
爱上语文28 分钟前
LeetCode每日一题
java·算法·leetcode
ღ᭄ꦿ࿐Never say never꧂36 分钟前
重生之我在Java世界------学工厂设计模式
java·设计模式·简单工厂模式·应用场景
尘浮生1 小时前
Java项目实战II基于Spring Boot的火锅店管理系统设计与实现(开发文档+数据库+源码)
java·开发语言·数据库·spring boot·后端·微信小程序·旅游
wrx繁星点点1 小时前
桥接模式:解耦抽象与实现的利器
android·java·开发语言·jvm·spring cloud·intellij-idea·桥接模式
羊小猪~~1 小时前
C/C++语言基础--C++模板与元编程系列二类模板、全特化、偏特化、编译模型简介、实现简单Vetctor等…………)
java·c语言·开发语言·c++·visual studio code·visual studio
l138494274511 小时前
C语言储存变量 java循环语句和循环跳转
java·c语言·开发语言·算法
咸芝麻鱼2 小时前
django模板出现:‘WSGIRequest‘ object has no attribute ‘Get‘错误
后端·python·django