常见Openssh漏洞问题描述
OpenSSH安全漏洞:
它影响了 OpenSSH 7.9 到 8.4p1 版本。该漏洞是由于 OpenSSH 服务在处理用户认证时未能正确限制可接收的数据格式,导致攻击者可以发送特制的数据包,可能会造成服务端拒绝服务或者远程代码执行等严重后果。
OpenSSH输入验证错误漏洞:
通常指的是在使用OpenSSH软件进行远程连接时,由于输入了非法或者不正确的数据导致的验证失败问题。这种问题通常涉及到SSH客户端和SSH服务器之间的密钥交换过程。
OpenSSH 命令注入漏洞:
由于OpenSSH在处理某些功能时未正确处理用户输入,攻击者可以通过SSH连接发送特制的命令,可能导致在服务器上执行未授权的恶意命令。
OpenSSH信息泄露漏洞:
由于OpenSSH在处理SSH连接时未能正确处理特定的SSH密钥格式,导致可能泄露用户的私钥信息。
安全处理建议:
官方已发布修复方案,受影响的用户建议更新至安全版本,官方下载链:
ssh -V 可查看当前Openssh和Openssl版本
# ssh -V
# OpenSSH_8.0p1, OpenSSL 1.1.1k FIPS 25 Mar 2021
说明:
1、安装OpenSSH需要安装OpenSSL
。
OpenSSH依赖于OpenSSL,没有安装OpenSSL,OpenSSH将无法编译和运行。OpenSSH使用OpenSSL提供的库来实现加密通讯会话,因此OpenSSL是必需的。
2、OpenSSL的作用。
OpenSSL是一种加密方式,实现了SSL/TLS协议,而OpenSSH则利用OpenSSL提供的库来实现会话中的SSL过程。具体来说,OpenSSH在编译和运行过程中需要依赖OpenSSL提供的加密功能。
这里我们选择安装Openssh9.8p1的版本,
安装openssh-9.8p1需要升级到OpenSSL1.1.1 以上,查看当前OpenSSL版本是否符合
重要提示!
如果原来的Openssl是1.1.1w,只需要升级OpenSSH即可
,
升级OpenSSL会造成yum、rpm、python、ssh、scp相关功能不可用
,后面附带解决方法,解决后会存在
OpenSSL heard(头文件)和库文件不匹配
的问题,虽然未发现不匹配后有什么影响,但如非必要,不建议升级OpenSSL 。
升级后报错如图示,解决方法在安装OpenSSL中有说明:
执行rpm和yum提示找不到 EVP_md2
安装包连接:
OpenSSL1.1.1w :
https://www.openssl.org/source/old/1.1.1/openssl-1.1.1w.tar.gz
OpenSSL1.1.1k:网上搜索不好找,可在在本人CSDN资源列表中下载
重要提示!
安装前检查当前SSH配置文件/etc/ssh/sshd_config的正确性,检查完成后,建议开两个窗口,窗口1重启SSH服务,重启后验证SSH是否可以登陆,如不能SSH登陆,窗口2可进行配置文件修改,保证重启完SSH服务后可正常请求访问!
建议取消对ROOT的SSH登陆访问限制
PermitRootLogin no 改为 yes
接下来,进入正题:
一、安装OpenSSL(可根据当前版本选择安装或不安装)
1、进入安装目录
# cd /usr/local/
2、本地上传安装包(openssl-1.1.1w.tar.gz)
# rz -be
3、解压OpenSSL安装包
# tar -zxvf openssl-1.1.1w.tar.gz
4、卸载原来的OpenSSL
# yum remove openssl
5、编译安装新的OpenSSL
# cd /usr/local/openssl-1.1.1w
# ./config --prefix=/usr
指定安装目录为/usr
# make && make install
这一条命令安装时间较长,耐心等待
以上三步可用 echo $? 来检查结果,输出为0表示正常,输出其他请重新检查编译安装
6、安装完成后可查看当前OpenSSL版本
# openssl version
OpenSSL 1.1.1w 11 Sep 2023
以上为Centos8以下系统全部步骤-,Centos8以上及其他(包括BClinux)系统还需进行如下步骤
Centos8以上和BClinux系统执行到上述第6个步骤时,可验证yum、rpm、ssh服务是否可用,如不可用,按下面步骤操作
# vim /etc/ld.so.conf
include ld.so.conf.d/*.conf
/lib64
/usr/local/openssl-1.1.1w/
# ldconfig
(加载openssl库文件动态连接)
如果上面这条指令提示如下:
ldconfig ldconfig: /lib64/libcrypto.so.1.1 不是符号链接
ldconfig: /lib64/libssl.so.1.1 不是符号链接
则依次执行如下命令:
# rm /lib64/libcrypto.so.1.1
# rm /lib64/libssl.so.1.1
# ln -sf /usr/local/openssl-1.1.1w/libcrypto.so.1.1 /lib64/libcrypto.so.1.1
重新指向软连接,将新安装的库文件链接到系统默认的库路径下
# ln -sf /usr/local/openssl-1.1.1w/libssl.so.1.1 /lib64/libssl.so.1.1
重新指向软连接,将新安装的库文件链接到系统默认的库路径下
执行完成后测试yum、rpm等命令是否可用
二、
安装OpenSSH
1、进入安装目录
# cd /usr/local/
2、本地上传安装包(openssh-9.8p1.tar.gz)
# rz -be
3、解压OpenSSH安装包
# tar -zxvf openssh-9.8p1.tar.gz
4、备份原来的SSH配置文件
# mkdir /home/sshbackup
# cp /etc/ssh/sshd_config /home/sshbackup/sshd_config.bak
# cp /etc/pam.d/sshd /home/sshbackup/sshd.bak
5、卸载原来的OpenSSH
# rpm -e --nodeps `rpm -qa | grep openssh`
-这一步可能会有如下告警提示,可以忽略它的存在:
warning: /etc/ssh/sshd_config saved as /etc/ssh/sshd_config.rpmsave
warning: /etc/pam.d/sshd saved as /etc/pam.d/sshd.rpmsave
这条卸载 OpenSSH 的命令表示卸载与 OpenSSH 相关的所有包,并且选择了不检查依赖关系(--nodeps 选项),在卸载过程中,/etc/ssh/sshd_config 和 /etc/pam.d/sshd 这两个配置文件被保存为了 .rpmsave 后缀的备份文件。这意味着原始的配置文件在卸载过程中被替换或删除了,但系统为您保留了备份。
# rpm -qa openssh
(检查是否还有openssh的安装包 )
6、编译安装新的OpenSSH
# cd /usr/local/openssh-9.8p1
# yum install pam-devel.x86_64
(安装pam,编译的时候会用到 )
注意编译最后一个指令
(--without-openssl-header-check )如果升级了openssl,在编译时则需要加上这条
# ./configure --prefix=/usr/local/openssh9.8p1 --exec-prefix=/usr --sysconfdir=/etc/ssh --with-md5-passwords --with-pam --with-zlib --with-selinux --with-tcp-wrappers --with-ssl-dir=/usr/ssl --without-hardening
--without-openssl-header-check
(该条表示忽略openssl头文件和库文件不匹配问题,如果升级了openssl,在编译时则需要加上这条,否则编译会报错)
# make && make install
编译参数说明
--prefix=/usr/local/openssh9.8p1:
这指定了 OpenSSH 安装的根目录。所有文件(除非另有指定)都会安装在这个目录下。
--exec-prefix=/usr:
这指定了可执行文件(如 sshd, ssh 等)的安装目录。
--sysconfdir=/etc/ssh:
这指定了配置文件(如 sshd_config)的安装目录。
--with-md5-passwords:
启用对 MD5 密码的支持。
--with-pam:
启用 PAM (Pluggable Authentication Modules) 支持,这对于大多数 Linux 系统来说是必需的,以处理用户认证。
--with-zlib:
启用 zlib 压缩库的支持,这可以用于压缩 SSH 会话数据,提高传输效率。
--with-selinux:
启用 SELinux 支持,这对于运行在使用 SELinux 的系统上的 OpenSSH 来说是重要的安全特性。
--with-tcp-wrappers:
启用 tcp_wrappers 支持,这允许通过 /etc/hosts.allow 和 /etc/hosts.deny 文件来控制对 SSH 服务的访问。
--with-ssl-dir=/usr/ssl:
指定 SSL 库的位置
--without-openssl-header-check
表示忽略openssl文件和库文件不匹配问题
7、编译完成后
如果报错如下,请执行下面的命令来修改所有相关私钥文件的权限
如果无报错,请直接进行第8个步骤
WARNING: UNPROTECTED PRIVATE KEY FILE!
Permissions 0640 for '/etc/ssh/ssh_host_rsa_key' are too open. It is required that your private key files are NOT accessible by others. This private key will be ignored.
WARNING: UNPROTECTED PRIVATE KEY FILE! @ Permissions 0640 for '/etc/ssh/ssh_host_ecdsa_key' are too open. It is required that your private key files are NOT accessible by others. This private key will be ignored.
WARNING: UNPROTECTED PRIVATE KEY FILE!
Permissions 0640 for '/etc/ssh/ssh_host_ed25519_key' are too open. It is required that your private key files are NOT accessible by others. This private key will be ignored. sshd: no hostkeys available -- exiting. make: [Makefile:396:check-config] 错误 1 (已忽略)
表示SSH私钥文件权限错误导致的问题
问题描述:SSH私钥文件权限设置不当,导致SSH服务无法启动。
# chmod 600 /etc/ssh/ssh_host_*_key
8、拷贝生成新的sshd
# cp -a /usr/local/openssh-9.8p1/contrib/redhat/sshd.init /etc/init.d/sshd
9、给当前用户设置访问权限(root)
# chmod u+x /etc/init.d/sshd
10、回拷备份配置文件
# cp /home/ssh/sshd_config.bak /etc/ssh/sshd_config
# cp /home/ssh/sshd.bak /etc/pam.d/sshd
11、设置SSH服务为开机自启动
# systemctl enable sshd 或者 chkconfig sshd on
12、重启SSH服务
# systemctl restart sshd
13、验证版本,验证SSH登陆
# ssh -V
# OpenSSH_8.9p1, OpenSSL 1.1.1k FIPS 25 Mar 2021
# OpenSSH_8.9p1 25 Mar 2021

1万+

被折叠的 条评论
为什么被折叠?



