OpenSSH安全漏洞修复升级10.3p1版本

一、前言

OpenSSH的安全漏洞时,确保你的系统是最新的,并且安装了最新的安全补丁是非常重要的。OpenSSH是一个广泛使用的安全协议,用于远程登录和其他网络服务。

二、 确认系统版本

[root@centos7-7 ~]# uname -a
Linux centos7-7 3.10.0-1062.el7.x86_64 #1 SMP
Wed Aug 7 18:08:02 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
[root@centos7-7 ~]# cat /etc/centos-release
CentOS Linux release 7.7.1908 (Core)

三、备份配置文件

3.1、备份

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

3.2、安装相应的前置依赖

#yum install -y perl-CPAN perl-ExtUtils-CBuilder perl-ExtUtils-MakeMaker
wget https://cpan.metacpan.org/authors/id/B/BI/BINGOS/ExtUtils-MakeMaker-7.70.tar.gz

3.3安装ExtUtils-MakeMaker-7.70.tar.gz

1. 解压
tar -xzf ExtUtils-MakeMaker-7.70.tar.gz
cd ExtUtils-MakeMaker-7.70
2. 配置并生成 Makefile
perl Makefile.PL
3. 编译
make
4. 安装(可能需要 root 权限)
sudo make install
perl -MExtUtils::MakeMaker -e 'print "ExtUtils::MakeMaker is installed\n"'
sudo rpm -ivh pam-devel-1.1.8-23.el7.x86_64.rpm

3.4 mkdir peer && cd peer

下载主要的 Perl 相关包

yumdownloader --resolve perl perl-devel perl-core

下载缺失模块对应的系统包

yumdownloader --resolve perl-ExtUtils-MakeMaker perl-IPC-Cmd perl-Text-Template

使用 rpm 命令进行本地安装(忽略依赖,因为所有包都在这里了)

sudo rpm -ivh *.rpm --nodeps --force

四、安装编译依赖工具包

4.1、基础依赖

 yum install -y vim gcc gcc-c++ glibc make autoconf openssl openssl-devel pcre-devel pam-devel zlib-devel tcp_wrappers-devel tcp_wrappers libedit-devel perl-IPC-Cmd wget tar lrzsz

4.2、必要依赖

sudo yum install pam-devel perl-IPC-Cmd

五、 下载升级,依赖包

5.1、下载

cd /usr/local/src
wget https://www.zlib.net/zlib-1.3.1.tar.gz
wget https://www.openssl.org/source/openssl-3.3.1.tar.gz
wget https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-9.8p1.tar.gz
tar -zxvf zlib-1.3.1.tar.gz
tar -zxvf openssl-3.3.1.tar.gz
tar -zxvf openssh-9.8p1.tar.gz

5.2、zlib安装

cd /usr/local/src/zlib-1.3.1
./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

5.3、openssl安装

wget https://www.openssl.org/source/openssl-3.3.1.tar.gz
tar -zxvf openssl-3.3.1.tar.gz && cd openssl-3.3.1
# 配置(--prefix 是程序目录,--openssldir 是配置目录)
./config --prefix=/usr/local/openssl --openssldir=/usr/local/openssl shared zlib
make -j$(nproc)
# 可选测试:make test
sudo make install
# 配置动态库路径(关键!)
sudo sh -c 'echo "/usr/local/openssl/lib64" > /etc/ld.so.conf.d/openssl.conf'
sudo ldconfig
# 替换系统openssl命令(可选,务必备份原文件)
sudo mv /usr/bin/openssl /usr/bin/openssl.bak
sudo ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl
# 验证版本
openssl version # 应输出 OpenSSL 3.3.1

image.png#456px #225px
image.png#462px #228px
image.png#471px #115px
image.png#466px #33px
image.png#454px #43px

5.4、备份并卸载老版本OpenSSH

#备份ssh配置文件
cp -p /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
cp -p /etc/ssh/sshd_config  /usr/local/openssh/etc/sshd_config
cp -p /usr/sbin/sshd /usr/sbin/sshd.bak
cp -p /usr/bin/ssh /usr/bin/ssh.bak
cp -p /usr/bin/ssh-keygen /usr/bin/ssh-keygen.bak
cp -p /etc/ssh/ssh_host_ecdsa_key.pub /etc/ssh/ssh_host_ecdsa_key.pub.bak
#停止ssh服务
systemctl stop sshd
#备份ssh文件
cp -r /etc/ssh /etc/ssh.old
#查询原有ssh包并卸载
rpm -qa | grep openssh
openssh-clients-7.4p1-21.el7.x86_64
openssh-server-7.4p1-21.el7.x86_64
openssh-7.4p1-21.el7.x86_64
rpm -e --nodeps openssh-clients-7.4p1-23.el7_9.x86_64 openssh-7.4p1-23.el7_9.x86_64 openssh-server-7.4p1-23.el7_9.x86_64
#根据查询结果,卸载原有OpenSSH包
yum remove openssh-7.4p1-21.el7.x86_64
#再次查看已经没有了
rpm -qa | grep openssh
————————————————

5.5、编译升级openssh

