最近用低版本的OpenSSH(5.9p1版本) 的漏洞给系统留了个后门 , 可以劫持root密码或者给root开启后门密码 : 利用Openssh后门 劫持root密码

如果公司还在用CentOS6的系统 , 那肯定存在漏洞隐患 

建议升级OpenSSH , 升级OpenSSH的操作并不复杂 ,但如果是线上环境 ,那么就需要谨慎操作 

特别需要注意的是  如果是通过ssh远程连接服务器后进行的版本升级操作 ,万一升级失败了,则ssh就远程登录不上去了 当然 ,如果服务器安装了iDRAC远程管理卡就好说了,如果没有iDRAC远程管理卡,则需要提前开启telnet远程登录(允许root账号登录)或是到机房现场进行升级操作比较妥当

centos7默认的是OpenSSH_7.4p1版本,可以不用升级,只需升级centos6.9的openssh版本即可

OpenSSH_6.9 包括6.9在内和6.9之前的版本 , 都存在漏洞 , 登录被影响主机查看OpenSSH版本号,如在影响范围内,则对OpenSSH进行版本升级或更新

#!/bin/bash
#关闭iptables防火墙和selinux
/etc/init.d/iptables stop
/bin/sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux
/usr/sbin/setenforce
#备份ssh原来配置
cp -rf /etc/ssh /etc/ssh.bak
#安装配置telnet,暂时允许root用户远程telnet,以防ssh升级后远程登录不了
echo "Y"|/usr/bin/yum install telnet-server
/bin/sed -i 's/= yes/= no/g' /etc/xinetd.d/telnet
/etc/init.d/xinetd start
/etc/init.d/xinetd restart
mv /etc/securetty /etc/securetty.bak
#安装配置新版本openssh
echo "Y"|/usr/bin/yum install -y gcc openssl-devel pam-devel rpm-build
cd /usr/local/src
/usr/bin/wget https://fastly.cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-7.8p1.tar.gz
/bin/tar -xf openssh-.8p1.tar.gz
cd /usr/local/src/openssh-.8p1
./configure --prefix=/usr --sysconfdir=/etc/ssh --with-pam --with-zlib --with-md5-passwords --with-tcp-wrappers
make -j && make install
/bin/sed -i '/^#PermitRootLogin/s/#PermitRootLogin yes/PermitRootLogin yes/' /etc/ssh/sshd_config
/bin/sed -i 's_#PermitRootLogin yes_PermitRootLogin yes_g' /etc/ssh/sshd_config
sed -i '/^GSSAPICleanupCredentials/s/GSSAPICleanupCredentials yes/#GSSAPICleanupCredentials yes/' /etc/ssh/sshd_config
sed -i '/^GSSAPIAuthentication/s/GSSAPIAuthentication yes/#GSSAPIAuthentication yes/' /etc/ssh/sshd_config
sed -i '/^GSSAPIAuthentication/s/GSSAPIAuthentication no/#GSSAPIAuthentication no/' /etc/ssh/sshd_config
service sshd start
service sshd restart
/usr/bin/ssh -V
# 关闭telnet远程登录
NUM=$(/usr/sbin/lsof -i:|wc -l)
if [ $NUM -ne ];then
mv /etc/securetty.bak /etc/securetty
fi

一键安装脚本

查看版本

# 查看系统版本 , 最小化安装可能会没有centos-release的软件包 , 可以用下面的命令查看
[root@DaMoWang ~]# rpm -q centos-release
centos-release--.el6.12.3.x86_64
[root@DaMoWang ~]# cat /etc/centos-release
CentOS release 6.9 (Final)
[root@DaMoWang ~]# cat /etc/issue
CentOS release 6.9 (Final)
Kernel \r on an \m # 查看SSH版本
[root@DaMoWang ~]# ssh -V
OpenSSH_5.3p1, OpenSSL 1.0.1e-fips Feb
[root@DaMoWang ~]# ssh -V
OpenSSH_5.3p1, OpenSSL 1.0.1e-fips Feb
[root@DaMoWang ~]# openssl version -a
OpenSSL 1.0.1e-fips Feb
built on: Wed Mar :: UTC
platform: linux-x86_64
options: bn(,) md2(int) rc4(16x,int) des(idx,cisc,,int) idea(int) blowfish(idx)
compiler: gcc -fPIC -DOPENSSL_PIC -DZLIB -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -DKRB5_MIT -m64 -DL_ENDIAN -DTERMIO -Wall -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE= -fexceptions -fstack-protector --param=ssp-buffer-size= -m64 -mtune=generic -Wa,--noexecstack -DPURIFY -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DMD5_ASM -DAES_ASM -DVPAES_ASM -DBSAES_ASM -DWHIRLPOOL_ASM -DGHASH_ASM
OPENSSLDIR: "/etc/pki/tls"
engines: rdrand dynamic

