1 背景
1.1 bug背景 对于openssl,其版本低于1.1.1l会存在重大漏洞。 同时CentOS7默认自带的openssl版本为1.0.2k, 其中OpenSSH 低于 8.3p1同样存在重大漏洞,建议对OpenSSH和OpenSSL进行升级,且OpenSSL和OpenSSH依赖共存。 工作中,可能存在需要升级OpenSSL组件的情况,特此总结分享。
2 升级操作
2.1 查看版本 查看现有版本。 - [root@opensshvm ~]# cat /etc/redhat-release
- CentOS Linux release 7.6.1810 (Core)
- [root@opensshvm ~]# openssl version
- OpenSSL 1.0.2k-fips 26 Jan 2017
- [root@opensshvm ~]# ssh -V
- OpenSSH_7.4p1, OpenSSL 1.0.2k-fips 26 Jan 2017
复制代码
2.2 升级准备 建议升级之前做如下准备,避免出现异常: 安装相关编译所需软件(略) 关闭防火墙 关闭SELinux 备份ssh文件 开启多个窗口
2.2.1 安装依赖 安装编译所需依赖包。 - [root@opensshvm ~]# yum install -y gcc gcc-c++ glibc make autoconf pcre-devel pam-devel zlib-devel
复制代码
2.2.2 关闭安全组件 - [root@opensshvm ~]# sed -i 's/=enforcing/=disabled/g' /etc/selinux/config
- [root@opensshvm ~]# systemctl disable firewalld.service --now
复制代码
2.2.3 备份SSH 对现有SSH相关文件/目录进行备份。 - [root@opensshvm ~]# mv /usr/bin/ssh /usr/bin/ssh.bak
- [root@opensshvm ~]# mv /usr/sbin/sshd /usr/sbin/sshd.bak
- [root@opensshvm ~]# cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
- [root@opensshvm ~]# mv /etc/ssh/ /etc/ssh.bak #也可直接备份整个目录
- [root@opensshvm ~]# mv /usr/lib/systemd/system/sshd.service .
复制代码
2.3 升级OpenSSL
2.3.1 下载文件 建议从官方进行下载:https://www.openssl.org 官方中提供了其他下载链接:https://www.openssl.org/source/mirror.html - [root@opensshvm ~]# cd /tmp/
- [root@opensshvm tmp]# wget https://www.openssl.org/source/openssl-1.1.1o.tar.gz
- [root@opensshvm tmp]# tar -zxvf openssl-1.1.1o.tar.gz
- [root@opensshvm tmp]# cd openssl-1.1.1o/
- [root@opensshvm openssl-1.1.1o]# ./config --prefix=/usr/local/openssl no-zlib
- [root@opensshvm openssl-1.1.1o]# make && make install
- [root@opensshvm openssl-1.1.1o]# mv /usr/bin/openssl /usr/bin/openssl.bak
- [root@opensshvm openssl-1.1.1o]# ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl
- [root@opensshvm openssl-1.1.1o]# ln -snf /usr/local/openssl/lib/libssl.so.1.1 /usr/lib64/libssl.so.1.1
- [root@opensshvm openssl-1.1.1o]# ln -snf /usr/local/openssl/lib/libcrypto.so.1.1 /usr/lib64/libcrypto.so.1.1
- [root@opensshvm openssl-1.1.1o]# ln -s /usr/local/openssl/include/openssl /usr/include/openssl
- [root@opensshvm openssl-1.1.1o]# ln -s /usr/local/openssl/lib/libssl.so.1.1 /usr/local/lib64/libssl.so
- [root@opensshvm openssl-1.1.1o]# echo "/usr/local/openssl/lib" >> /etc/ld.so.conf
- [root@opensshvm openssl-1.1.1o]# penssl version
- OpenSSL 1.1.1o 3 May 2022
复制代码
2.4 升级OpenSSH
2.4.1 下载文件 建议从官方进行下载:https://www.openssh.com/openbsd.html 官方中也提供了国内下载链接:https://mirrors.aliyun.com/pub/OpenBSD/OpenSSH/portable/openssh-9.0p1.tar.gz - [root@opensshvm ~]# cd /tmp/
- [root@opensshvm tmp]# wget https://mirrors.aliyun.com/pub/OpenBSD/OpenSSH/portable/openssh-9.0p1.tar.gz
- [root@opensshvm tmp]# tar -zxvf openssh-9.0p1.tar.gz
- [root@opensshvm tmp]# cd openssh-9.0p1/
- [root@opensshvm openssh-9.0p1]# ./configure --prefix=/usr/local/openssh --sysconfdir=/etc/ssh --with-pam --with-ssl-dir=/usr/local/openssl --with-md5-passwords --with-tcp-wrappers --mandir=/usr/share/man
- [root@opensshvm openssh-9.0p1]# make && make install
复制代码
2.4.2 修改权限(非必须) 针对升级后的某些文件权限过大,建议缩小。 - [root@opensshvm openssh-9.0p1]# chmod 600 /etc/ssh/sshd_config /etc/ssh/ssh_host_rsa_key /etc/ssh/ssh_host_ecdsa_key /etc/ssh/ssh_host_ed25519_key
复制代码
2.4.3 恢复配置 OpenSSH编译安装后,会将sshd_config恢复为对应版本默认配置,可使用原配置文件进行恢复。 - [root@opensshvm ~]# cp /etc/ssh.bak/sshd_config /etc/ssh/sshd_config
- [root@opensshvm ~]# cp -a /usr/local/openssh/sbin/sshd /usr/sbin/sshd
- [root@opensshvm ~]# \cp -a /usr/local/openssh/bin/* /usr/bin/
复制代码
提示:若原配置文件没有特定配置,也可直接修改新版本默认sshd_config,以下配置项可供参考: - [root@opensshvm ~]# vim /etc/ssh/sshd_config
- ……
- Port 22
- ……
- HostKey /etc/ssh/ssh_host_rsa_key
- HostKey /etc/ssh/ssh_host_ecdsa_key
- HostKey /etc/ssh/ssh_host_ed25519_key
- ……
- SyslogFacility AUTH
- ……
- PermitRootLogin yes
- ……
- AuthorizedKeysFile .ssh/authorized_keys
- ……
- PasswordAuthentication yes
- ……
- GSSAPIAuthentication yes
- GSSAPICleanupCredentials no
- ……
- X11Forwarding yes
- ……
- PrintMotd no
- ……
- UseDNS no
- ……
- Subsystem sftp /usr/local/openssh/libexec/sftp-server
复制代码
2.5 开机启动 由于编译安装的openssh为Init进程,而非CentOS7的Systemd进程,因此需要手动重新配置开机启动。 - [root@opensshvm ~]# cp /tmp/openssh-9.0p1/contrib/redhat/sshd.init /etc/init.d/sshd
- [root@opensshvm ~]# chmod +x /etc/init.d/sshd
- [root@opensshvm ~]# systemctl daemon-reload
- [root@opensshvm ~]# chkconfig --add sshd
- [root@opensshvm ~]# chkconfig --list
- ……
- netconsole 0:off 1:off 2:off 3:off 4:off 5:off 6:off
- network 0:off 1:off 2:on 3:on 4:on 5:on 6:off
- sshd 0:off 1:off 2:on 3:on 4:on 5:on 6:off
- [root@opensshvm ~]# reboot
复制代码
2.6 确认验证 重启后查看相关服务。 - [root@opensslvm ~]# systemctl is-active sshd
- active
- [root@opensslvm ~]# netstat -tlunp | grep ssh
- tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1278/sshd: /usr/sbi
- tcp6 0 0 :::22 :::* LISTEN 1278/sshd: /usr/sbi
- [root@opensslvm ~]# ssh -V
- OpenSSH_9.0p1, OpenSSL 1.1.1o 3 May 2022
复制代码 |