OpenSSH和OpenSSL升级部署实战
OpenSSH和OpenSSL升级至最新
一、需求
生产环境有很多服务器漏扫发现了OpenSSH和OpenSSL的漏洞,修复的方法基本都是升级。
注意:
升级前一定要打开两个以上的SHELL连接,并且要保证连接不能超时退出,因为升级如果失败会导致无法建立新连接,那么还可以继续使用已连接窗口回退。
二、升级OpenSSL
1、检查当前版本
openssl version -a
2、分别取openssl的官网下载最新的版本,如当前的:
https://www.openssl.org/source/openssl-1.1.1b.tar.gz
3、编译并安装openssl到新的目录
tar xvf openssl-1.1.1b.tar.gz
./config –prefix=/usr/local/openssl
make -j 2
make install
4、备份旧版的文件
mv /usr/bin/openssl /usr/bin/openssl.bak
mv /usr/include/openssl /usr/include/openssl.bak
ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl
ln -s /usr/local/openssl/include/openssl /usr/include/openssl
5、重新加载openssl库文件,否则执行openssl命令时会提示找不到共享库,这一步也很重要,如果没有这一步,后面升级openssh时会configure过不去
echo “/usr/local/openssl/lib” >> /etc/ld.so.conf
ldconfig -v
为载入openssl库时执行命令会提示如下错误:
[2019-02-28 21:52:30 root@devops bin]# ./openssl version
./openssl: error while loading shared libraries: libssl.so.1.1: cannot open shared object file: No such file or directory
6、现在可以检查新的版本了
[2019-02-28 21:55:36 root@devops bin]# openssl version -a
OpenSSL 1.1.1b? 26 Feb 2019
built on: Thu Feb 28 13:48:20 2019 UTC
platform: linux-x86_64
options:? bn(64,64) rc4(16x,int) des(int) idea(int) blowfish(ptr)?
compiler: gcc -fPIC -pthread -m64 -Wa,–noexecstack -Wall -O3 -DOPENSSL_USE_NODELETE -DL_ENDIAN -DOPENSSL_PIC -DOPENSSL_CPUID_OBJ -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DKECCAK1600_ASM -DRC4_ASM -DMD5_ASM -DAES_ASM -DVPAES_ASM -DBSAES_ASM -DGHASH_ASM -DECP_NISTZ256_ASM -DX25519_ASM -DPADLOCK_ASM -DPOLY1305_ASM -DNDEBUG
OPENSSLDIR: “/usr/local/openssl/ssl”
ENGINESDIR: “/usr/local/openssl/lib/engines-1.1”
Seeding source: os-specific
三、升级OpenSSH
1、检查当前版本
[2019-02-28 22:00:20 root@devops openssh-7.9p1]# ssh -V
OpenSSH_7.4p1, OpenSSL 1.0.2k-fips? 26 Jan 2017
2、去openssh官网下载最新版本,如:
https://openbsd.hk/pub/OpenBSD/OpenSSH/portable/openssh-7.9p1.tar.gz
3、编译并安装openssh
tar xvf openssh-7.9p1.tar.gz
cd openssh-7.9p1
./configure –prefix=/usr/local/openssh –with-zlib=/lib64 –with-ssl-dir=/usr/local/openssl –with-ssl-engine –with-pam –with-pam-service=sshd –with-privsep-user=sshd –with-selinux –with-privsep-path=/var/empty –with-md5-passwords
make -j 2
make install
选项说明:
–prefix 指定安装路径
–with-zlib 指定zlib库路径,需要安装zlib和zlib-devel包
–with-ssl-dir 指定openssl路径,如果之前升级ssl时没有执行ldconfig 的操作,那么此处configure时会报错。
–with-ssl-engine 启用硬件引擎支持
–with-pam? 启用pam,需要安装pam和pam-devel包
–with-privsep-user? 指定权限分离一户
–with-selinux 激活selinux支持
–with-privsep-path 指定权限分离的chroot目录
–with-md5-passwords 允许使用md5密码
和openssl相关的报错:
checking for getpgrp… yes
checking if getpgrp accepts zero args… yes
checking OpenSSL header version… not found
configure: error: OpenSSL version header not found.
这个错误坑我踩了很久才偶然解决,娘了个西皮。
4、备份openssh配置
mv /etc/ssh /etc/ssh.bak
mv /usr/sbin/sshd /usr/sbin/sshd.bak
ln /usr/local/openssh/sbin/sshd /usr/sbin/sshd
ln -s /usr/local/openssh/etc/ /etc/ssh
mv /usr/bin/scp /usr/bin/scp.bak
mv /usr/bin/sftp /usr/bin/sftp.bak
mv /usr/bin/ssh /usr/bin/ssh.bak
mv /usr/bin/ssh-add /usr/bin/ssh-add.bak
mv /usr/bin/ssh-agent /usr/bin/ssh-agent.bak
mv /usr/bin/ssh-keyscan /usr/bin/ssh-keyscan.bak
mv /usr/bin/ssh-keygen /usr/bin/ssh-keygen.bak
ln /usr/local/openssh/bin/scp /usr/bin/scp
ln /usr/local/openssh/bin/sftp /usr/bin/sftp
ln /usr/local/openssh/bin/ssh /usr/bin/ssh
ln /usr/local/openssh/bin/ssh-add /usr/bin/ssh-add
ln /usr/local/openssh/bin/ssh-agent /usr/bin/ssh-agent
ln /usr/local/openssh/bin/ssh-keygen /usr/bin/ssh-keygen
ln /usr/local/openssh/bin/ssh-keyscan /usr/bin/ssh-keyscan
5、重启sshd服务
service sshd restart
6、版本检查
[2019-02-28 22:44:55 root@devops ~]# sshd -V
unknown option — V
OpenSSH_7.9p1, OpenSSL 1.1.1b 26 Feb 2019
usage: sshd [-46DdeiqTt] [-C connection_spec] [-c host_cert_file]
[-E log_file] [-f config_file] [-g login_grace_time]
[-h host_key_file] [-o option] [-p port] [-u len]
[2019-02-28 22:44:56 root@devops ~]# ssh -V
OpenSSH_7.9p1, OpenSSL 1.1.1b 26 Feb 2019
四、更新帮助文档
为了保持新版的man帮助文档,需要配置下:
cat >> /etc/man.config <<EOF
#for openssl openssh
MANPATH_MAP /usr/local/openssl/bin /usr/local/openssl/share/man
MANPATH_MAP /usr/local/openssh/bin /usr/local/openssh/share/man
MANPATH_MAP /usr/local/openssh/sbin /usr/local/openssh/share/man
#end
EOF
现在随便man sshd翻到底就可以看到文档是最新的了。
如果不想配置这里也可以在编译时指定 –mandir=/usr/share/man 选项,那么安装时会自动把帮助文档安装到系统默认帮助目录。
#!/bin/bash
tar -zxvf openssl-1.1.1g.tar.gz
tar -zxvf openssh-8.3p1.tar.gz
yum -y install gcc
#upgrade openssl
mv /usr/bin/openssl /usr/bin/openssl.bak
cd openssl-1.1.1g
./config shared && make && make install
cp -r include/openssl /usr/include/
ln -s /usr/local/bin/openssl /usr/bin/openssl
ln -snf /usr/local/lib64/libssl.so.1.1 /usr/lib64/libssl.so
ln -snf /usr/local/lib64/libssl.so.1.1 /usr/lib64/libssl.so.1.1
ln -snf /usr/local/lib64/libcrypto.so.1.1 /usr/lib64/libcrypto.so
ln -snf /usr/local/lib64/libcrypto.so.1.1 /usr/lib64/libcrypto.so.1.1
#reload ku file,check file version
ldconfig
openssl version
@@
安装openssl遇到的坑
############################################
下载最新ssl ssh软件版本
736 2023-03-26 00:58:21 root wget https://www.openssl.org/source/openssl-1.1.1g.tar.gz --no-check-certificate
[root@zabbix-server ~]# wget https://files-cdn.cnblogs.com/files/luckjinyan/openssh-8.3p1.tar.gz
ssh脚本:
#!/bin/bash
#bianyi important file
yum -y install zlib-devel
tar -zxvf openssh-8.3p1.tar.gz
cd openssh-8.3p1
sed -i "/GSSAPI/s/GSSAPI/#GSSAPI/" /etc/ssh/sshd_config
sed -i "/Root/s/#PermitRootLogin/PermitRootLogin/" /etc/ssh/sshd_config
./configure --prefix=/usr --sysconfdir=/etc/ssh/ --with-ssl-dir=/usr/local/openssl/ --with-md5-passwords --without-openssl-header-check
make && make install
ssh -V
chmod 600 /etc/ssh/ssh_host_ecdsa_key
sed -i "/Type/s/Type/#Type/" /usr/lib/systemd/system/sshd.service
systemctl daemon-reload
systemctl restart sshd
ssh -V