首页 > 系统相关 >Linux升级openssl、openssh

Linux升级openssl、openssh

时间:2023-10-20 11:35:09浏览次数:37  
标签:sshd openssh openssl etc ssh Linux usr

 

在项目中,我们经常会发现Linux系统中Open SSH、Open SSL存在高危漏洞,如OpenSSL“心脏出血”漏洞,利用该漏洞,黑客可以获取约30%的https开头网址的用户登录账号密码,其中包括购物、网银、社交、门户等类型的知名网站等。 以及OpenSSH漏洞,如“OpenSSH远程代码执行漏洞CVE-2016-10009”, sshd服务可以利用转发的agent-socket文件,欺骗本机的ssh-agent来加载一个恶意的PKCS#11模块,从而可以远程执行代码,黑客利用漏洞实现远程命令执行,严重情况下可能会导致数据泄露。 我们一般通过升级openssh和openssl来解决系统中存在的相关高危漏洞。

升级说明

openSSL升级至openssl 1.1.1k版本 openssl version -a #当前查看版本 openssl下载地址:https://ftp.openssl.org/source/

openSSH升级至openssh 8.6版本 ssh -V #当前查看版本 openssh下载地址:https://ftp.riken.jp/pub/OpenBSD/OpenSSH/portable/ ,以 p1.tar.gz结尾的即可,选择自己想要的版本

一、安装telnet (以防升级失败,连不上服务器,建议弄)

# 查看是否安装telnet服务
rpm -qa | grep telnet
rpm -qa | grep xinetd
# 若无安装,yum安装
yum -y install telnet* 
yum -y install xinetd

#将服务开机自启(此处根据自身情况考虑)
systemctl enable xinetd.service
systemctl enable telnet.socket

#开启服务
systemctl start telnet.socket  
systemctl start xinetd

#安装好后,更改配置文件,允许telnet远程连接,Linux7中可能不需要:
vi /etc/xinetd.d/telnet
将disable = yes改为 disable = no,退出保存。
vi /etc/securetty
#在最后添加两行
pts/0
pts/1

systemctl restart xinetd
netstat -plnt |grep 23  # 确认下是否启动成功

二、升级OpenSSl

1、查看原版本

openssl version -a

2、安装依赖包

#安装openssl 依赖包
yum -y install perl gcc gcc-c++ glibc make zlib

3、解压安装

#我们将ssl安装在/usr/local/openssl目录下
tar -zxvf openssl-1.1.1k.tar
cd openssl-1.1.1k
./config --prefix=/usr/local/openssl
#检查环境
./config -t
make      #编译
make install     #编译安装

4、修改配置

#更新函数库
cd /usr/local
ldd /usr/local/openssl/bin/openssl    #检查函数库
echo "/usr/local/openssl/lib" >> /etc/ld.so.conf   #添加所缺函数库
ldconfig -v        #更新函数库
openssl/bin/openssl version     #查看新安装的版本

#移出旧版本
which openssl        #查看旧版本openssl命令在哪里
mv /usr/bin/openssl /usr/bin/openssl.old   #将旧版本openssl移除
ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl           #新版本制作软链接
openssl version         最后查看版本,更新完毕
在确保Openssl版本为1.0.1后,可以升级Openssh了,升级方法如下。

三、升级openssh

1、解压,安装依赖包

ssh -V     #查看ssh版本
#解压:
tar -zxvf openssh-8.6p1.tar
#安装依赖包
yum -y install openssl-devel pam-devel

2、移除旧版本

#可以提前备份一下:
cp /usr/sbin/sshd /usr/sbin/sshd.bak
cp /etc/ssh/ssh_config /etc/ssh/ssh_config.bak
cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
cp /etc/ssh/moduli /etc/ssh/moduli.bak
cp /etc/pam.d/sshd /etc/pam.d/sshd.bak

mv /etc/ssh /etc/ssh.old
### 需要注意,移除之后,不能退出当前终端,若退出就无法ssh连接了,只能通过telnet连了。

3、编译安装

