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升级完成,如果您有任何疑问,请留言交流。

相关推荐
M78佐菲43 分钟前
ARM学习笔记(1)
linux·arm开发·笔记·嵌入式硬件·学习
骇客野人1 小时前
Redis 完整安装部署方案(Linux,分【源码编译】+【Docker】两种,推荐生产用源码,测试快速用 Docker)
运维
益达丫2 小时前
Socket编程揭秘:端口、IP与进程通信的底层逻辑
linux·笔记
比兔代理2 小时前
正向代理与反向代理技术辨析,为什么代理 IP 属于正向代理
服务器·网络·http·ip
ZStack开发者社区3 小时前
ZSvirt 开源月报第 1 期 · Around the World
开源·云计算·vmware·虚拟化
Wang's Blog3 小时前
Java 接入Redis: 通用命令与键管理
java·服务器·redis
Wang's Blog3 小时前
Java 接入Redis: 列表集合与有序集合操作命令
java·服务器·redis
蓝速科技4 小时前
会议室门牌公告通知发布选型与落地指南丨蓝速科技
大数据·运维·数据库·人工智能·科技
Ivanqhz4 小时前
SVD++算法
java·服务器·网络·深度学习·神经网络
chicheese4 小时前
Linux 面试速查表:从初级到高级,附高频场景答题模板
linux·运维