• CentOS6.9下升级默认的OpenSSH操作记录(升级到OpenSSH_7.6p1)


    近期对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 ~]# 
  • 相关阅读:
    ajax 笔记
    EM Algorithm
    Support Vector Machine
    Factor Analysis
    Local weighted regression
    一点突发奇想
    纳什均衡
    自驾崇明东滩湿地
    程序员热力学第二定律
    SQL Server Identity 属性的问题
  • 原文地址:https://www.cnblogs.com/kevingrace/p/9478614.html
Copyright © 2020-2023  润新知