cd openssh-8.6p1/
# 配置安装目录为/usr/local/openssh
./configure --prefix=/usr/local/openssh --sysconfdir=/etc/ssh --with-pam --with-ssl-dir=/usr/local/openssl --with-md5-passwords --mandir=/usr/share/man --with-zlib=/usr/local/zlib --without-hardening
或者
--without-openssl-header-check
报错1:
在安装的过程中如遇到以下错误,请安装:yum -y install openssl-devel

报错2:configure: error: PAM headers not found 
请安装 yum -y install pam-devel
我升级的时候只遇到这两个错,如遇到别的错,请自行解决。
然后编译安装
make && make install

4、修改启动脚本

# 拷贝启动脚本
cd openssh-8.6p1/
cp ./contrib/redhat/sshd.init /etc/init.d/sshd

# 修改启动脚本
vi /etc/init.d/sshd

# 按如下图修改,需要注意,此路径是你安装新版本的openssh路径,根据你的实际情况修改
SSHD=/usr/local/openssh/sbin/sshd

### 注意根据自身情况修改路径
/usr/local/openssh/bin/ssh-keygen –A
/sbin/restorecon /etc/ssh/ssh_host_key.pub
/sbin/restorecon /etc/ssh/ssh_host_rsa_key.pub
/sbin/restorecon /etc/ssh/ssh_host_dsa_key.pub
/sbin/restorecon /etc/ssh/ssh_host_ecdsa_key.pub