cd /usr/local/src/
#解压
tar zxvf openssh-9.8p1.tar.gz 
cd openssh-9.8p1
#编译安装openssh 指明zlib路径和ssl路径
./configure \
    --prefix=/usr/local/openssh\
    --sysconfdir=/etc/ssh \
    --with-ssl-dir=/usr/local/openssl \
    --with-zlib=/usr/local/zlib \
    --with-pam \
    --with-selinux \
    --with-ssl-engine \
    --with-md5-passwords
make && make install

image.png#458px #165px
image.png#462px #188px

5.6、创建主机密钥(Host Keys)

# 进入配置文件目录
cd /usr/local/openssh/etc
# 生成 ECDSA 主机密钥(用于 SSH 协议版本2)
/usr/local/openssh/bin/ssh-keygen -t ecdsa -f ssh_host_ecdsa_key -N ""
# 生成 RSA 主机密钥(兼容性最好)
/usr/local/openssh/bin/ssh-keygen -t rsa -b 4096 -f ssh_host_rsa_key -N ""
# 生成 ED25519 主机密钥(现代推荐算法)
/usr/local/openssh/bin/ssh-keygen -t ed25519 -f ssh_host_ed25519_key -N ""
# 设置目录权限
chmod 755 /usr/local/openssh/etc
# 配置文件权限
chmod 644 /usr/local/openssh/etc/sshd_config
# 私钥权限(仅 root 可读写)
chmod 600 /usr/local/openssh/etc/ssh_host_*
# 公钥权限(所有人可读,仅 root 可写)
chmod 644 /usr/local/openssh/etc/ssh_host_*.pub

image.png#440px #111px

5.7、创建配置文件 sshd_config;

cp -p /etc/ssh/sshd_config  /usr/local/openssh/etc/sshd_config

5.8、创建 PAM 配置文件(可选但重要)

# 创建 PAM 配置文件
vim /etc/pam.d/sshd
#%PAM-1.0
auth       required     pam_sepermit.so
auth       substack     password-auth
auth       include      postlogin
account    required     pam_nologin.so
account    include      password-auth
password   include      password-auth
session    include      password-auth
session    include      postlogin
session    optional     pam_xauth.so

5.9、测试配置是否正确

# 删除历史配置
 rm -rf  /etc/ssh/sshd_config /usr/sbin/sshd  /usr/bin/ssh /usr/bin/ssh-keygen /etc/ssh/ssh_host_ecdsa_key.pub
#将编译安装的新配置文件   拷贝到原路径下
cp /usr/local/openssh/etc/sshd_config /etc/ssh/sshd_config
cp /usr/local/openssh/sbin/sshd /usr/sbin/sshd
cp /usr/local/openssh/bin/ssh /usr/bin/ssh
cp /usr/local/openssh/bin/ssh-keygen /usr/bin/ssh-keygen
cp /usr/local/openssh/etc/ssh_host_ecdsa_key.pub /etc/ssh/ssh_host_ecdsa_key.pub
chmod 755 /etc/ssh/
chmod 644 /etc/ssh/sshd_config
chmod 600 /etc/ssh/ssh_host_*
chmod 644 /etc/ssh/ssh_host_*.pub
#ssh允许root登录、需要密码进行验证
echo 'PermitRootLogin yes' >>/usr/local/openssh/etc/sshd_config
echo 'PubkeyAuthentication yes' >>/usr/local/openssh/etc/sshd_config
echo 'PasswordAuthentication yes' >>/usr/local/openssh/etc/sshd_config
echo 'PermitRootLogin yes' >>/etc/ssh/sshd_config
echo 'PubkeyAuthentication yes' >>/etc/ssh/sshd_config
echo 'PasswordAuthentication yes' >>/etc/ssh/sshd_config
/usr/local/openssh/sbin/sshd -t -f /usr/local/openssh/etc/sshd_config
# 备份旧密钥(可选)
mkdir /backup_keys
cp /etc/ssh/ssh_host_ecdsa_key* /backup_keys/# 删除不匹配的密钥
rm -f /etc/ssh/ssh_host_ecdsa_key
rm -f /etc/ssh/ssh_host_ecdsa_key.pub
# 重新生成 ECDSA 密钥
ssh-keygen -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key -N ""
#拷贝启动脚本
rm -rf /etc/init.d/sshd
## 9.8
cp -p /usr/local/src/openssh-9.8p1/contrib/redhat/sshd.init /etc/init.d/sshd
## 10.3
cp -p /usr/local/src/openssh-10.3p1/contrib/redhat/sshd.init /etc/init.d/sshd
#给sshd添加可执行权限
chmod +x /etc/init.d/sshd
#设置开机自启
systemctl enable sshd
#重新启动sshd服务
#mkdir -p  /etc/ssh/moduli
systemctl restart sshd
#查看sshd服务状态
systemctl status sshd
#查看ssh版本是否升级成功,可以查看到已经是9.5版本了
ssh -V
OpenSSH_10.3p1, OpenSSL 3.3.1 4 Jun 2024

image.png#450px #98px
image.png#456px #156px
image.png#456px #121px

posted on 2026-08-10 15:24  爱河  阅读(1)  评论(0)    收藏  举报

导航