最近用低版本的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. React Component Lifecycle(生命周期)

    生命周期 所谓生命周期,就是一个对象从开始生成到最后消亡所经历的状态,理解生命周期,是合理开发的关键.RN 组件的生命周期整理如下图: 如图,可以把组件生命周期大致分为三个阶段: 第一阶段:是组件第一 ...

  2. jupyter notebook 远程访问

    https://www.youtube.com/watch?v=LpQl0yeZzCU 在服务器端执行: jupyter notebook --ip 服务器的Ip地址 --allow-root --n ...

  3. Lock锁方式解决线程安全问题

    在JDK5.0之后新增加了一种更强大的线程同步机制---通过显示定义同步锁来实现线程同步解决线程安全问题.同步锁使用Lock对象充当. java.util.concurrent.locks.lock接 ...

  4. PeopleSoft如何查找jar包冲突

    PeopleSoft要查找jar包冲突问题,不像maven可以打印出所有依赖,但既然是在JVM上运行,就可以启用JVM参数 路经:%ps_cfg_home%\appserv\Domain 文件名:ps ...

  5. CSS入门介绍(二)CSS选择器

    css选择器 什么是选择器? 选择器是你构造好网页的结构,需要给这些结构赋予样式,这时候就需要用到选择器,利用选择器将元素与样式一一对应:两者的对应关系可以是一对一,一对多,多对一. 选择器的分类: ...

  6. idea 常用快捷键

    =============intellij idea 快捷键============= ctrl+] 诸如{}围起来的代码块,使用该快捷键可以快速跳转至代码块的结尾处 ctrl+[ 同上,快速跳至代码 ...

  7. margin-bottom在safari浏览器失效的问题

    今天遇到一个bug是底部明明有margin-bottom却无法作用,排查了一下改成用padding可以有效 但不找出原因是无法完成这篇博客的 问题概要描述:在safari中,当内容高度超出所有父容器时 ...

  8. day29 二十九、元类、单例

    一.eval.exec内置函数 1.eval函数 eval内置函数的使用场景: ①执行字符串会得到相应的执行结果 ②一般用于类型转换得到dict.list.tuple等 2.exec函数 exec应用 ...

  9. linux --- Ansible-playbook篇

    Ansible-playbook简介 什么是playbook? 简单点说,playbook就是ansible用于配置,部署和管控节点机器的剧本,将一系列命令的集合归一使用,类似于shell脚本,不过更 ...

  10. 如何设置记事本( .txt文件)的默认编码为UTF-8?

    1.在桌面新建一个文本文档,不要写入任何内容,然后手动另存为,将此文档编码改为UTF-8,然后将文件名字改为template.txt: 2.再将template.txt移动到C:\Windows\Sh ...