近期对IDC机房服务器做了一次安全漏洞扫描,漏扫结果显示服务器的OpenSSH版本太低(CentOS6默认是OpenSSH_5.3p1),存在漏洞隐患,安全部门建议升级到OpenSSH_7.6p1。升级OpenSSH的操作并不复杂,但由于是线上环境,故需要谨慎操作。特别需要注意的是:如果是通过ssh远程连接服务器后进行的版本升级操作,万一升级失败了,则ssh就远程登录不上去了。当然,如果服务器安装了iDRAC远程管理卡就好说了,如果没有iDRAC远程管理卡,则需要提前开启telnet远程登录(允许root账号登录)或是到机房现场进行升级操作比较妥当!

一、漏洞描述
漏洞描述:OpenSSH 6.9及之前版本的sshd中的auth2-chall.c文件中的lsquokbdint_next_devicersquo函数存在安全漏洞,该漏洞源于程序没有正确限制处理单链接中的keyboard-interactive设备。
影响范围:OpenSSHthrough 6.9
涉及资产:xxxxxx  
漏洞影响:远程攻击者可借助ssh -oKbdInteractiveDevices选项中较长且重复的列表利用该漏洞实施暴力破解攻击,或造成拒绝服务(CPU消耗)。
漏洞加固建议:登录被影响主机查看OPENSSH版本号,如在影响范围内,则对OPENSSH进行版本升级或更新。

centos7默认的是OpenSSH_7.4p1版本,可以不用升级,只需升级centos6.9的openssh版本即可!
openssh升级到7.6版本的一键执行脚本的下载地址:https://pan.baidu.com/s/1-D0gZsNc5f6QFyLnMSNXbA
提取密码:9ma2

二、Centos6.9升级默认OpenSSH版本的操作记录

