Linux 系统安全之 升级 OPENSSH

OpenSSH 是 SSH (Secure SHell) 协议的免费开源实现。SSH协议族可以用来进行远程控制, 或在计算机之间传送文件。而实现此功能的传统方式,如telnet(终端仿真协议)、 rcp ftp、 rlogin、rsh都是极为不安全的,并且会使用明文传送密码。OpenSSH提供了服务端后台程序和客户端工具,用来加密远程控制和文件传输过程中的数据,并由此来代替原来的类似服务。

网络安全一刻也不能放松,为了系统安全尽量将 OPENSSH 升级到最新版本,目前最新版本为 8.2 P1,下面开始准备升级。

  • 实验环境 CentOS 7.5
  • 为了预防万一升级失败后,无法登陆远程主机的问题,需要先安装 、启动Telnet 服务,确保可以远程登录。
  •  
  • 安装、配置 Telnet 以及超级守护进程 xinetd 服务
  • 编辑 telnet 主配置文件 /etc/xinetd.d/telnet
  • vim /etc/xinetd.d/telnet

    service telnet
    {
        disable = no
        flags       = REUSE
        socket_type = stream
        wait        = no
        user        = root
        server      = /usr/sbin/in.telnetd
        log_on_failure  += USERID
    }
  • 配置telnet登录的终端类型,在 /etc/securetty 文件末尾增加一些pts终端
    vim /etc/securetty
    pts/0
    pts/1
    pts/2
    pts/3
  • 启动telnet服务
    systemctl start telnet.socket 

    查看服务状态
    systemctl status telnet.socket 

    查看侦听端口
    ss -atnl | grep 23 

    安装完成后,将xinetd服务加入开机自启动:
    systemctl enable xinetd.service

    将telnet服务加入开机自启动:
    systemctl enable telnet.socket

  • 使用 telnet 测试登录


  • 编译、安装无误后,下面开始配置 OPENSSL

    设置 openssl 命令的软链接
    ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl
  • ln -s /usr/local/openssl/include/openssl /usr/include/openssl
  • ln -s /usr/local/openssl/lib/libssl.so /usr/lib64/libssl.so
  • echo "/usr/local/openssl/lib" >> /etc/ld.so.conf
  • ldconfig -v
  • openssl version
  •  


  • 开始安装 openssh 前,先备份原先的 openssh 文件

  • mv /etc/ssh/* /bak/sshbak
  • tar xf openssh-8.2p1.tar.gz
  • ./configure --prefix=/usr --sysconfdir=/etc/ssh --with-ssl-dir=/usr/local/openssl \
  • --with-md5-passwords --mandir=/usr/share/man \
  • --with-pam=enable && make clean && make && make install && echo $?
  • echo $? --> 0 确保编译安装无误后,复制启动脚本和PAM验证文件
  • cp /home/gf/openssh/openssh-8.2p1/contrib/redhat/sshd.init /etc/init.d/sshd
    cp /home/gf/openssh/openssh-8.2p1/contrib/redhat/sshd.pam /etc/pam.d/sshd.pam
  • 编辑 /etc/ssh/sshd.conf 配置文件
  • Port 22
    PermitRootLogin no
    PasswordAuthentication yes
    UsePAM yes
    UseDNS no
    Subsystem    sftp    /usr/libexec/sftp-server
  • 给运行脚本添加执行权限 : chmod +x /etc/init.d/sshd
  • 把原先的 systemd 管理的 sshd 启动脚本文件删除或者移走
    mv /usr/lib/systemd/system/sshd.service /bak/sshbak && mv /usr/lib/systemd/system/sshd.socket /bak/sshbak && echo $?
  • 重新加载服务配置文件后重启 sshd 服务
  • systemctl daemon-reload && sleep 1 &&systemctl restart sshd &&chkconfig sshd on && echo $?
  • 重启确认无误后可以停掉 telnet 服务
  • systemctl disable telnet

  • 使用 ssh 测试重新登录

  • 更改默认端口和指定允许访问的网段

  • #Port 22
    Port 2222                                             #更改端口,注意不要被占用起冲突                                                                                                                                                                       
    #AddressFamily any
    #ListenAddress 0.0.0.0                       #默认允许所有主机链接
    ListenAddress 192.168.2.2:2222     #注意这里设定的是服务器本地的IPv4网络IP地址和端口
    #ListenAddress ::                               #IPv6

  • 制定脚本自动升级
  • opensshupdata/
    opensshupdata/
    ├── openssh-8.3p1.tar.gz
    ├── openssh.sh
    └── openssl-1.1.1j.tar.gz
  • opensshupdata/openssh.sh

    #!/bin/bash
    #
    #************************************
    #author:                GF
    #version:              1.0
    #date:          2021-05-23
    #description:      
    #FileName:    openssh.sh
    #************************************

    if [[ `id -u` != "0" ]]; then
        echo "not root!"
        exit 1;
    fi

    if [[ -n `ping -c3 www.baidu.com` ]]; then
        yum -y install epel-release &> /dev/null
        sleep 1;yum -y install perl gcc gcc-c++ glibc make &> /dev/null
        sleep 1;yum -y group install 'Development Tools' &> /dev/null
        sleep 1;yum -y install pam-devel libselinux-devel zlib-devel openssl-devel &> /dev/null
        sleep 1;echo "Dependency installed successfully !"
        sleep 1
    else
        echo "Network is unreachable !"
        exit 2;
    fi 

    if [[ `echo $?` == "0" ]]; then
        echo "Dependency installed successfully !"
    else
        echo "Dependency installed not successfully!"
        exit 3;
    fi

    if [[ -f ./openssl-1.1.1j.tar.gz ]]; then
        tar xf ./openssl-1.1.1j.tar.gz &> /dev/null
        sleep 2;cd ./openssl-1.1.1j
        sleep 2;./config --prefix=/usr/local/openssl &> /dev/null && make clean &> /dev/null && make -j 4 &> /dev/null && make install &> /dev/null
    fi

    if [[ `echo $?` != "0" ]]; then
        echo "openssl 1.1.1j make install is faild !"
        exit 4;
    else
        echo "openssl 1.1.1j make and make install is OK!"
        sleep 1
        sleep 1;mv -f /usr/bin/openssl /usr/bin/openssl.old &> /dev/null
        sleep 1;mv -f /usr/lib64/openssl /usr/lib64/openssl.old &> /dev/null
        sleep 1;mv -f /usr/lib64/libssl.so /usr/lib64/libssl.so.old &> /dev/null
        sleep 1; ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl &> /dev/null
        sleep 1; ln -s /usr/local/openssl/include/openssl /usr/include/openssl &> /dev/null
        sleep 1; ln -s /usr/local/openssl/lib/libssl.so /usr/lib64/libssl.so &> /dev/null
        echo "/usr/local/openssl/lib" > /etc/ld.so.conf.d/openssl.conf
        ldconfig -v &> /dev/null
    fi

    /usr/bin/openssl version | grep -o "OpenSSL 1.1.1j" &> /dev/null
    if [[ `echo $?` != "0" ]]; then
        echo "openssl 1.1.1j is not updata !"
        exit 5;
    else
        echo "openssl 1.1.1j updata is ok!"
        cd ../
        rm -rf ./openssl-1.1.1j
    fi

    if [[ -f ./openssh-8.5p1.tar.gz ]]; then
        mkdir -p /bak/sshbak &> /dev/null
        mv -f /etc/ssh/* /bak/sshbak
        tar xf ./openssh-8.5p1.tar.gz &> /dev/null
        sleep 2;cd ./openssh-8.5p1
        sleep 2;./configure --prefix=/usr --sysconfdir=/etc/ssh --with-ssl-dir=/usr/local/openssl --with-md5-passwords --mandir=/usr/share/man --with-pam=enable &> /dev/null&& make clean &> /dev/null&& make -j 4 &> /dev/null && make install &> /dev/null
    else
        echo "openssh-8.5p1.tar.gz not found !"
        exit 12;
    fi

    if [[ `echo $?` != "0" ]]; then
        echo "openssh 8.5p1 not make install !"
        exit 6;
    else
        echo "openssh 8.5p1 make install is ok!"
    fi

    if [[ -f ./contrib/redhat/sshd.init ]]; then
        install ./contrib/redhat/sshd.init /etc/init.d/sshd
        chmod +x /etc/init.d/sshd
    else
        echo "sshd.init file not found!"
        exit 7;
    fi


    if [[ -f ./contrib/redhat/sshd.pam ]]; then
        install ./contrib/redhat/sshd.pam /etc/pam.d/sshd.pam
    else
        echo "sshd.pam file not found!"
        exit 11;
    fi

    if [[ `echo $?` != "0" ]]; then
        echo "openssh not make install !"
        exit 8;
    fi

    if [[ -f /etc/ssh/sshd_config ]]; then
        sed -i "s/#PermitRootLogin .*/PermitRootLogin yes/g" /etc/ssh/sshd_config
        sed -i "s/PermitRootLogin .*/PermitRootLogin yes/g" /etc/ssh/sshd_config
        sed -i "s/#PasswordAuthentication .*/PasswordAuthentication yes/g" /etc/ssh/sshd_config
        sed -i "s/PasswordAuthentication .*/PasswordAuthentication yes/g" /etc/ssh/sshd_config
        sed -i "s/#PermitEmptyPasswords .*/PermitEmptyPasswords no/g" /etc/ssh/sshd_config
        sed -i "s/PermitEmptyPasswords .*/PermitEmptyPasswords no/g" /etc/ssh/sshd_config
        sed -i "s/#UsePAM no/UsePAM yes/g" /etc/ssh/sshd_config
        sed -i "s/UsePAM no/UsePAM yes/g" /etc/ssh/sshd_config
        sed -i "s/#UseDNS no/UseDNS no/g" /etc/ssh/sshd_config
        sed -i "s/UseDNS yes/UseDNS no/g" /etc/ssh/sshd_config
    else
        echo "file /etc/ssh/sshd_config is not found !"
        exit 9:
    fi

    if [[ `echo $?` = "0" ]]; then
        mv -f /usr/lib/systemd/system/sshd.service /bak/sshbak &> /dev/null
        mv -f /usr/lib/systemd/system/sshd.socket /bak/sshbak &> /dev/null
        systemctl daemon-reload && sleep 1 &&systemctl restart sshd &&chkconfig sshd on
    else
        echo "sshd service not start !"
        exit 10;
    fi

    if [[ `echo $?` == "0" ]]; then
        echo "sshd service is start!"
        cd ../
        rm -rf ./openssh-8.5p1
    else
        echo "sshd service is not start !"
        exit 13;
    fi
    ss -a|grep ssh
    ssh -V
    openssl version

  • 测试

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
OpenSSH 是一种用于加密网络通信的开放源代码软件,它提供安全的远程登录、远程文件传输和远程执行命令的功能。升级 OpenSSH 全量包是为了解决已知的安全漏洞或增加新功能而进行的升级操作。 在升级 OpenSSH 全量包之前,我们需要先确定当前系统上安装的 OpenSSH 版本,以及是否存在已知的安全漏洞。可以通过运行命令“ssh -V”来查看当前安装的 OpenSSH 版本信息。 升级 OpenSSH 全量包的步骤如下: 1. 下载最新的 OpenSSH 全量包。可以从 OpenSSH 官方网站或 Linux 发行版官方仓库下载最新的安装包文件。 2. 备份当前的 OpenSSH 配置文件。在升级之前,建议先备份当前使用的配置文件,以便在升级过程中出现问题时可以回滚。 3. 解压缩下载的 OpenSSH 全量包。使用合适的解压缩工具将下载的安装包文件解压缩到指定的目录中。 4. 编译和安装 OpenSSH。进入解压缩后的文件夹,在终端中执行编译和安装命令。具体的编译和安装命令可以参考所下载的 OpenSSH 全量包中附带的安装指南或文档。 5. 配置 OpenSSH。在安装完成后,可以根据需要修改 OpenSSH 的配置文件。可以设置 SSH 的端口号、访问权限、认证方式等。 6. 启动 OpenSSH 服务。在完成配置后,可以通过系统服务管理工具或命令行启动 OpenSSH 服务。 经过以上步骤,我们就成功地升级OpenSSH 的全量包。升级后的 OpenSSH 可以提供更好的安全性和性能,以及修复已知的漏洞和增加新功能。在升级完成后,我们还可以再次运行“ssh -V”命令来验证 OpenSSH 的版本。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值