Redhat6.10 OpenSSH 8.0p1 升级操作手册

升级说明

本手册以 Redhat6.10(rhel-server-6.10-x86_64-dvd.iso)为主要测试环境,后续也测试了 CentOS7.6(CentOS-7-x86_64-Everything-1810.iso)和Redhat5.11(rhel-server-5.11-x86_64-dvd.iso)相关版本信息如下。本文档的以下演示步骤均在 Redhat6.10 下完成。

image

image

升级实施均以 root 用户操作,未测试升级后 HTTPS 等相关依赖间组件间的影响,仅测试 SSH 登陆正常。建议在有备份能回退环境下进行测试验证。

升级操作可以在纯内网环境下执行,升级前需要使用 yum 服务器补充安装包;操作过程中可能出现 SSH 无法登陆情况,部分网络文档中建议临时安装 Telnet 服务等临时远程工具辅助升级,本文下述操作均在 SSH 连接下完成,未安装其它远程工具。安装中使用了自建 Yum 源与 HTTP 服务器供源码安装包下载使用。

计划将系统默认安装的 OpenSSH 组件(版本参照下表)进行升级,参考升级时间为 3~5 分钟。

image

OpenSSH 存在的高危漏洞

image

image

image

漏洞查询网站:

CVE 通用漏洞与披露

http://cve.scap.org.cn/vulns?keyword=openssh

国家信息安全漏洞库

http://www.cnnvd.org.cn/web/vulnerability/queryLds.tag

国家信息安全漏洞共享平台

https://www.cnvd.org.cn/flaw/list.htm?flag=true

TCP Wrappers 功能将不再支持,按照本文档操作升级完成后 TCP Wrappers 功能将失效。详见“TCP Wrappers 配置失效” 。

Redhat 6.8 以下版本升级 SSL 后可能出现 NTP 服务无法启动情况,此时可在 OpenSSH 升级完成后对 NTP 进行升级,Redhat 6.8 及以上版本无影响。

操作系统版本为 Redhat6.10,系统信息如下:

[root@Redhat6 user]# cat /etc/redhat‐release

Red Hat Enterprise Linux Server release 6.10 (Santiago)

[root@Redhat6 user]# cat /proc/version

Linux version 2.6.32-754.el6.x86_64 ([email protected]) (gcc version 4.4.7 20120313 (Red Hat 4.4.7-23) (GCC) ) #1 SMP

Thu May 24 18:18:25 EDT 2018

升级前检查 Redhat6.10 当前版本(部分命令略有不同)如下表所示:

image

image

image

安装前准备

image

关闭 SElinux 和防火墙。关闭 SELinux 参考“升级后 SSH 连接提示密码错(SELinux 影响)”。

sestatus

确认 SELinux 已经 disalbe 了再继续。

清空日志

cat /dev/null > /var/log/messages

重启后检查日志,关注有无 lib 相关报错信息,以便升级后比对哪些 lib 相关报错为升级后新产生。

more /var/log/messages | grep lib

安装依赖包

yum install ‐y gcc wget make zlib zlib‐devel pam pam‐devel

yum install ‐y perl libssl-dev

若不安装 GCC,make 时会报错 “gcc: not found make: *** ”;

若不安装 pam,后续操作中可能出现报错 “configure: error: PAM headers not found 错误”;

perl 在 zilb 安装时需要。

Redhat5.11 需要先升级 Perl,详见“Redhat5.11 升级 OpenSSH8.0p1 时出现的问题”

yum install ‐y perl‐CPAN

如 OpenSSL 安装时不做 make test 则无需安装 perl-CPAN。详见:不安装 Perl 模块“Text::Template”。

Redhat5.11 无此软件包。

安装包准备

#升级用安装包文件,本例中安装包均从内网自建 http 服务器下载。

#创建升级临时目录,下载 3 个升级包,并按照顺序逐一升级。

cd /usr/local/src

wget http://<HTTP‐Server‐IP>/OpenSSH_Upgrade/openssh8.0/zlib‐1.2.11.tar.gz

wget http://<HTTP‐Server‐IP>/OpenSSH_Upgrade/openssh8.0/openssl‐1.1.1d.tar.gz

wget http://<HTTP‐Server‐IP>/OpenSSH_Upgrade/openssh8.0/openssh‐8.0p1.tar.gz

