暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Openssh服务升级文档

原创 Digital Observer 2025-01-15
220

作者:Digital Observer(施嘉伟)
Oracle ACE Pro: Database
PostgreSQL ACE Partner
11年数据库行业经验,现主要从事数据库服务工作
拥有Oracle OCM、DB2 10.1 Fundamentals、MySQL 8.0 OCP、WebLogic 12c OCA、KCP、PCTP、PCSD、PGCM、OCI、PolarDB技术专家、达梦师资认证、数据安全咨询高级等认证
ITPUB认证专家、PolarDB开源社区技术顾问、HaloDB技术顾问、TiDB社区技术布道师、青学会MOP技术社区专家顾问、国内某高校企业实践指导教师

一 环境描述

1.1 环境描述

OpenSSH(OpenBSD Secure Shell)是OpenBSD计划组所维护的一套用于安全访问远程计算机的连接工具。该工具是SSH协议的开源实现,支持对所有的传输进行加密,可有效阻止窃听、连接劫持以及其他网络级的攻击。sshd是其中的一个独立守护进程。
OpenSSH 7.2p2及之前版本的sshd中的session.c文件中的‘do_setup_env’函数存在安全漏洞。当程序启用UseLogin功能并且PAM被配置成读取用户主目录中的.pam_environment文件时,本地攻击者可借助/bin/login程序的特制的环境变量利用该漏洞获取权限。

1.2 硬件以及软件环境

操作系统版本:Centos5.3
Openssh源版本:OpenSSH_4.3p2, OpenSSL 0.9.8e-fips-rhel5
Openssh目标版本:OpenSSH_7.9p1, OpenSSL 1.0.2h

二、Openssh升级步骤

2.1 升级步骤

步骤 内容
Step 1 配置Telnet
Step 2 Openssh依赖包检测
Step 3 Openssl升级至1.0.2h
Step 4 Openssh升级至7.9p1
Step 5 将旧版本Openssl 0.9.8e卸载

2.2 Telnet配置

为了防止由于SSH服务在升级过程中出现问题,导致无法远程SSH连接,所以需要配置telnet服务。

2.2.1 检查是否存在Telnet

检查服务器上是否存在telnet服务
[root@service2 ~]# rpm -qa | grep telnet
若未安装,则安装telnet,否则忽略此步骤
[root@service2 ~]# yum -y install telnet telnet-server
[root@service2 ~]# rpm -qa | grep telnet
telnet-0.17-49.el6_10.x86_64
telnet-server-0.17-49.el6_10.x86_64
由于telnet 是由 xinetd控制的,所以同时查看是否安装了xinetd服务
[root@service2 ~]# rpm -qa | grep xinetd
xinetd-2.3.14-40.el6.x86_64
如果没有则安装:
[root@service1 ssh]# yum -y install xinetd

2.2.2 配置Telnet

1.修改xinetd下的telnet配置文件:
[root@service2 ~]# vim /etc/xinetd.d/telnet 
将”disable= yes”改成” disable=no”
service telnet
{
        disable = no
        flags           = REUSE
        socket_type     = stream
        wait            = no
        user            = root
        server          = /usr/sbin/in.telnetd
        log_on_failure  += USERID
}

2.设置开机自启动
[root@service2 ~]# chkconfig --list | grep telnet
	telnet:        	off
//如果状态为on,则已经打开,如果状态为off,则参考下面步骤:
[root@service2 ~]# chkconfig telnet on
[root@service2 ~]# chkconfig --list | grep telnet
	telnet:        	on
将xinetd服务设置为开机自启动:
[root@localhost ~]# chkconfig xinetd on
查看telnet端口状态:
[root@localhost ~]#netstat -tnl |grep 23
tcp 0 0 0.0.0.0:23 0.0.0.0:* LISTEN

3.连接登录测试:
[root@service2 ~]# telnet 192.168.199.148
Trying 192.168.199.148...
Connected to 192.168.199.148.
Escape character is '^]'.
CentOS release 6.8 (Final)
Kernel 2.6.32-642.el6.x86_64 on an x86_64
login: root
Password: 
//因为telnet不是很安全,所以默认的情况之下就是不允许root以telnet登入Linux主机的。但这个问题也可以解决:
[root@service2 ~]# mv /etc/securetty /etc/securetty.bak