查看操作系统版本
[root@Centos6 ~]# cat /etc/redhat-release #或者执行"cat /etc/issue"
CentOS release 6.9 (Final) 查看默认的OpenSSH版本
[root@Centos6 ~]# ssh -V
OpenSSH_5.3p1, OpenSSL 1.0.1e-fips 11 Feb 2013 openssl默认版本如下,这个是关系到下面编译安装openssh的成功与否。
[root@Centos6 ~]# openssl version -a
OpenSSL 1.0.1e-fips 11 Feb 2013 备份ssh目录(此步非常重要,一定要记得提前做备份)
[root@Centos6 ~]# cp -rf /etc/ssh /etc/ssh.bak 安装telnet,记得提前部署telnet远程登录环境(root用户登录),避免ssh升级出现问题,导致无法远程管理!
[root@Centos6 ~]# yum install telnet-server
[root@Centos6 ~]# vim /etc/xinetd.d/telnet
# default: on
# description: The telnet server serves telnet sessions; it uses \
# unencrypted username/password pairs for authentication.
service telnet
{
flags = REUSE
socket_type = stream
wait = no
user = root
server = /usr/sbin/in.telnetd
log_on_failure += USERID
disable = no #将默认的yes修改为no。开启telnet服务功能,否则telnet启动后,23端口就会起不来!
} 重启telnet服务
[root@Centos6 ~]# /etc/init.d/xinetd start
Starting xinetd: [ OK ]
[root@Centos6 ~]# /etc/init.d/xinetd restart
Stopping xinetd: [ OK ]
Starting xinetd: [ OK ] telnet默认用于远程登录的端口是23(21是默认的ftp端口、22是默认的ssh端口、23是默认的telnet端口)
[root@Centos6 ~]# lsof -i:23
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
xinetd 2489 root 5u IPv6 22131982 0t0 TCP *:telnet (LISTEN) 关闭iptables防火墙和selinux。如果开启了iptables防火墙,则需要开启23端口(即"iptables -I INPUT -p tcp --dport 23 -j ACCEPT" 和"iptables -I INPUT -p udp --dport 23 -j ACCEPT" )。
[root@Centos6 ~]# /etc/init.d/iptables stop
[root@Centos6 ~]# vim /etc/sysconfig/selinux
.......
SELINUX=disabled [root@Centos6 ~]# setenforce 0
setenforce: SELinux is disabled =====================================================================================================================
默认情况下,linux不允许root用户以telnet方式登录linux主机,若要允许root用户登录,可采取以下两种方法中的任何一种方法: 1)第一种方法:修改securetty文件
增加pts配置。如果登录用户较多,需要更多的pts/*。
[root@Centos6 ~]# vim /etc/securetty
......
pts/0
pts/1
pts/2 2)第二种方法:移除securetty文件
验证规则设置在/etc/security文件中,该文件定义root用户只能在tty1-tty6的终端上记录,删除该文件或者将其改名即可避开验证规则实现root用户远程登录。
[root@Centos6 ~]# rm -rf /etc/securetty 以上两种方法中的任意一种设置后,在客户端使用telnet远程登录目标服务器(使用root用户)都是可以的!
192.168.10.206是telnet目标服务器,192.168.10.202是客户端机器。
[root@client ~]# telnet 192.168.10.206 23
Trying 192.168.10.206...
Connected to 192.168.10.206.
Escape character is '^]'.
CentOS release 6.9 (Final)
Kernel 2.6.32-696.el6.x86_64 on an x86_64
Centos6.9-OS login: root
Password:
Last login: Tue Aug 14 14:28:02 from 192.168.10.202 ------------------------温馨提示-------------------------
一般不建议直接用root用户远程通过telnet登陆系统,因为telnet在数据传输过程采用明文方式,如果,数据包被人截获,将会很容易获取root用户的登陆口令;
还是建议以普通用户通过telnet远程登陆,然后su到root,这样相对比较安全。如果非要用root用户远程连接,建议采用SSH.
如上操作后,就可以使用root账号进行telnet登录服务器了!OpenSSH升级后建议再修改回还原设置(即禁止root用户进行telnet登录)。 ========================================================================================================================== 安装高版本的OpenSSH
升级前需要先安装几个组件
[root@Centos6 ~]# yum install -y gcc openssl-devel pam-devel rpm-build tcp_wrappers-devel 本案例升级openssh选择的是openssh-7.6p1.tar.gz
百度云盘下载地址是:https://pan.baidu.com/s/1C5B5ZZh_PRBNicvdzTxS2g
提取密码:dssh [root@Centos6 ~]# cd /usr/local/src/
[root@Centos6 src]# ll openssh-7.6p1.tar.gz
-rw-rw-r-- 1 root root 1489788 Aug 14 2018 openssh-7.6p1.tar.gz
[root@Centos6 src]# tar -zvxf openssh-7.6p1.tar.gz
[root@Centos6 src]# cd openssh-7.6p1
[root@Centos6 openssh-7.6p1]# ./configure --prefix=/usr --sysconfdir=/etc/ssh --with-pam --with-zlib --with-md5-passwords --with-tcp-wrappers
[root@Centos6 ~]# make && make install 安装后提示:
/etc/ssh/ssh_config already exists, install will not overwrite
/etc/ssh/sshd_config already exists, install will not overwrite
/etc/ssh/moduli already exists, install will not overwrite
ssh-keygen: generating new host keys: ECDSA ED25519
/usr/sbin/sshd -t -f /etc/ssh/sshd_config
/etc/ssh/sshd_config line 81: Unsupported option GSSAPIAuthentication
/etc/ssh/sshd_config line 83: Unsupported option GSSAPICleanupCredentials 修改配置文件,允许root登录
[root@Centos6 openssh-7.6p1]# sed -i '/^#PermitRootLogin/s/#PermitRootLogin yes/PermitRootLogin yes/' /etc/ssh/sshd_config
[root@Centos6 openssh-7.6p1]# cat /etc/ssh/sshd_config|grep RootLogin
PermitRootLogin yes 重启OpenSSH
[root@Centos6 openssh-7.6p1]# service sshd restart
Stopping sshd: [ OK ]
Starting sshd: /etc/ssh/sshd_config line 81: Unsupported option GSSAPIAuthentication
/etc/ssh/sshd_config line 83: Unsupported option GSSAPICleanupCredentials
[ OK ]
如上重启OpenSSH出现的告警错误,解决办法如下:
将/etc/ssh/sshd_config文件中以上行数内容注释下即可
[root@Centos6 openssh-7.6p1]# sed -i '/^GSSAPICleanupCredentials/s/GSSAPICleanupCredentials yes/#GSSAPICleanupCredentials yes/' /etc/ssh/sshd_config
[root@Centos6 openssh-7.6p1]# sed -i '/^GSSAPIAuthentication/s/GSSAPIAuthentication yes/#GSSAPIAuthentication yes/' /etc/ssh/sshd_config
[root@Centos6 openssh-7.6p1]# sed -i '/^GSSAPIAuthentication/s/GSSAPIAuthentication no/#GSSAPIAuthentication no/' /etc/ssh/sshd_config 再次重启OpenSSH服务,则不会出现错误了
[root@Centos6 openssh-7.6p1]# service sshd restart
Stopping sshd: [ OK ]
Starting sshd: [ OK ] 升级后版本
[root@Centos6 openssh-7.6p1]# ssh -V
OpenSSH_7.6p1, OpenSSL 1.0.1e-fips 11 Feb 2013 ----------------------------------------------------------------------------------------------------
温馨提示:
1)由于之前将原ssh目录修改名字了("mv /etc/ssh /etc/ssh_bak"),修改后,需要立即需要修改下配置: 修改配置文件,禁止root登录
[root@Centos6 ~]# sed -i '/^#PermitRootLogin/s/#PermitRootLogin yes/PermitRootLogin no/' /etc/ssh/sshd_config 可以不操作,禁止dns解析
[root@Centos6 ~]# sed -i '/^#UseDNS yes/s/#UseDNS yes/UseDNS no/' /etc/ssh/sshd_config 可以不操作默认是22,修改ssh端口至6022
[root@Centos6 ~]# echo "Port 6022" >> /etc/ssh/sshd_config 注意:
- 在升级SSH时你的SSH是不会因为升级或重启服务而断掉的。
- 但是记得OpenSSH升级后,要修改/etc/ssh/sshd_config,将"PermitRootLogin no" 改为 "PermitRootLogin yes",然后再重启OpenSSH服务,
否则,再另开一个终端窗口,使用root用户ssh登录该机器就会失败了,因为此时ssh已经禁止root用户登录了! 2)更新后ssh有如下提示,但不影响使用:
[root@Centos6 ~]# ssh -p22 192.168.10.206
/etc/ssh/ssh_config line 50: Unsupported option "gssapiauthentication" 解决措施:
注释/etc/ssh/ssh_config的gssapiauthentication内容
----------------------------------------------------------------------------------------------------

重要提示:
1)在升级完openssh版本后,如果你进行了系统update或者升级用到ssh包的相关软件包,会导致ssh的版本回退到原来的版本。
2)实际使用中发现ansible和jenkins使用时有些问题,网上查询了下,需要在/etc/ssh/sshd_config文件中最后增加两行(第一行是ansible支持加入,第二行是jenkins支持加入):

Ciphers aes128-cbc,aes192-cbc,aes256-cbc,aes128-ctr,aes192-ctr,aes256-ctr,3des-cbc,arcfour128,arcfour256,arcfour,blowfish-cbc,cast128-cbc
KexAlgorithms diffie-hellman-group1-sha1,curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group14-sha1

因为升级了openssh太新导致通信时加密算法出现问题,加上后重启就可以了。

==================================================================
如上升级centos6的openssh版本到7.6之后,在另一台服务器上使用java调用sftp服务失败!

解决办法:
1)在java服务器的sshd_config文件末尾添加下面内容(即添加验证方式),并重启sshd服务。
[root@tomcat ~]# cat /etc/ssh/sshd_config
......
KexAlgorithms diffie-hellman-group1-sha1,curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group14-sha1 [root@tomcat ~]# /etc/init.d/sshd restart 2)升级jsch新版本(如jsch-0.1.53.jar )

===============================================
顺便提一下在centos7下升级openssh之后的一个坑

上面的升级操作同样可以在centos7系统下进行,升级前,centos7默认版本
[root@centos7 ~]# ssh -V
OpenSSH_7.4p1, OpenSSL 1.0.2k-fips 26 Jan 2017 在centos7服务器上执行上面的一键升级脚本,执行后检查ssh版本:
[root@centos7 ~]# ssh -V
OpenSSH_7.6p1, OpenSSL 1.0.2k-fips 26 Jan 2017 此时重启ssh服务(systemctl restart sshd),会一直卡着,使用"systemctl status sshd"查看,会提示几个文件权限过大
修改几个文件权限
[root@centos7 ~]# chmod 600 /etc/ssh/ssh_host_* 接着再次重启sshd服务,会提示不识别sshd_config文件中第94行、第123行文件。
注释掉这两行内容即可 最后重启ssh服务
[root@centos7 ~]# systemctl restart sshd
会发现重启命令一直在卡着!!!! 发现的坑的情况:
1)发现centos7升级到openssh7.6之后,重启sshd服务会一直在卡着,卡着过程中,在远程使用ssh是可以正常登录本机。
2)但是卡一段时间后(大概2分钟左右),sshd服务就会因为启动超时而关闭,届时在远程使用ssh重新登录本机就会失败!
3)但只要在远程使用ssh成功登录到本机后的终端窗口,不管centos7机器的ssh服务起来与否,该终端窗口始终保持连接!
4)所以,尽管升级后,重启ssh服务是一直卡的状态,但只要是在启动中,远程ssh新连接就不会断开。
5)故要保证升级后,远程使用ssh登录centos7本机不受影响,无感知,就需要升级后的centos7机器的ssh服务一直在启动中。 需要一个保持sshd服务持续启动的脚本
[root@centos7 ~]# cat /opt/ssh-restart.sh
#/bin/bash
ps -ef|grep "systemctl restart sshd"|awk '{print $2}'|xargs kill -9
nohup systemctl restart sshd & 每20秒执行一次脚本
[root@centos7 ~]# crontab -l
* * * * * /bin/bash -x /opt/ssh-restart.sh >/dev/null 2>&1
* * * * * sleep 20;/bin/bash -x /opt/ssh-restart.sh >/dev/null 2>&1
* * * * * sleep 40;/bin/bash -x /opt/ssh-restart.sh >/dev/null 2>&1 始终保证一个重启sshd服务的进程在
[root@centos7 ~]# ps -ef|grep "systemctl restart sshd"
root 18368 1 0 17:18 ? 00:00:00 systemctl restart sshd
root 18478 18460 0 17:18 pts/4 00:00:00 grep --color=auto systemctl restart sshd 以上是临时想到的解决办法,究其原因和最终解决办法,还需要进一步分析(后续更新)~

=============补充一下:centos7开启telnet远程登录的方法==============

[root@Centos7 ~]# yum install -y telnet-server xinetd 

[root@Centos7 ~]# systemctl enable xinetd.service
[root@Centos7 ~]# systemctl enable telnet.socket
[root@Centos7 ~]# systemctl start telnet.socket
[root@Centos7 ~]# systemctl start xinetd 默认情况下,centos7系统是不允许root用户telnet远程登录的。如果要使用root用户直接登录,有下面两种方法:
1)第一种方法:修改securetty文件
增加pts配置。如果登录用户较多,需要更多的pts/*。
[root@Centos6 ~]# vim /etc/securetty
......
pts/0
pts/1
pts/2 2)第二种方法:移除securetty文件
验证规则设置在/etc/security文件中,该文件定义root用户只能在tty1-tty6的终端上记录,删除该文件或者将其改名即可避开验证规则实现root用户远程登录。
[root@Centos6 ~]# rm -rf /etc/securetty 然后在客户端使用telnet登录
[root@client ~]# telnet 192.168.10.220 23
Trying 192.168.10.220...
Connected to 192.168.10.220.
Escape character is '^]'. Kernel 3.10.0-862.3.2.el7.x86_64 on an x86_64
Centos7 login: root
Password:
Last login: Wed Aug 15 01:10:15 from ::ffff:192.168.10.39
[root@Centos7 ~]#

CentOS6.9下升级默认的OpenSSH操作记录(升级到OpenSSH_7.6p1)的更多相关文章

  1. Centos6.8下编译安装LAMP的操作记录梳理

    之前用的最多的web框架是LNMP,偶尔也会用到LAMP.接下来简单说下LAMP环境的部署记录,这里选择源码安装的方式: LAMP相关安装包下载地址:https://pan.baidu.com/s/1 ...

  2. centos6下升级git版本的操作记录

    编译go_ethereum的时候出现了错误 然后发现是自己的git没有升级成功  因为编译需要高版本的git版本  所以会编译不成功  之后执行 root@uatjenkins01 ~]# git - ...

  3. CentOS6.4下使用默认的文档查看器打开PDF文档乱码的解决方案

     最近在CentOS6.4下使用其默认的文档查看器打开PDF文档时出现乱码的方块,有两种方法可以解决.    方法一:修改/etc/fonts/conf.d/49-sansserif.conf文件,如 ...

  4. centos下升级git版本的操作记录

    在使用git pull.git push.git clone的时候,或者在使用jenkins发版的时候,可能会报类似如下的错误: error: The requested URL returned e ...

  5. 转:centos下升级git版本的操作记录

    https://www.cnblogs.com/kevingrace/p/8252517.html 在使用git pull.git push.git clone的时候,或者在使用jenkins发版的时 ...

  6. centos 6x系统下源码安装mysql操作记录

    在运维工作中经常部署各种运维环境,涉及mysql数据库的安装也是时常需要的.mysql数据库安装可以选择yum在线安装,但是这种安装的mysql一般是系统自带的,版本方面可能跟需求不太匹配.可以通过源 ...

  7. Centos6 系统下源码方式安装Mysql 记录

    在运维工作中经常部署各种运维环境,涉及mysql数据库的安装也是时常需要的.mysql数据库安装可以选择yum在线安装,但是这种安装的mysql一般是系统自带的,版本方面可能跟需求不太匹配. #### ...

  8. Linux下修改系统编码的操作记录

    Linux系统安装后,发现中文显示乱码.因为系统编码为en_US.UTF-8,应改为支持中文的编码(即zh_CN.UTF-8)操作记录如下:1)检查linux的系统编码检查linux的系统编码,确定系 ...

  9. Centos下安装破解Jira7的操作记录

    Jira是一个集项目计划.任务分配.需求管理.错误跟踪于一体的工具,可以作为一个bug管理系统,可以将在测试过程中所发现的bug录入.分配给开发人员.前面介绍了Confluence在Centos下的安 ...

随机推荐

  1. Linux下postgresql数据库部署与配置

    1.检查postgresql是否已经安装:rpm -qa | grep postgres 2.检查PostgreSQL 安装位置:rpm -qal | grep postgres 3.卸载Postgr ...

  2. SSO阅读有感

    SSO比较详细且理解.赞 链接:https://www.cnblogs.com/ywlaker/p/6113927.html

  3. sql server2014企业版无人值守批处理脚本自动化安装

    ▲版权声明:本文为博主原创文章,未经博主允许不得转载. SQL Server系列软件是Microsoft 公司推出的关系型数据库管理系统.2014年4月16日于旧金山召开的一场发布会上,微软CEO萨蒂 ...

  4. February 6th, 2018 Week 6th Tuesday

    To be is to be perceived. 存在即被感知. How to interpret this quote? Maybe it means that everything in you ...

  5. 基于CoreText的基础排版引擎之不带图片的排版引擎

    - (void)drawRect:(CGRect)rect { [super drawRect:rect]; //步骤一:得到当前绘制画布上下文,用于后续将内容绘制在画布上 CGContextRef ...

  6. 17秋 软件工程 团队第五次作业 Alpha Scrum6

    17秋 软件工程 团队第五次作业 Alpha Scrum6 今日完成的任务 世强:APP内通知消息发送; 港晨:APP前端登陆界面编写: 树民:Web后端数据库访问模块代码实现: 伟航:Web后端Re ...

  7. 类装载器-ClassLoader

    类装载器的工作机制 类装载器就是寻找类的字节码文件并构造出类在JVM内部表示对象的组件.在Java中,类装载器把一个类装入JVM中,需要经过以下步骤: 装载:查找和导入Class文件. 链接:执行校验 ...

  8. golang类型判断

    _.ok:=interface{}(a).(B) 此语句用于判断对象a是否是B类型 也可以判断对象a是否实现了B接口 package main import "fmt" type ...

  9. PC端和移动APP端CSS样式初始化

    CSS样式初始化分为PC端和移动APP端 1.PC端:使用Normalize.css Normalize.css是一种CSS reset的替代方案. 我们创造normalize.css有下面这几个目的 ...

  10. [Jsoi2013]快乐的jyy

    题目 这个需要我们瞎\(yy\)一下就能做了 我们先对于第一个串建立\(PAM\) 我们把第二个串丢上去匹配,这里匹配出来的是以每一个位置为结尾且在另一个串里存在的最长回文后缀的长度 对于每一个位置开 ...