Linux修复OpenSSH漏洞

编译

Centos7.9

使用工具进行编译rpm安装包

项目地址:https://github.com/boypt/openssh-rpms

下载源码包上传至服务器(或直接下载编译好的安装包进行安装)

安装编译环境:

yum install -y perl perl-IPC-Cmd wget unzip
yum groupinstall -y "Development Tools"
yum install -y imake rpm-build pam-devel krb5-devel zlib-devel libXt-devel libX11-devel gtk2-devel initscripts chkconfig systemd-devel perl-Time-Piece

解压源码

unzip openssh-rpms-main.zip

下载OpenSSH及OpenSSL升级包

./pullsrc.sh

修改version.env文件,

# WITH_OPENSSL:
#   0: build without openssl (using openssh internal crypto)  #不用OpenSSL进行构建(使用OpenSSH内部自带的加密库)
#   1: use system openssl  #使用系统中已安装OpenSSL
#   2: build openssl statically  #静态编译OpenSSL(将OpenSS库直接打包进程序中)
#   undefined: let the script decide (default)  #由脚本自行决定(默认选项)
WITH_OPENSSL=2

执行编译

./compile.sh

查看编译结果:

[root@test openssh-rpms-main]# ll el7/RPMS/x86_64/
total 28256
-rw-r--r--. 1 root root  9810292 Sep 12 09:13 openssh-10.5p1-1.el7.x86_64.rpm
-rw-r--r--. 1 root root 10339036 Sep 12 09:13 openssh-clients-10.5p1-1.el7.x86_64.rpm
-rw-r--r--. 1 root root  8776496 Sep 12 09:13 openssh-server-10.5p1-1.el7.x86_64.rpm
[root@test openssh-rpms-main]# ll output/
total 28256
-rw-r--r--. 1 root root  9810292 Sep 12 09:13 openssh-10.5p1-1.el7.x86_64.rpm
-rw-r--r--. 1 root root 10339036 Sep 12 09:13 openssh-clients-10.5p1-1.el7.x86_64.rpm
-rw-r--r--. 1 root root  8776496 Sep 12 09:13 openssh-server-10.5p1-1.el7.x86_64.rpm
[root@test openssh-rpms-main]#

安装

Centos7.9

# 备份PAM和ssh配置
cd el7/RPMS/x86_64/  或  output/
cp /etc/pam.d/sshd /etc/pam.d/sshd.before
cp /etc/ssh/sshd_config /etc/ssh/sshd_config.before

# 升级openssh rpm包
rpm -Uvh *.rpm

# 进入ssh目录,修正私钥权限
cd /etc/ssh/
chmod 400 ssh_host_ecdsa_key ssh_host_ed25519_key ssh_host_rsa_key

# 开启root登录
echo "PermitRootLogin yes" >> /etc/ssh/sshd_config

# 启用PAM
sed -i "s/#UsePAM no/UsePAM yes/g" /etc/ssh/sshd_config

# 恢复pam配置
/bin/cp /etc/pam.d/sshd.before /etc/pam.d/sshd

# 删除已存在的KexAlgorithms、GSSAPIKexAlgorithms、HostKeyAlgorithms行
sed -i '/KexAlgorithms/d' /etc/ssh/sshd_config
sed -i '/GSSAPIKexAlgorithms/d' /etc/ssh/sshd_config
sed -i '/HostKeyAlgorithms/d' /etc/ssh/sshd_config
# 添加Kex 算法
echo "KexAlgorithms curve25519-sha256,curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1" >> /etc/ssh/sshd_config
echo "HostKeyAlgorithms +ssh-rsa" >> /etc/ssh/sshd_config

# 关键:校验sshd配置语法,有报错绝对不要重启sshd!
sshd -t

# 如果`sshd -t`有报错,**不要重启 sshd**,立刻回滚备份文件
# 无报错输出则可正常重启sshd服务
systemctl restart sshd
systemctl status sshd



执行建议

  1. 务必保留至少一个已登录 ssh 窗口,不要关闭!
  2. 进入 rpm 包目录 el7/RPMS/x86_64/ 再执行脚本,否则 rpm -Uvh *.rpm 找不到包
  3. 如果sshd -t有报错,不要重启 sshd,立刻回滚备份文件
# 回滚命令
cp /etc/ssh/sshd_config.before /etc/ssh/sshd_config
cp /etc/pam.d/sshd.before /etc/pam.d/sshd

执行前备份原安装包

# 安装工具
yum install -y yum-utils

# 创建备份目录
mkdir -p /root/old_openssh_rpms

# 获取当前系统上openssh完整包名,然后下载
yumdownloader --destdir=/root/old_openssh_rpms $(rpm -q openssh openssh-clients openssh-server)

回退软件包

cd /root/old_openssh_rpms
rpm -Uvh --oldpackage openssh-*.rpm
# 配置已经是旧的,不用再cp
sshd -t
systemctl restart sshd

← 返回首页 进入后台