2.3 Openssl升级

2.3.1 环境确认

1.查看Openssl版本:
[root@service2 ~]# openssl version
OpenSSL 1.0.1e-fips 11 Feb 2013
2.	查看升级依赖的包zlib zlib-devel gcc是否存在:
[root@service2 ~]# rpm -qa | grep gcc
gcc-4.4.7-23.el6.x86_64
libgcc-4.4.7-23.el6.x86_64
gcc-c++-4.4.7-23.el6.x86_64
//如果gcc不存在
[root@service2 ~]#yum -y install gcc*
[root@service2 ~]# rpm -qa | grep zlib*
zlib-static-1.2.3-29.el6.x86_64
zlib-1.2.3-29.el6.x86_64
zlib-devel-1.2.3-29.el6.x86_64
//如果zlib zlib-devel不存在
[root@service2 ~]#yum -y install zlib*

2.3.2 源码包编译安装openssl

1.下载想要升级的ssl版本openssl-1.0.2h:
[root@service2~]#wget -c http://artfiles.org/openssl.org/source/old/1.0.2/openssl-1.0.2h.tar.gz
//如果无法联网,则将软件包从windows传输到linux。
2.解压openssl软件包
[root@service2 ~]# tar xf openssl-1.0.2h.tar.gz
3.	编译安装openssl-1.0.2h
[root@service2 ~]# cd openssl-1.0.2h
[root@service2 openssl-1.0.2h]# ./config --prefix=/usr/local/ssl --openssldir=/etc/ssl --libdir=lib shared zlib-dynamic enable-camellia
//
Configured for linux-x86_64.

*** Because of configuration changes, you MUST do the following before
*** building:

	make depend
//如果没有报错则执行make depend
[root@service2 openssl-1.0.2h]# make depend
//如果没有报错则执行make && make install
[root@service2 openssl-1.0.2h]# make && make install

4.Man手册以及doc帮助配置:
[root@service2 openssl-1.0.2h]#make MANDIR=/usr/share/man MANSUFFIX=ssl install
[root@service2 openssl-1.0.2h]#install -dv -m755 /usr/share/doc/openssl-1.0.2h
[root@service2 openssl-1.0.2h]#cp -vfr doc/* /usr/share/doc/openssl-1.0.2h

5.其他额外必须配置(为openssh升级做准备)
//将旧的openssl二进制命令文件移走:
[root@service2 ~]#mv /usr/bin/openssl /usr/bin/openssl.bak
//链接新的openssl二进制命令文件
[root@service2 ~]#ln -s /usr/local/ssl/bin/openssl /usr/bin/openssl
[root@service2 ~]#ln -s /usr/local/ssl/include/openssl /usr/include/openssl
//重新加载库:
[root@service2 ~]#echo "/usr/local/ssl/lib" >> /etc/ld.so.conf
[root@service2 ~]#ldconfig -v

6.openssl升级成功
[root@service2 ~]#openssl version
OpenSSL 1.0.2h  3 May 2016

2.4 Openssh升级

2.4.1 将原openssh配置文件备份

将原openssh打包备份:
[root@service1 ssh]# tar zcvf /root/ssh.tar.gz /etc/ssh/

2.4.2 编译安装Openssh7.9

[root@service1 ~]# tar xf openssh-7.9p1.tar.gz
[root@service1 ~]# cd openssh-7.9p1
[root@service1 ~]#./configure --prefix=/usr --sysconfdir=/etc/ssh --with-zlib --with-md5-passwords --with-ssl-dir=/usr/local/ssl
如果编译成功:
[root@service1 ~]#make && make install

2.4.3其他配置

//将旧版本的sshd二进制命令文件移走
[root@service1 ~]mv /usr/sbin/sshd /usr/sbin/sshd.old
//将新版本的sshd二进制命令文件链接到原位置
[root@service1 ~]ln -s /root/openssh-7.9p1/sshd /usr/sbin/sshd
//查看升级后的版本:
[root@service2 openssh-7.9p1]# ssh -V
OpenSSH_7.9p1, OpenSSL 1.0.2h  3 May 2016

2.5 卸载旧版本openssl

为了防止旧版本openssl依然存在漏洞扫描风险,将旧版本openssl卸载。

