Linux操作系统-升级OpenSSH修复漏洞

前言

突然接到客户电话,漏扫发现服务器OpenSSH存在漏洞,需要尽快通过升级OpenSSH修复漏洞;SSH(Secure Shell)是Linux/Unix系统管理员最常使用的远程管理工具,几乎每台服务器都运行着OpenSSH服务。正因如此,OpenSSH的安全漏洞往往影响范围极广,一旦被利用,可能导致服务器被完全控制,后果相当严重。

一般情况下,Linux的发行版对应提供的最新的OpenSSH RPM包版本都比要求修复漏洞的版本低很多,所以一般只能通过源码包进行编译安装,本文系统整理了OpenSSH升级步骤,具体如下:

一、安装基础软件包

bash 复制代码
yum install -y wget zlib* pam-* gcc openssl-devel telnet telnet-server xinetd telnet* net-tools

二、部署telnet服务

问:为什么要部署telnet服务呢?

答:一般来说,远程登录服务器都是用ssh,因为telnet是使用明文传输的,无法保证安全性,但是当我们在升级openssh时,ssh将无法使用所以无法通过ssh远程登录服务器进行openssh升级,需要临时使用telnet远程连接服务器升级openssh。注意:不要经互联网telnet远程连接服务器,可以使用其他机器作为跳板,然后内网连接服务器做openssh升级。

1)添加telnet配置文件

bash 复制代码
vi /etc/xinetd.d/telnet
# default: on
# description: The telnet server serves telnet sessions; it uses \
# unencrypted username/password pairs for authentication.
service telnet
{
flags = REUSE
socket_type = stream
wait = no
user = root
server = /usr/sbin/in.telnetd
log_on_failure += USERID
disable = no
}

2)注释配置文件/etc/pam.d/remote中的"auth required pam_securetty.so"

bash 复制代码
vi /etc/pam.d/remote
#%PAM-1.0
#auth       required     pam_securetty.so

3)重启xinetd服务

bash 复制代码
systemctl restart xinetd
systemctl status xinetd

4)远程连接测试telnet是否可用

telnet 192.168.32.132

至此,通过telnet已经可以远程到服务器上了。下面就可以开始升级openssh了。

三、升级OpenSSH

1)获取升级源码包

bash 复制代码
wget https://mirrors.aliyun.com/openssh/portable/openssh-9.1p1.tar.gz?spm=a2c6h.25603864.0.0.16103bf9f8Ydtb
mv openssh-9.1p1.tar.gz?spm=a2c6h.25603864.0.0.16103bf9f8Ydtb openssh-9.1p1.tar.gz
tar -xf openssh-9.1p1.tar.gz 

2)编译安装OpenSSH

bash 复制代码
cd openssh-9.1p1
./configure --prefix=/usr/local/openssh_9.1p1 --with-zlib=/usr/local/zlib --with-ssl-dir=/usr/local/ssl
make && make install

3)修改配置文件

bash 复制代码
vi /usr/local/openssh_9.3p2/etc/sshd_config
#LoginGraceTime 2m
PermitRootLogin yes
PubkeyAuthentication yes
PasswordAuthentication yes

4)备份原版本命令与配置,新版本命令预配置覆盖旧版本

bash 复制代码
cp /etc/init.d/sshd /etc/init.d/sshd.bak
cp contrib/redhat/sshd.init /etc/init.d/sshd
chkconfig --add sshd
cp -r /etc/ssh /etc/ssh.bak2
cp -r /usr/bin/ssh /usr/bin/ssh.bak2
cp -r /usr/sbin/sshd /usr/sbin/sshd.bak2
cp -r /usr/local/openssh_9.1p1/etc/sshd_config /etc/ssh/sshd_config
cp -r /usr/local/openssh_9.1p1/sbin/sshd /usr/sbin/sshd
cp -r /usr/local/openssh_9.1p1/bin/ssh /usr/bin/ssh
cp -r /usr/local/openssh_9.1p1/bin/ssh-keygen /usr/bin/ssh-keygen
cp -r /usr/local/openssh_9.1p1/etc/ssh_host_ecdsa_key.pub /etc/ssh/ssh_host_ecdsa_key.pub

5)修改属主与数组

bash 复制代码
cd /etc/ssh/
chown -R root:root ./*

6)修改服务配置文件

bash 复制代码
vi /usr/lib/systemd/system/sshd.service 
# Automatically generated by systemd-sysv-generator

[Unit]
Documentation=man:systemd-sysv-generator(8)
SourcePath=/etc/rc.d/init.d/sshd
Description=SYSV: OpenSSH server daemon

[Service]
Type=forking
Restart=no
TimeoutSec=5min
IgnoreSIGPIPE=no
KillMode=process
GuessMainPID=no
RemainAfterExit=no
PIDFile=/var/run/sshd.pid
ExecStart=/etc/rc.d/init.d/sshd start
ExecStop=/etc/rc.d/init.d/sshd stop
ExecReload=/etc/rc.d/init.d/sshd reload

6)重启sshd服务

bash 复制代码
systemctl daemon-reload
systemctl restart sshd.service

此时重启服务报错,查看服务状态可以看到报错信息。

vim /var/log/messages查看服务报错详细信息:

通过报错信息可以看到0640的权限对于服务太大了,需要修改为0600

修改权限后服务可以正常启动。

OpenSSH版本已经升级到要求的版本。

7)ssh远程连接测试

ssh登录远程连接成功

四、关闭telnet服务,卸载telnet(可选)

bash 复制代码
systemctl stop xinetd
yum remove -y xinetd telnet-server

至此,OpenSSH升级完成,如果您有任何疑问,请留言交流。

相关推荐
啊哈一半醒5 小时前
Windows 虚拟机搭建 CentOS 全过程(2026 最新版 + 踩坑解决)
linux·windows·centos
wunaiqiezixin5 小时前
MIT 6.S081 lazy 前置篇(lab5):缺页异常、惰性分配、写时复制、页面换出
linux·unix·os·xv6·mit6.s081
东东最爱敲键盘5 小时前
二阶段总结
运维
Benszen5 小时前
云计算基础-13:Linux网络管理实战-1
linux·运维·云计算
扬帆破浪5 小时前
文档自动检查:用 Claude Code、OpenClaw 审 WPS 文件:预览、批注、改正文
运维·服务器·wps
_kerneler5 小时前
Linux tiny RCU
linux
zt1985q6 小时前
本地部署开源网络书签与内容管理工具 Karakeep 并实现外部访问
运维·服务器·网络·数据库·网络协议·开源
具身智能进化论6 小时前
协作机器人产业进入规模化部署期,未来几年的增长从何而来
大数据·运维·人工智能·机器人·自动化·工厂方法模式
wuminyu7 小时前
虚拟线程底层ForkJoinPool的工作窃取算法机制
java·linux·c语言·jvm·c++
白狐_7988 小时前
408计算机网络第3章:以太网交换机与共享式以太网——知识总结
服务器·网络·计算机网络