技术分享第二波之Openssl&Openssh升级
上一篇我们分享了SAMBA共享的安装与简单配置,今天与大家探讨一下如何升级Openssl、Openssh。PS:升级有风险,操作需谨慎!
前言
工作中经常遇到各种漏洞扫描,最终扫描报告各种漏洞简直惨不忍睹。其中Openssl、Openssh漏洞较为常见,因此为了应用系统的安全,及时升级Openssl、Openssh版本还是很有必要的,下面就介绍下如何进行操作。
第一章 适用范围
本文档适用于以下操作系统下的 OpenSSH 软件升级操作:
○ CentOS 5
○ CentOS 6
第二章 需求
2.1 系统环境需求
在安装前,请确认系统上已经安装了以下软件包:
○ gcc
○ pam-devel
○ zlib-devel
○ perl(5 版本,OpenSSL 1.0.2j 在配置编译参数时,需要此软件)
2.2 权限需求
更新 OpenSSH 软件需要 root 用户权限。
2.3 操作环境需求
在 SHELL 内执行以下命令,可将 SHELL 语言切换至英文:
注意:在更新 OpenSSH 软件时,可能造成远程连接中断,如发生远程中断,需在 服务器控制台进行操作。
3.1 下载软件源代码包
OpenSSH 软件依赖于 OpenSSL 软件,因此,需从官方网站下载以下源代码包:
3.2 上传软件源代码包
将软件源代码包上传至服务器的 /root 目录下。
使用 root 用户登录服务器,执行以下命令查看文件是否已经上传至指定位置:
ll /root
如下,显示结果中包含 openssh-7.4p1.tar.gz 、 openssl-1.0.2j.tar.gz 则表示已上传 至指定位置。
3.3 编译 OpenSSL 软件
3.3.1 解压缩源代码
使用 root 用户登录服务器,执行以下命令解压 OpenSSL 源代码压缩包:
cd /root
tar zxf openssl-1.0.2j.tar.gz
3.3.2 配置编译参数
进入解压后的 OpenSSL 软件源代码目录:
cd /root/openssl-1.0.2j
执行以下命令配置编译参数:
./config --openssldir=/usr/local/grczs/openssl-1.0.2j -fPIC zlib
3.3.3 编译依赖文件
执行以下命令编译依赖文件:
make depend
执行完毕后,如显示以下字样,并且无提示报错,即表示编译完成:
3.3.4 编译二进制文件
执行以下命令编译 OpenSSL 二进制文件:
make
编译完成后,如显示以下字样,并且无提示报错,即表示编译完成:
make[2]: Leaving directory `/root/openssl-1.0.2j/test'
make[1]: Leaving directory `/root/openssl-1.0.2j/test'
making all in tools...
make[1]: Entering directory `/root/openssl-1.0.2j/tools'
make[1]: Nothing to be done for `all'.
make[1]: Leaving directory `/root/openssl-1.0.2j/tools'
执行以下命令测试编译结果:
make test
执行完毕后,如显示以下字样,并且无提示报错,即表示测试完成
3.3.5 安装软件包
执行以下命令安装编译后的软件包:
make install
执行完毕后,如显示以下字样,并且无提示报错,即表示安装完成
执行以下命令检查安装后的 OpenSSL 软件版本:
/usr/local/grczs/openssl-1.0.2j/bin/openssl version
执行完毕后,如显示以下字样,即表示新的 OpenSSL 软件版本已安装完毕:
[root@localhost openssl-1.0.2j]# /usr/local/grczs/openssl-1.0.2j/bin/openssl version OpenSSL 1.0.2j 26 Sep 2016
3.4 编译 OpenSSH 软件
3.4.1 解压缩源代码
使用 root 用户登录服务器,执行以下命令解压 OpenSSH 源代码压缩包:
cd /root
tar zxf openssh-7.4p1.tar.gz
3.4.2 配置编译参数
进入解压后的 OpenSSL 软件源代码目录:
cd /root/openssh-7.4p1
执行以下命令配置编译参数:
执行完毕后,需仔细检查输出结果:
1、是否已链接至正确的 OpenSSL 库(输出结果中含有 "OpenSSL 1.0.2j 26 Sep 2016" 字样):
2、是否已指向正确的 OpenSSL 目录(输出结果中含有 "/usr/local/grczs/openssl-1.0.2j" 字样):
3.4.3 编译二进制文件
执行以下命令编译 OpenSSH 二进制文件:
make
3.4.4 安装软件包
执行以下命令安装编译后的软件包:
make install
执行完毕后,如显示以下字样,并且无提示报错,即表示安装完成:
执行以下命令检查安装后的 OpenSSH 软件版本:
/usr/local/grczs/openssh-7.4p1/sbin/sshd -V
执行完毕后,如显示 "OpenSSH_7.4p1, OpenSSL 1.0.2j 26 Sep 2016" 字样,即表示 新的 OpenSSH 软件版本已安装完毕:
[root@localhost openssh-7.4p1]# /usr/local/grczs/openssh-7.4p1/sbin/sshd -V unknown option -- V
OpenSSH_7.4p1, OpenSSL 1.0.2j 26 Sep 2016
3.5 更新 OpenSSH 配置文件权限
使用 root 用户登录服务器,执行以下命令更新 OpenSSH 服务配置文件权限:
[root@localhost openssh-7.4p1]# /usr/local/grczs/openssh-7.4p1/sbin/sshd -V unknown option -- V
OpenSSH_7.4p1, OpenSSL 1.0.2j 26 Sep 2016
chmod 600 /usr/local/grczs/openssh-7.4p1/etc/ssh/*
chmod 644 /usr/local/grczs/openssh-7.4p1/etc/ssh/*.pub
chmod 644 /usr/local/grczs/openssh-7.4p1/etc/ssh/ssh_config
执行完毕后,执行以下命令检查文件权限:
ll /usr/local/grczs/openssh-7.4p1/etc/ssh
3.6 测试 OpenSSH 服务
3.6.1 修改新版本的配置文件
将 /usr/local/grczs/openssh-7.4p1/etc/ssh/sshd_config 文件的内容替换为以下:
Port 62222
PidFile /var/run/sshd-7.4p1.pid
AuthorizedKeysFile .ssh/authorized_keys
Subsystem sftp /usr/local/grczs/openssh-7.4p1/libexec/sftp-server
3.6.2 手动启动新版本的 SSH 服务
执行以下命令启动新版本的 OpenSSH 服务,监听在 62222 端口:
/usr/local/grczs/openssh-7.4p1/sbin/sshd
执行以下命令查看是否已经启动服务并监听在 62222 端口: netstat -antulp | grep LISTEN | grep 62222
执行完毕后,如显示类似以下结果,即表示服务启动正常:
[root@localhost ssh]# netstat -antulp | grep LISTEN | grep 62222
tcp 0 0 0.0.0.0:62222 0.0.0.0:* LISTEN 28247/sshd
tcp 0 0 :::62222 :::* LISTEN 28247/sshd
执行以下命令停止新版本的 OpenSSH 服务:
/etc/rc.d/init.d/sshd-7.4p1.init stop
执行以下命令查看是否已经停止服务:
netstat -antulp | grep LISTEN | grep 62222
执行完毕后,如不显示任何结果,即表示服务停止成功。
3.8 替换 sshd 服务脚本
3.8.1 修改新版本的配置文件
将 /usr/local/grczs/openssh-7.4p1/etc/ssh/sshd_config 文件内的 "Port 62222" 修改 为 "Port 22"。
3.8.2 替换 SSH 服务
使用 root 用户新建一个 ssh 会话,在新打开的会话里,依次执行以下命令:
service sshd stop
mv /etc/rc.d/init.d/sshd /etc/rc.d/init.d/sshd.bak
mv /etc/rc.d/init.d/sshd-7.4p1.init /etc/rc.d/init.d/sshd
service sshd start
执行以下命令查看是否已经启动服务并监听在 22 端口:
netstat -antulp | grep LISTEN | grep 22
执行完毕后,如显示类似以下结果,即表示服务启动正常:
[root@localhost ssh]# netstat -antulp | grep LISTEN | grep 62222
tcp 0 0 0.0.0.0:62222 0.0.0.0:* LISTEN 28247/sshd
tcp 0 0 :::62222 :::* LISTEN 28247/sshd
总结
总体来说升级过程并不复杂,但生产环境中需要一定要注意备份,按步骤一步步进行,以免出现故障。最后祝大家都能顺利升级!