将原版本ssl卸载:
[root@service2 openssh-7.9p1]# rpm -qa | grep openssl
openssl-1.0.1e-48.el6.x86_64
[root@service2 ~]# rpm -e openssl-1.0.1e-48.el6.x86_64
禁止卸载,显示依赖关系。
//输出内容部分显示
error: Failed dependencies:
	libcrypto.so.10()(64bit) is needed by (installed) qt-1:4.6.2-28.el6_5.x86_64
	libcrypto.so.10()(64bit) is needed by (installed) libarchive-2.8.3-4.el6_2.x86_64
	libcrypto.so.10()(64bit) is needed by (installed) libssh2-1.4.2-2.el6_7.1.x86_64
	libcrypto.so.10()(64bit) is needed by (installed) wget-1.12-8.el6.x86_64
	libcrypto.so.10()(64bit) is needed by (installed) bind-libs-32:9.8.2-0.47.rc1.el6.x86_64
	libssl.so.10()(64bit) is needed by (installed) libssh2-1.4.2-2.el6_7.1.x86_64
	libssl.so.10()(64bit) is needed by (installed) wget-1.12-8.el6.x86_64
	libssl.so.10()(64bit) is needed by (installed) mysql-libs-5.1.73-7.el6.x86_64
	libssl.so.10()(64bit) is needed by (installed) httpd-tools-2.2.15-53.el6.centos.x86_64
	libssl.so.10()(64bit) is needed by (installed) ptlib-2.6.5-5.el6.x86_64
	libssl.so.10()(64bit) is needed by (installed) opal-3.6.6-4.el6.x86_64

记录这两个库文件并将其备份。
libcrypto.so.10
libssl.so.10

[root@service2 openssh-7.9p1]#mkdir /root/backup
[root@service2 openssh-7.9p1]# cp /lib64/libcrypto.so.10 /root/backup/
[root@service2 openssh-7.9p1]# cp /lib64/libssl.so.10 /root/backup/

强制卸载:
[root@service2 ~]#rpm -e --nodeps openssl-1.0.1e-48.el6.x86_64

将新版本编译产生的库文件链接到指定位置

[root@service2 ~]#ln -s /root/openssl-1.0.2h/libssl.so.1.0.0 /lib64/libssl.so.10
[root@service2 ~]# ln -s /root/openssl-1.0.2h/libcrypto.so.1.0.0 /lib64/libcrypto.so.10
libssl.so.10
libcrypto.so.10
需要与原版本库文件名字一致。

2.6 重启校验ssh服务

2.6.1 重启sshd服务

[root@service2 ~]# /etc/init.d/sshd restart
Stopping sshd: [ OK ]
Starting sshd: [ OK ]
/etc/ssh/sshd_config line 81: Unsupported option GSSAPIAuthentication
/etc/ssh/sshd_config line 83: Unsupported option GSSAPICleanupCredentials
/etc/ssh/sshd_config line 97: Unsupported option UsePAM

[root@service2 ~]# vim /etc/ssh/sshd_config
注释掉 81,83,97 三行就不会提示如上信息。

2.6.2 sshd配置文件修改

//允许root直连
[root@service2 ~]#echo “PermitRootLogin yes” >> /etc/ssh/sshd_config
//启用X11Forwarding
[root@service2 ~]#echo ‘X11Forwarding yes’ >> /etc/ssh/sshd_config
//开启口令验证
[root@service2 ~]#echo “PasswordAuthentication yes” >> /etc/ssh/sshd_config

[root@service2 ~]# /etc/init.d/sshd restart
Stopping sshd: [ OK ]
Starting sshd: [ OK ]

[root@service2 ~]# sshd -version
OpenSSH_7.9p1, OpenSSL 1.0.2h 3 May 2016
升级成功。

2.7卸载telnet以及xinted

[root@service2 ~]# rpm -qa | grep telnet
telnet-0.17-49.el6_10.x86_64
telnet-server-0.17-49.el6_10.x86_64
[root@service2 ~]# rpm -e telnet-0.17-49.el6_10.x86_64
[root@service2 ~]# rpm -e telnet-server-0.17-49.el6_10.x86_64
warning: /etc/xinetd.d/telnet saved as /etc/xinetd.d/telnet.rpmsave

//不要忘记将/etc/securetty移动回原位置
[root@service2 ~]# mv /etc/securetty.bak /etc/securetty
hhh6.jpg

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论