chmod 777 /usr/local/src/*.tar.gz

ls ‐al /usr/local/src/*.tar.gz

当前 SSH 备份与卸载

#备份原 ssh

mkdir /etc/ssh.BAK

cp -p /etc/ssh/* /etc/ssh.BAK/

#原有/etc/ssh 目录备份至/etc/ssh.BAK

ls ‐al /etc/ |grep ssh

#检查系统中已安装的 ssh 相关包

rpm ‐qa |grep  openssh

#卸载当前 ssh

for i in $(rpm ‐qa |grep openssh);do rpm ‐e $i ‐‐nodeps;done

#确认 ssh 已卸载完成

#以下无内容表示系统默认安装的 SSH 卸载完成, 一旦卸载完成请勿断开当前 SSH 连接、重启 ssh 服务,防止 SSH 会话超时断开。

rpm ‐qa |grep  openssh

#删除 ssh 目录

rm ‐rf /etc/ssh/

#删除 ssh 目录后

ls ‐al /etc/ | grep ssh

当前 SSL 备份与卸载

#查找 OpenSSL 相关目录

#Redhat6.10 备份上述 openssl 相关目录

tar czvPpf /etc/pki/ca-trust/extracted/openssl.BAK.$(date +%Y%m%d%H%M).tgz /etc/pki/ca-trust/extracted/openssl/

tar czvPpf /usr/lib64/openssl.BAK.$(date +%Y%m%d%H%M).tgz /usr/lib64/openssl/

tar czvPpf /usr/bin/openssl.BAK.$(date +%Y%m%d%H%M).tgz /usr/bin/openssl

#检查已备份 openssl 相关目录

find / -name "openssl.BAK.*"

find /usr/lib64 -name "libcrypto*"

find /usr/lib64 -name "libssl*"

rpm -qa | grep openssl

#卸载当前 ssl

for i in $(rpm ‐qa |grep openssl);do rpm ‐e $i ‐‐nodeps;done

强烈不推荐 CentOS7.6 卸载 openssl 包,详见后文:CentOS7.6 升级完成重启后,网卡无法通过 DHCP 获取 IP

#检查上述步骤中所有备份文件

find / -name "*.BAK*"

zlib 编译与安装

cd /usr/local/src

tar ‐zvxf zlib‐1.2.11.tar.gz

cd /usr/local/src/zlib‐1.2.11

#创建 zlib Makefile 文件

./configure

make clean; make

make test

make check

make install

ll /usr/local/lib

安装 Perl 模块“Text::Template”

通过 CPAN 工具安装 Perl 模块“Text::Template”,否则在 OpenSSL 执行make test 时会出现报错,详见后文“OpenSSL 执行 make test 报错”。未安装 perl-CPAN,可跳过此章节,继续进行 OpenSSL 编译与安装。在我的测试环境中未见明显差别,详见后文: 不安装 Perl 模块“Text::Template”。

perl ‐MCPAN ‐e shell

回答”yes”

在 cpan[1]>后输入 install Text::Template

本步骤需要互联网权限连接 ftp://ftp.perl.org/

回答”yes”

回答”yes”

回答”yes”

cpan[2]>后回答“exit”退出

OpenSSL 编译与安装

cd /usr/local/src/

tar ‐zvxf openssl‐1.1.1d.tar.gz

cd /usr/local/src/openssl‐1.1.1d

./config ‐‐prefix=/usr/local/ssl ‐‐openssldir=/usr/local/ssl ‐‐shared zlib

make clean; make

#make 时间较长大约需要 3 分钟

make test

#还是有少许报错,能力有限查不出原因。暂时跳过继续。

make check

make install

#查看 OpenSSL 安装有无报错,0 表示正常。

echo $?

#检查创建软连接需要的源文件路径

find / ‐name "openssl"

find / ‐name "libssl.so*"find / ‐name "libcrypto.so*"

#创建软链接

ln ‐s /usr/local/ssl/bin/openssl /usr/bin/openssl

ln ‐s /usr/local/ssl/lib/libssl.so.1.1 /usr/lib64/libssl.so.1.1

ln ‐s /usr/local/ssl/lib/libcrypto.so.1.1 /usr/lib64/libcrypto.so.1.1

#务必注意上述命令执行时是否有任何报错信息,如果有注意检查创建软连接需要的源文件路径

ln ‐s /usr/local/ssl/include/openssl /usr/include/openssl

ln ‐s /usr/local/ssl/lib/libssl.so.1.1 /usr/lib64/libssl.so

ln ‐s /usr/local/ssl/lib/libcrypto.so.1.1 /usr/lib64/libcrypto.so

ln ‐s /usr/local/ssl/lib/libssl.so.1.1 /usr/lib64/libssl.so.10

ln ‐s /usr/local/ssl/lib/libcrypto.so.1.1 /usr/lib64/libcrypto.so.10

#检查软连接创建情况

ll /usr/bin/openssl*

ll /usr/lib64/libssl*

ll /usr/lib64/libcrypto.so.*

echo "/usr/local/ssl/lib" >> /etc/ld.so.conf

more /etc/ld.so.conf

Ldconfig

ldconfig ‐v

对比发现只有上表中标黄一行有差异。

openssl version ‐a

OpenSSH 编译与安装

cd /usr/local/src/

tar ‐xvf openssh‐8.0p1.tar.gz

cd /usr/local/src/openssh‐8.0p1

./configure ‐‐prefix=/usr ‐‐sysconfdir=/etc/ssh ‐‐with‐md5‐passwords ‐‐with‐pam ‐‐with‐ssl‐dir=/usr/local/ssl ‐‐without‐hardening

-- prefix 就是说软件额安装目录设置在哪里,后面的=/usr 就是你给出的安装目录;

--with-tcp-wrappers 参数 OpenSSH 已经不支持, 如果添加此参数将会出现 “configure: WARNING: unrecognized options: --with-tcp-wrappers”提示。

make clean; make

make test;make check

#复制配置文件、赋权、添加到开机启动项

cp ‐p /usr/local/src/openssh‐8.0p1/contrib/redhat/sshd.init /etc/init.d/sshd

chmod u+x /etc/init.d/sshd

chkconfig ‐‐add sshd

chkconfig sshd on

chkconfig ‐‐list|grep sshd

#允许 root 用户 ssh 登陆

sed ‐i "32a PermitRootLogin yes" /etc/ssh/sshd_config

sed ‐i "58a PasswordAuthentication yes" /etc/ssh/sshd_config

#此时启动 SSH 服务,或重启系统,此时可以尝试重启服务器后再测试 ssh 连接是否正常。

service  sshd start

#重启后 SSH 连接将会类似以下提示,属于正常情况。

恢复 SSH 配置文件

由于 SSH 配置因各自环境使用情况不同,推荐自己比对新、老 SSH 配置后自行修改,以下仅供参考。

OpenSSH8.0p1 默认 SSH 配置

修改后用户自定义配置

据说增加“Custom EncryMode”部分的配置能增强对部分 SSH 客户端兼容性。

升级后版本检查与确认

zlib

ll /usr/local/lib

find /usr/ ‐name zlib.pc

cat /usr/local/lib/pkgconfig/zlib.pc

OpenSSL

openssl version ‐a

OpenSSH

ssh ‐V

可能出现的问题

如果网卡启动正常有 ssh 连接不上的

Xshell5 “no matching key exchange method found … …”

Xshell5 Build1247 连接时出现如下报错

no matching key exchange method found. Their offer: diffie-hellman-group1-sha1

在 SSH Server 的/var/log/secure 中产生如下日志

https://www.openssh.com/legacy.html

https://networkforbeginners.com/no-matching-key-exchange-method-found/

推荐升级 SSH 客户端版本,如难以升级参考以下解决方法:

1. SSH 连接时增加以下标黄参数

ssh -o KexAlgorithms=+diffie-hellman-group1-sha1 [email protected]

或者

ssh [email protected] -o Kexalgorithms=+diffie-hellman-group1-sha1

2. 修改用户下/.ssh/config 文件

vi ~/.ssh/config

Host 10.*.*.*

          KexAlgorithms +diffie-hellman-group1-sha1

SSH 客户端连接报错“Host key verification failed.”

如 SSH 服务器升级完 OpenSSH 后曾经在升级前连接过此服务器的其它主机再次连接是报错,以下图为例,ZQ-Redhat5 在*.*.19.140 升级完 OpenSSH 后再次 SSH 连接*.*.19.140 是出现报错。

有以下两种方法解决。

方法 1:从 known_hosts 中将*.*.19.140 删除后重新连接即可。

vi ~/.ssh/known_hosts

方法 2: 执行 ssh-keygen -R *.*.19.140

执行后将会从~/.ssh/known_hosts 中删除对应 IP 地址的一行(效果与方法 1 相同) ,但同时会在“~/.ssh/”下备份原有“known_hosts”为“known_hosts.old” 。

TCP Wrappers 配置失效

通过 TCP Wrappers 配置针对 SSH 访问的 IP 过滤

经查 OpenSSH 6.7/6.7p1 (2014-10-06)起不再支持 TCP Wrappers

https://www.openssh.com/releasenotes.html

Support for tcpwrappers/libwrap has been removed.

更多详情见 http://www.openssh.com/txt/release-6.7

但是 CentOS7.6 自带的 OpenSSH7.4p1 版本是可以支持 tcp-wrappers。具体实现方法目前没有找到。

在安装 OpenSSH8.0p1 执行以下命令建立 Makefile 时

./configure --prefix=/usr --sysconfdir=/etc/ssh --with-md5-passwords--with-pam  --with-tcp-wrappers --with-ssl-dir=/usr/local/ssl --without-hardening

注意会出现如下报错

configure: WARNING: unrecognized options: --with-tcp-wrappers

OpenSSL 执行 make test 报错

make test

升级后 SSH 连接提示密码错(SELinux 影响)

升级完成后 SSH 客户端连接不上服务器,报密码错误;

测试服务器网络正常,排查网络问题;

测试 root 用户在 VM Console 下直接登陆正常,排除密码输入错误问题;

检查 sshd_config 中“PermitRootLogin yes”已配置。

检查/var/log/secure 未见异常

检查/var/log/messages

messages 日志中有“Could not get shadow information for root”

检查 SELinux 设置状态,将 SELINUX=enforcing 改为 SELINUX=disable,重启再试即可。

OpenSSH 安装前是否需要添加 sshd 用户、组

部分实施文档中再 OpenSSH 安装前有一步安装环境配置,其中需要添加 sshd 用户与 sshd 组,实际操作中请自行检查自己的环境是否已存在这两个内容,本文档测试的三个版本系统中均已存在 sshd 用户、组配置,且安装环境配置中指定的 GID、UID 为 50 与内置默认的 ftp 用户冲突。所以本文档中不再对此部分进行操作。

对比以上三个版本的用户、组信息中 sshd 与 ftp,无差别。所以上述安装过程中不再保留此部分内容。

不安装 Perl 模块“Text::Template”

在 OpenSSL 编译与安装步骤中执行至 “make test”时将会出现如下报错,但安装 Perl 模块“Text::Template”需要互联网连接,在内网环境实施时不方便,建议相同类型系统初次升级测试时安装,如“make test”未发现问题,后续可不安装。 

Redhat5.11 zlib 模块编译安装报错(perl 版本低)

在执行./config shared zlib --prefix=/usr/local/ssl 时报错,Redhat5.11 中 perl 为 v5.8.8,后续安装 zlib 时需要将 perl 升级至 5.10或以上版本(Redhat6.10 中 perl 为 5.10.1;CentOS7.6 中 perl 为 5.16.3) ,当前主推版本为 perl-5.28.2.tar.gz。

Operating system: x86_64-whatever-linux2

Perl v5.10.0 required--this is only v5.8.8, stopped at ./Configure line 12.

参考以下操作,先升级好 perl 后再参考前述文档进行也能顺利完成。

Perl 下载地址

https://www.cpan.org/src/

参考升级步骤

perl 安装完成后返回 “安装包准备” 继续后续安装。

CentOS7.6 升级完成重启后,网卡无法通过 DHCP 获取 IP

CentOS7.6 升级完成 OpenSSH 后网卡无法获取 IP 地址, 查看/var/log/messages 有大量关闭 lib 的报错, 涉及libcrypto、 libssl, lib 报错涉及服务包括 aliasesdb、 auditd、 NetworkManager、 postfix、 tuned、 VGAuthService、vmtoolsd。

修改主机网卡为静态 IP 后网络能通,但报错信息持续。SSH 能够正常连接,但 Yum 更新不能使用,报错信息如下:

解决办法为不要卸载系统中原有 OpenSSL 组件。Redhat6.10 和 Redhat5.11 上未发现此情况。

升级操作日志

删除升级文件

#查找系统升级过程中保存备份文件

find / ‐name "*.BAK*"

#删除备份文件

for i in $(find / ‐name "*.BAK*");do rm ‐rf $i;done

find / ‐name "*.BAK*"

#删除安装包

ls ‐al /usr/local/src/*.tar.gzrm ‐rf /usr/local/src/*.tar.gzls ‐al /usr/local/src/*.tar.gz#安装包解压文件ls ‐al /usr/local/src/

先留着吧,万一哪天还想 make uninstall.

sshd 相关动态连接库

参考资料

升级 openssh 8.0 操作文档.docx  李欣昊

RedHat 操作系统 OpenSSH 相关漏洞解决方案.zip

|--REDHAT SSH 漏洞解决方案.docx

|--附件 1:REDHAT 6 升级 SSH 到 7.9 指导书.docx

|--附件 2:REDHAT 6 升级 NTP 指导书.docx

redhat 用脚本升级 openssh 到 7.9(使用 CentOS Yum 源方式)

ticket=ST-711856-oo4FZo2MgXj0uEKoxptMNOtA-sso#attachment

RedHat6 使用 CentOS yum 源

centos7 升级 openssh

Linux openssh8.0p1 升级步骤(shell 版本)

在 64 位 CentOS 6.9 上编译 OpenSSL 1.1.1 (1)

在 64 位 CentOS 6.9 上编译 OpenSSL 1.1.1 (2)

OpenSSH-8.0p1

猜你喜欢

转载自www.cnblogs.com/walkman-sky/p/12303009.html
今日推荐