zoukankan      html  css  js  c++  java
  • [网络/Linux]CentOS7:OpenSSH升级到7.9p1 | 含: 安装Telnet/OpenSSH

    【Q0 OpenSSH/sshd/ssh/scp/sftp,及OpenSSL这些软件组件之间有什么联系吗?】
    请跳转咱的另一篇博文,相信阅读完后,你会清楚很多:
    [网络/SSH]OpenSSH: sshd / sftp-server / ssh-agent | ssh / scp / sftp | OpenSSL - 博客园/千千寰宇

    【Q1 升级的原因?】
    CENTOS7.6默认安装的7.4版本存在一些安全漏洞,被第三方网络安全公司给扫描出来了,故而不得不升级到OpenSSH7.7及以上。
    那么,为什么不升级到目前最新版的8.4呢?
    主要是考虑到:1)服务器环境是客户的生产环境;2)担心8.x不兼容7.x;
    综上,在OpenSSH的诸多发布版本中,选中了 7.x 版本中的最高版本————7.9

    【Q2 为什么要写这篇博文?】
    升级OpenSSH,其实本身就是一项高危操作,不得不提高警惕,写得清清楚楚,明明白白。
    一旦升级失败或操作不当,咱们的远程服务器可能就要与我们"阴阳相隔"....

    【Q3 此博文是否原创?】
    否,不完全是原创。
    此博文在参考了该博文的基础上,根据自身所考虑更多细节,对部分步骤及其内容做了更多的拓展和说明。

    好啦,咱们正式开搞!

    建议】建议生产环境,一定要先做测试,之后再在生产环境升级。

    【环境】

    • OS - CENTOS 7.6
    • CPU - x86_64
    • OpenSSH - 原版本 7.4 ; 目标版本 7.9

    1 前期准备

    1-0 工具/环境

    • Xshell
    • Telnet - 默认端口: 23

    7 : echo

    ping/8 : base on ICMP protocol (ICMP协议 无具体端口,如果非要打开ping试试的话,尝试 8端口 + 7 端口)

    20:FTP数据端口

    21:文件传输服务器(控制连接)(FTP)

    22:SSH端口

    23:远程终端 (TELNET 基于TCP/IP协议)

    25:简单邮件传输服务器(SMTP)

    80:万维网服务器(HTTP)

    telnet 服务版本:telnet-server-0.17-64.el7.x86_64(yum安装)
    
    telnet 客户端版本:telnet-0.17-64.el7.x86_64(yum安装,可选装)
    
    xinetd版本:xinetd-2.3.15-13.el7.x86_64(yum安装)
    

    注:

    要想完成telnet安装,telnet服务端和xinetd必须安装,至于telnet客户端根据自己需要安装即可!

    如果本地你要是想使用telnet命令连接其他机器就需要装,如果只作为服务端需要别人连接自己,即可不用安装客户端(建议安装)

    1-1 升级前事项

    • 【升级前】最好关闭防火墙。如果不关闭防火墙,请开启ssh需要的端口和telnet需要的端口。

      如果ssh不是22端口最好打开22端口。因为ssh配置文件默认22端口。所以建议关闭防火墙。

      systemctl stop firewalld.service # 关闭防火墙
      systemctl disable firewalld # 禁止开机自启
      
      • 检查 服务器开启的端口
      # yum install nmap
      # nmap localhost
      
    • 【升级前】关闭selinux.并重启

      不关闭的话,可能引起的问题:
      CentOS 为 vsftpd 启动 vsftpd:500 OOPS: cannot read config file: /etc/vsftpd/vsftpd.conf

      • 查看 selinux 状态
      # sestatus -v
      或
      # getenforce
      
      • 关闭SELinux

        • 临时关闭(不用重启机器)
        setenforce 0 ##设置SELinux 成为permissive模式
        ##setenforce 1 设置SELinux 成为enforcing模式
        
        • 永久关闭(需重启机器)

        【步骤】修改/etc/selinux/config 文件,将SELINUX=enforcing改为SELINUX=disabled,重启机器即可

        【注意】 selinux的文件可能位置: /etc/selinux/config 或 /etc/sysconfig/selinux 或其它(通过whereis selinux)

        sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux
        
        reboot
        
    • 【升级前】前期多打开1个xshell窗口,并保证连接正常。因为可能出现升级失败。结束后要确定好再关闭。

    • 【升级前】备份sshd_config配置文件(方便后期使用或者方便升级失败使用)

    1-2 升级后注意事项

    • 【升级后】要重建xshell的session。不然,很可能会出项下面提示:

    1-3 依赖安装

    • OpenSSL版本:1.1.x以下。目前OpenSSH 7.9 不支持OpenSSL 1.1.x以上。否则,编译的时候会报错。

    yum list installed | grep -i opensslopenssl version

    • Zlib1.1.4或1.2.1.2或更高版本

    yum list installed | grep -i zlib

    • gcc:因为编译需要gcc

      yum list installed | grep -i gcc

    • openssl-devel:编译时需要

      yum list installed | grep -i openssl-devel

    2 安装Telnet

    2-1 安装Telnet

    为防止openssh升级失败。所以,安装telnet。

    保证openssh升级失败后,也可以通过telnet连接服务器,进行恢复操作,而不用去机房。

    • 检查是否已安装Telnet
    # rpm -qa | grep -i telnet-server
    
    # rpm -qa | grep -i telnet
    
    # rpm -qa | grep -i xinetd
    
    • yum安装Telnet
    # yum install -y telnet-server
    # yum install -y xinetd
    
    # yum install -y telnet
    

    2-2 Telent 启动+开机自启

    • 启动 telnet
    # systemctl start telnet.socket
    # systemctl start  xinetd
    

    查看telnet服务是否启动

    netstat -antupl | grep 23
    

    建议:开启telnet和xinetd开机自动启动避免reboot后连不上Telnet

    systemctl enable xinetd.service # xinetd开机自启
    
    systemctl enable telnet.socket # 设置telnet开机自启
    

    2-3 验证Telnet

    Windows系统使用Telnet客户端 可参见: win7开启telnet远程服务 - 百度知道

    确保使用windows或者其他Linux服务器可以telnet到此机器上,并且可以使用root用户。

    #方式1 telnet本地测试(root用户测试)

    telnet 127.0.0.1
    或
    telnet 127.0.0.1 23
    

    默认情况下,系统是不允许root用户telnet远程登录的,安全原因,具体查阅telnet协议。 (以上截图可见 : root 登录错误)

    【一般不建议直接用root用户远程通过telnet登陆系统,因为telnet在数据传输过程采用明文方式,如果数据包一旦被人截获,将会很容易获取root用户的登陆口令;还是建议以普通用户通过telnet远程登陆,然后su到root,这样相对比较安全。如果非要用root用户远程连接,建议采用SSH.】

    方法1- 修改login文件:如果想启用root登陆,编辑/etc/pam.d/login文件将auth requisite pam_securetty.so 这行注释掉即可!

    方法2 - 修改securetty文件:如果要使用root用户直接登录,需设置如下内容。

    方法3 - 具有sudo权限的普通用户(不开启root用户)。可添加一个可以登录的用户,登录并su到root用户。

    [方法2]
    # echo 'pts/0' >>/etc/securetty
    
    # echo 'pts/1' >>/etc/securetty
    
    # systemctl restart telnet.socket
    
    [方法3] 创建具有sudo权限的普通用户 ---- hello
    Step1 下载安装Xshell、Xftp工具
    
    Step2 通过Xshell,远程登陆服务器root用户
    
    Step3 使用检查用户的命令查询当前linux环境是否存在用户 hello
    	cat /etc/passwd
    
    Step4 若无用户hello,则:创建用户
        su
        (输入root用户密码)
        useradd hello
        passwd hello
        (输入/设置 hello用户的新密码)
    
    	此时 /home目录下会新增一个用户主目录: /home/hello
    	
    Step5 授予hello用户sudo权限
        chmod ug+rw /etc/sudoers [授予 sudoers文件的读【写】权限]
            ll /etc/sudoers [查看有无读写权限]
    
        vi /etc/sudoers
            新增一行 "hello ALL=(ALL) ALL" (在"root ALL=(ALL) ALL"行下)
    

    #方式2 telnet本地测试(普通用户测试)

    telnet 127.0.0.1
    或
    telnet 127.0.0.1 23
    

    注:用普通用户测试登陆没问题,那就说明telnet没问题!

    3 安装openssh

    3-1 下载/上传openssh

    Openssh 官网地址:https://www.openssh.com/

    OpenSSH 下载地址:https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/

    选择openssh-7.9p1.tar.gz进行下载,并上传到服务器上/opt/software/openssh-7.9p1.tar.gz

    3-2 卸载旧的ssh

    # cp -r /etc/ssh /etc/ssh.202010251729.old.bak #备份一些之前的ssh文件
    
    # rpm -qa | grep openssh
        openssh-server-7.4p1-21.el7.x86_64
        openssh-clients-7.4p1-21.el7.x86_64
        openssh-7.4p1-21.el7.x86_64
    
    # rpm -e --nodeps openssh-clients-6.6.1p1-31.el7.x86_64
    # rpm -e --nodeps openssh-6.6.1p1-31.el7.x86_64
    # rpm -e --nodeps openssh-server-6.6.1p1-31.el7.x86_64
    
    # rpm -qa | grep openssh
    

    如果之前就是源码安装的,找到之前的安装包,在里面执行

    # make uninstall
    

    3-3 安装OpenSSH

    • 1 连接到其他计算机时,OpenSSH作为2个进程运行。

    第一个进程是特权进程,并根据需要控制权限的颁发。

    第二个进程与网络通信

    设置适当的环境需要额外的安装步骤,这些步骤通过以root用户身份发出以下命令来执行 :

    # install -v -m700 -d /var/lib/sshd
    # chown -v root:sys /var/lib/sshd
    # groupadd -g 50 sshd
    # useradd -c 'sshd PrivSep' -d /var/lib/sshd -g sshd -s /bin/false -u 50 sshd
    
    • 2 解压安装
    cd /opt/software/
    # tar -zxvf ./openssh-7.9p1.tar.gz
    # cd ./openssh-7.9p1
    # ./configure --prefix=/usr --sysconfdir=/etc/ssh --with-md5-passwords --with-privsep-path=/var/lib/sshd
    # make
    

    如果报错
    ① configure: error: no acceptable C compiler found in $PATH
    问题解决: yum install gcc
    ② configure: error: * zlib.h missing - please install first or check config.log *
    问题解决: yum install openssl openssl-devel -y 安装相关依赖包

    ③ Permission denied (publickey,keyboard-interactive)

    echo "PasswordAuthentication yes" >> /etc/ssh/sshd_config

    ./configure 命令解释:

    --sysconfdir=/etc/ssh:这可以防止安装配置文件 /usr/etc。
    --with-md5-passwords:这使得可以使用MD5密码。
    --with-pam:此参数在构建中启用 Linux-PAM支持。
    --with-xauth=/usr/bin/xauth:为X身份验证设置xauth二进制文件的默认位置。如果将xauth安装到其他路径,请更改位置。这也可以sshd_config使用XAuthLocation关键字进行控制。如果已安装Xorg,则可以省略此开关。
    --with-kerberos5=/usr:此选项用于在构建中包含Kerberos 5支持。
    --with-libedit:此选项为sftp启用行编辑和历史记录功能。

    • 3 修改相应文件权限

      # ll /etc/ssh/ssh_host_rsa_key
      
      # chmod 600 /etc/ssh/ssh_host_rsa_key
      # chmod 600 /etc/ssh/ssh_host_ecdsa_key
      # chmod 600 /etc/ssh/ssh_host_ed25519_key
      
    • 4 安装

    # make install
    
    • 5 配置
    # install -v -m755 contrib/ssh-copy-id /usr/bin
    # install -v -m644 contrib/ssh-copy-id.1 /usr/share/man/man1
    # install -v -m755 -d /usr/share/doc/openssh-7.9p1
    # install -v -m644 INSTALL LICENCE OVERVIEW README* /usr/share/doc/openssh-7.9p1
    
    • 6 根据自身需求改写配置文件。

      因为配置文件为初始配置文件。所以和之前的不一样。可以使用备份配置文件覆盖。

    注意:默认是22端口,但不能root直接登录。如果想直接使用root登录执行以下命令

    # echo 'X11Forwarding yes' >> /etc/ssh/sshd_config
    
    # echo "PermitRootLogin yes" >> /etc/ssh/sshd_config
    
    # echo "PasswordAuthentication yes" >> /etc/ssh/sshd_config 
    

    3-4 OpenSSH启动+开机自启

    ssh服务必须开机自启动,不然重启时,原地爆炸。

    # cp -p contrib/redhat/sshd.init /etc/init.d/sshd
    
    # chmod +x /etc/init.d/sshd
    
    # chkconfig --add sshd
    
    # chkconfig sshd on
    
    # chkconfig --list sshd
    
    # systemctl restart sshd
    

    3-5 验证OpenSSH

    # ssh -V
    OpenSSH_7.9p1, OpenSSL 1.0.2k-fips 26 Jan 2017
    

    使用其他电脑或者其他的xshell等工具连接,验证要谨慎。

    4 补充:回滚操作

    如果之前是rpm包安装的。并且按照以上步骤操作,可以直接以下命令进行回滚

    # yum -y install openssh-clients
    # yum -y install openssh-server
    # yum -y install openssh
    

    5 结束操作

    之前的步骤一定要谨慎查看。查看是否可以连接,会不会出现什么问题。

    • 1、 恢复telnet的禁止root登录特权。如果之前关闭就关闭telnet。

    • 2、 开启防火墙,并验证连接。

    • 3、 最后再关闭之前开xshell界面。

    X 参考与推荐文献

  • 相关阅读:
    与DispatcherServlet的 url-pattern配置问题
    MyBatis ehcache二级缓存
    MyBatis 查询缓存
    【SPOJ283】Naptime
    【洛谷P1858】多人背包
    【洛谷P1486】郁闷的出纳员
    【POJ3017】Cut the Sequence
    【SPOJ10628】Count on a tree
    【洛谷P3224】永无乡 并查集+Splay启发式合并
    【洛谷P2617】Dynamic Rankings
  • 原文地址:https://www.cnblogs.com/johnnyzen/p/13876134.html
Copyright © 2011-2022 走看看