备份ssh目录

[root@DaMoWang ~]# cp -rf /etc/ssh{,.bak}

安装telnet , 避免ssh升级出现问题 ,导致无法远程管理

[root@DaMoWang ~]# yum -y install telnet-server
[root@DaMoWang ~]# 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启动后,23端口就会起不来
}

重启telnet服务

[root@DaMoWang ~]# /etc/init.d/xinetd restart
停止 xinetd: [确定]
正在启动 xinetd: [确定]
# 查看服务是否开启
[root@DaMoWang ~]# netstat -antup|grep
tcp ::: :::* LISTEN /xinetd

如果是线上服务器 , 最好是添加防火墙策略 , 尽量不要关闭防火墙

[root@DaMoWang ~]# iptables -I INPUT -p tcp --dport  -j ACCEPT
[root@DaMoWang ~]# iptables -I INPUT -p udp --dport -j ACCEPT
# 临时关闭SElinux
[root@DaMoWang ~]# getenforce
Enforcing
[root@DaMoWang ~]# setenforce

虽然把23端口放行了 , 但是linux默认是不允许root用户以telnet的方式登录linux主机的 , 如果要用root用户登录 , 那么可用以下方法实现

# 修改securetty文件 增加pts配置 如果登录用户较多,需要更多的pts/*
[root@DaMoWang ~]# vim /etc/securetty # 或者直接删除或修改文件名 , 避开验证规则实现root用户远程登录
[root@DaMoWang ~]# rm -f /etc/securetty

测试远程登录root用户

[root@test ~]# hostname -I
192.168.94.11
[root@test ~]# telnet 192.168.94.66
Trying 192.168.94.66...
Connected to 192.168.94.66.
Escape character is '^]'.
CentOS release 6.9 (Final)
Kernel 2.6.-.el6.x86_64 on an x86_64
DaMoWang.localdomain login: root
Password:
Last login: Mon Jun :: from 192.168.94.1
[root@DaMoWang ~]# hostname -I
192.168.94.66
一般不建议直接用root用户远程通过telnet登陆系统,因为telnet在数据传输过程采用明文方式,如果,数据包被人截获,将会很容易获取root用户的密码
还是建议以普通用户通过telnet远程登陆,然后su到root,这样相对比较安全。如果非要用root用户远程连接,建议采用SSH
如上操作后,就可以使用root账号进行telnet登录服务器了 OpenSSH升级后还需禁止root用户进行telnet登录
 
安装高版本的OpenSSH的依赖包
[root@DaMoWang ~]# yum -y install  gcc openssl-devel pam-devel rpm-build tcp_wrappers-devel

下载高版本的OpenSSH

https://www.openssh.com/

进到官网看到今天刚好更新7.8版本的源码包 , 就用最新版本的来最升级吧

[root@DaMoWang src]# cd /usr/local/src/
[root@DaMoWang src]# ll
总用量
-rw-r--r--. root root 8月 openssh-.8p1.tar.gz
[root@DaMoWang src]# tar xf openssh-.8p1.tar.gz
[root@DaMoWang src]# cd openssh-.8p1
[root@DaMoWang openssh-.8p1]# ./configure --prefix=/usr \
--sysconfdir=/etc/ssh \
--with-pam \
--with-zlib \
--with-md5-passwords \
--with-tcp-wrappers \
&& make -j && 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 : Unsupported option GSSAPIAuthentication
/etc/ssh/sshd_config line : Unsupported option GSSAPICleanupCredentials
[root@DaMoWang openssh-.8p1]# echo $?

修改配置文件,允许root登录

[root@DaMoWang openssh-.8p1]# sed -i '/^#PermitRootLogin/s/#PermitRootLogin yes/PermitRootLogin yes/' /etc/ssh/sshd_config
[root@DaMoWang openssh-.8p1]# grep RootLogin /etc/ssh/sshd_config
PermitRootLogin yes

重启SSH服务

