修复等保漏洞:升级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才回滚成功

相关推荐
爱吃土豆的马铃薯ㅤㅤㅤㅤㅤㅤㅤㅤㅤ3 分钟前
配置springdoc swagger开关
java
Echo flower6 分钟前
Spring Boot WebFlux 实现流式数据传输与断点续传
java·spring boot·后端
没有bug.的程序员12 分钟前
微服务中的数据一致性困局
java·jvm·微服务·架构·wpf·电商
鸽鸽程序猿17 分钟前
【Redis】Java客户端使用Redis
java·redis·github
悦悦子a啊17 分钟前
使用 Java 集合类中的 LinkedList 模拟栈以此判断字符串是否是回文
java·开发语言
Lucky小小吴19 分钟前
java代码审计入门篇——Hello-Java-Sec(完结)
java·开发语言
一个想打拳的程序员21 分钟前
无需复杂配置!用%20docker-webtop%20打造跨设备通用%20Linux%20桌面,加载cpolar远程访问就这么简单
java·人工智能·docker·容器
一起养小猫23 分钟前
LeetCode100天Day2-验证回文串与接雨水
java·leetcode
清晓粼溪27 分钟前
Java登录认证解决方案
java·开发语言
小徐Chao努力28 分钟前
Go语言核心知识点底层原理教程【变量、类型与常量】
开发语言·后端·golang