start()
{
        #Create keys if necessary
        /usr/local/openssl/bin/ssh-keygen -A
        if [ -x /sbin/restorecon ]; then
        /sbin/restorecon /etc/ssh/ssh_host_key.pub
        /sbin/restorecon /etc/ssh/ssh_host_rsa_key.pub
        /sbin/restorecon /etc/ssh/ssh_host_dsa_key.pub
        /sbin/restorecon /etc/ssh/ssh_host_ecdsa_key.pub
        fi

5、修改sshd配置文件/etc/ssh/sshd_config

chkconfig --add sshd

cp /usr/local/openssh/etc/sshd_config /etc/ssh/sshd_config
cp /usr/local/openssh/sbin/sshd /usr/sbin/sshd
cp /usr/local/openssh/bin/ssh /usr/bin/ssh
cp /usr/local/openssh/bin/ssh-keygen /usr/bin/ssh-keygen
cp /usr/local/openssh/etc/ssh_host_ecdsa_key.pub /etc/ssh/ssh_host_ecdsa_key.pub

echo "PermitRootLogin yes" >> /etc/ssh/sshd_config    #直接用root登录终端(此处根据自身情况考虑)
echo "PasswordAuthentication yes" >> /etc/ssh/sshd_config   #是否允许密码验证
echo "PubkeyAuthentication yes" >> /etc/ssh/sshd_config  #允许pubKey(id_rsa.pub)登录
echo 'X11Forwarding yes' >> /etc/ssh/sshd_config   #设置是否允许X11转发

或者:vi /etc/sshd_config
# 在末尾加入账号远程配置, 输入 :wq 保存退出
PermitRootLogin yes
PubkeyAuthentication yes
PasswordAuthentication yes
X11Forwarding yes

6、卸载原有ssh(先安装后卸载,也是怕升级失败,如果有把握,可先卸载)

for i in $(rpm -qa |grep openssh);do rpm -e $i --nodeps ;done
提示警告:

将警告中被修改的文件名字再改回来
mv /etc/ssh/sshd_config.rpmsave /etc/ssh/sshd_config
mv /etc/ssh/ssh_config.rpmsave /etc/ssh/ssh_config
mv /etc/ssh/moduli.rpmsave /etc/ssh/moduli

7、替换相关命令,并重启sshd服务

cp -arp /usr/local/openssh/bin/* /usr/bin/  #替换相关命令

service sshd restart   #重启sshd服务
chkconfig --add sshd
chkconfig sshd on
# 验证升级、让其他人测试连接后再退出
ssh -V 和 telnet 验证

8、设置开机自启

chkconfig --add sshd
chkconfig --level 2345 sshd on
chkconfig --list 

升级完成后,为了安全起见,建议关闭telnet
#关闭服务(此处根据自身情况考虑)
systemctl stop telnet.socket  
systemctl stop xinetd

#关闭服务开机自启(此处根据自身情况考虑)
systemctl disable xinetd.service
systemctl disable telnet.socket

标签:sshd,openssh,openssl,etc,ssh,Linux,usr
From: https://www.cnblogs.com/lcword/p/17776643.html

相关文章

  • 实验二 OpenSSL API使用
    sm3代码#include<stdio.h>#include<openssl/evp.h>#include<openssl/err.h>#include<openssl/rand.h>voidhandleErrors(void){ERR_print_errors_fp(stderr);abort();}voidtest_sm3(){unsignedchardata[]="Hel......
  • Linux命令(90)之cp
    linux命令之cp1.cp介绍linux命令cp是用来复制文件或目录2.cp用法cp[参数]scrdestcp常用参数参数说明-a保留文件的属性,进行递归复制,相当于-pdr-f强制复制,不提示3.实例3.1.复制1.txt文件至ztj目录命令:cp-a1.txtztj/[root@centos79-3~]#ls1.txt1.txt[root@centos79-3......
  • Linux命令(89)之xargs
    linux命令之xargs1.xargs介绍linux命令xargs是从标准输入(管道或stdin、输入重定向)获取数据,并将数据转换成命令行的参数简单理解就是find管道|后面接文件,就需要xargs。假如|前面输入的是文字、字符串就不需要接xargs2.xargs用法xargs[参数]xargs常用参数参数说明-n数字分组......
  • 11、Linux文件与目录权限
    Linux文件与目录权限目录Linux文件与目录权限一、Linux文件基本属性1、文件介绍2、Linux文件属主和属组二、更改文件属性1、chmod命令2、chown命令3、chgrp命令4、chattr命令5、lsattr命令三、其他1、权限掩码2、特殊权限①SBIT(粘滞位)②SUID(属主特殊权限)③SGID(属组特殊权限)3、fi......
  • Linux-git
    目录git简介git常用命令配置初始化仓库将文件添加到暂存区将暂存区文件加入版本库对比工作区某文件和暂存区中的区别将暂存区的文件移除但git仍管理将文件移除暂存区并且git不再管理查看版本库切换到之前的版本恢复文件持久化云端将本地的项目推送到远程仓库将远程仓库的文件克隆......
  • linux 内核 --- 关抢占/关中断,临界区
     preempt_disable()local_irq_disable()/local_irq_save(flags)spin_lock()spin_lock_irq()/spin_lock_irqsave(lock,flags)spin_lock()会调用preempt_disable()导致本核的抢占调度被关闭(preempt_disable函数实际增加preempt_count来达到此效果),spin_lock_irq()是local_i......
  • 你是否还迷茫要不要学习Linux?
    近几年Linux这个词好像很流行,无论是现实工作中,还是在网络信息中均可以听到或者看到有关Linux相关的内容,可以说Linux无处不在。说到这,有人可能会问了,我对Linux比较感兴趣,但是没有接触过Linux,对它不了解,不知道是否适合自己,是否值得我花费时间和经历去深入学习,因此陷入一种比较迷茫的......
  • linux最大句柄数设置
    1、用户级别在/etc/security/limit.conf配置,重新登录生效usersoftnofile65535userhardnofile655352、进程级别可以使用命令查看sysctl-a|grepfs.nr_open配置方式/etc/sysctl.conffs.nr_open=1000000用户级别设置的最大值不能超过进程级别的,否则不......
  • Linux操作系统从BIOS到bootloader是如何运行的
    操作系统一般都会在安装在硬盘上,在BIOS的界面上。你会看到一个启动盘的选项。启动盘有什么特点呢?它一般在第一个扇区,占512字节,而且以0xAA55结束。这是一个约定,当满足这个条件的时候,就说明这是一个启动盘,在512字节以内会启动相关的代码。这些代码是谁放在这里的呢?在Linux......
  • Linux远程管理协议
    (RFB、RDP、Telnet和SSH)是Linux的远程管理协议。提到远程管理,通常指的是远程管理服务器,而非个人计算机。个人计算机可以随时拿来用,服务器通常放置在机房中,用户无法直接接触到服务器硬件,只能采用远程管理的方式。远程管理,实际上就是计算机(服务器)之间通过网络进行数据传输(信息交换)的过......