[root@DaMoWang openssh-.8p1]# service sshd restart
停止 sshd: [确定]
正在启动 sshd:/etc/ssh/sshd_config line : Unsupported option GSSAPIAuthentication
/etc/ssh/sshd_config line : Unsupported option GSSAPICleanupCredentials
[确定]

报错解决方 , 只需把提示错误的行注释掉即可

再重启SSH服务

[root@DaMoWang openssh-.8p1]# service sshd restart
停止 sshd: [确定]
正在启动 sshd: [确定]
[root@DaMoWang openssh-.8p1]# service sshd status
openssh-daemon (pid ) 正在运行...

查看SSH服务版本

[root@DaMoWang openssh-.8p1]# ssh -V
OpenSSH_7.8p1, OpenSSL 1.0.1e-fips Feb

在升级SSH时你的SSH是不会因为升级或重启服务而断掉的

注意 :

OpenSSH升级后,一定要修改/etc/ssh/sshd_config的 PermitRootLogin no 改为 PermitRootLogin yes ,然后再重启OpenSSH服务
否则,再另开一个终端窗口,使用root用户ssh登录该机器就会失败了,因为此时ssh已经禁止root用户登录了

还有禁止DNS反向解析 , 修改端口号等细节需要注意

SSH可以连接 , 在线升级成功

[root@test ~]# ssh -p22 192.168.94.66
The authenticity of host '192.168.94.66 (192.168.94.66)' can't be established.
ECDSA key fingerprint is SHA256:/r5E0VYms6owRZhRXVckaVAgrT5eytIEUO7+D80rfbU.
ECDSA key fingerprint is MD5:1a:0e:a2::a5::bc:ed::7b:f7:c3::f0:dd:3b.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.94.66' (ECDSA) to the list of known hosts.
root@192.168.94.66's password:
Last login: Sat Aug :: from 192.168.94.66
[root@DaMoWang ~]# hostname -I
192.168.94.66

这是源码编译升级 , 如果主机使用update升级更新系统 , 那么OpenSSH的版本会回退默认版本

顺便说一下 , 之前用CentOS7更换OpenSSH版本 , 有坑 , systemctl restart sshd 启动服务超时 , 服务启动失败 , 但是重启服务那短暂的时间 , 还是可以连接上ssh的 

原因很多 , 根据自身实际情况来解决 

升级成功后不能使用systemctl start sshd启动程序 : 

1、编译安装时未启用某些功能支持导致使用旧配置文件无法启动sshd,如GSSAPIAuthentication、UsePrivilegeSeparation

2、配置文件权限错误,导致无法启动,如:ssh_host_rsa_key、ssh_host_ecdsa_key、ssh_host_ed25519_key

升级成功后输入密码无法登录系统 :


1、未对配置文件进行修改,openssh7.5默认配置不允许使用root登录系统


2、pam配置文件错误或丢失


3、配置文件中未启用pam选项:UsePAM

如果实在运行不了ssh服务 , 那么好 , 就利用那重启服务短暂的空隙 , 只需要让服务无限重启 , 保持ssh的进程即可 , 这个方法并不能解决实际问题 , 不过在没找到问题原因之前 , 可以暂时使用

[root@test ~]# cat /etc/centos-release
CentOS Linux release 7.5. (Core)
[root@test ~]# vim /opt/restart-ssh.sh
#/bin/bash
ps -ef|grep "systemctl restart sshd"|awk '{print $2}'|xargs kill -
nohup systemctl restart sshd &
# 服务启动超时 , 杀掉ssh进程 , 再重启ssh服务
# 加到计划任务中 10秒执行一次

CentOS 6.9 升级OpenSSH版本 关闭ssh服务后门的更多相关文章

  1. centos升级openssh版本

    似乎升级就是简单的安装ssh包就行了,没进行其他修改,虚拟机24个中高低漏洞解决 安装最新包: 1.下载:https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/por ...

  2. CentOS 7 下升级OpenSSH 7.4p1到OpenSSH 8.4p1

    文章目录 一.环境介绍 二.安装配置telnet 2.1.安装telnet-server 2.2.配置telnet 2.3.配置telnet登录的终端类型 2.4.启动telnet服务 三.切换登录方 ...

  3. Centos 6.5升级openssh漏洞

    CentOS 6.5下openssh升级 在有的企业中每年都会安全扫描,因为实现远程连接比较重要,如果openssh版本过低,就要对其升级,本文主要讲述openssh升级的步骤. openssh升级主 ...

  4. CentOS 7.x 升级OpenSSH

    升级SSH 存在中断风险,如果SSH 升级失败将会导致终端无法登录,建议在使用本地虚拟机进行测试后对线上生产环境进行升级操作!!! 三级等保评测中对主机进行漏洞扫描发现linux主机存在高危漏洞,查看 ...

  5. CentOS 6下升级Python版本

    CentOS6.8默认的python版本是2.6,而现在好多python组件开始只支持2.7以上的版本,比如说我今天遇到的pip install pysqlite,升级python版本是一个痛苦但又常 ...

  6. CentOs 6.x 升级 Python 版本【转】

    在CentOS 6.X 上面安装 Python 2.7.X CentOS 6.X 自带的python版本是 2.6 , 由于工作需要,很多时候需要2.7版本.所以需要进行版本升级.由于一些系统工具和服 ...

  7. Linux mint 18版本开启SSH服务

    linux mint 18版本默认是没有安装ssh server的 需要手动安装 安装ssh server: 此命令需要联网,会自动下载安装 安装之后看是否开始了ssh, 看到ssh-agent 和s ...

  8. Centos 6.5升级openssh到7.5p1版本

    centos6自带的ssh版本较低,存在高危漏洞,目前部分服务器需要升级到最新版本(目前是7.5p1). 注:升级ssh存在一定的危险性,一旦不成功可能无法通过远程连接到系统,因此在升级之前最好有远程 ...

  9. 解决openssh漏洞,升级openssh版本

    关于解决漏洞的问题我就不详说了,主要就是升级版本.这里我们就直接简单记录下步骤: 1.升级 使用root用户登录系统进入到/home/guankong ,上传openssh-6.6p1.tar.gz到 ...

随机推荐

  1. 【AtCoder】【思维】【图论】Splatter Painting(AGC012)

    题意: 有一个含有n个点的无向图,所有的点最初颜色均为0.有q次操作,每次操作将v[i]周围的距离小于等于d[i]的点全部都染成颜色c[i].最后输出每个点的最终的颜色. 数据范围: 1<=n, ...

  2. [Python]sort与sorted高级技巧

    与其他语言不同,python 3.0之后,弃用了其他语言中常见的cmp方法,在sort方法中改用key实现. 之前一直疑惑自定义对象的排序如何写comparator,最后发现还是通过内部的__cmp_ ...

  3. 什么是 B 树?

    本文提到的「B-树」,就是「B树」,都是 B-tree 的翻译,里面不是减号-,是连接符-.因为有人把 B-tree 翻成 「B-树」,让人以为「B树」和「B-树」是两种树,实际上两者就是同一种树. ...

  4. JS AJAX 跨域

    原因: 浏览器的同源策略,不允许AJAX 访问 其他接口 协议,域名,端口 一个不同 就跨域了  http 端口(80) https(443) 可以跨域的三个标签: 1. img : 打点统计,没有浏 ...

  5. myeclipse 无法启动Tomcat(程序未设置断点)This kind of launch is configured to open the Debug perspective ...

    myeclipse 中在新建一个项目之后想要运行一下,可是却提示This kind of launch is configured to open the Debug perspective,下面是我 ...

  6. Java逆向武器库_反编译工具

    1.反编译工具之_jd-gui 官网下载地址:http://java-decompiler.github.io/#jd-gui-download 使用: 下载后解压直接使用即可. jd-gui的优势是 ...

  7. HTML5_canvas_填充文本,描边文本

    canvas 文本相关 填充文本 pen.fillText("HelloWorld", 100, 100);        文本的(100, 100) 在文本基线处 文本样式 pe ...

  8. JS的javascript:void(0)用法

    javascript:void(0)用法如下: <a href="javascript:void(0)"></a> // 执行js函数,0表示不执行函数. ...

  9. winform 利用Http向服务器上传与下载文件

    利用在服务器端的IIS,布置“请求处理映射”.从而处理,本地发出Post请求.Url指向web网站所在路径的请求映射.由映射代码实现服务器保存文件. winform里面使用,WebClient的对象, ...

  10. Python基础之数据基本运算

    一.核心数据类型(五种): 在Python中变量没有数据类型,但关联的对象有数据类型,可通过type函数查看数据类型 1.整型(Int): 包含正整数,负整数和零 二进制:逢二进一,书写格式为 a = ...