近期服务器扫描报了一堆相关的高危漏洞,我亲自试了后都成功了,特写此文。
升级过程分为三步
- 配置telnet-server
- 升级openssl
- 升级openssh
配置telnet-server
升级openssh是一个很危险的操作,特别是在远程连接服务器的情况下,万一升级过程中因为网络不好或者其它一些原因导致ssh连接断开,那么就很有可能导致再也无法通过ssh连上服务器,因此升级之前我们要配置好备用的远程连接方法,这里我们使用telnet-server来作为备用连接
[root@localhost ~]# openssl version -a
OpenSSL 1.0.2k-fips 26 Jan 2017
built on: reproducible build, date unspecified
platform: linux-x86_64
options: bn(64,64) md2(int) rc4(8x,int) des(idx,cisc,16,int) idea(int) blowfish(idx)
compiler: gcc -I. -I.. -I../include -fPIC -DOPENSSL_PIC -DZLIB -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -DKRB5_MIT -m64 -DL_ENDIAN -Wall -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong –param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -Wa,–noexecstack -DPURIFY -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DRC4_ASM -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DMD5_ASM -DAES_ASM -DVPAES_ASM -DBSAES_ASM -DWHIRLPOOL_ASM -DGHASH_ASM -DECP_NISTZ256_ASM
OPENSSLDIR: "/etc/pki/tls"
engines: rdrand dynamic
[root@localhost ~]# cat /etc/redhat-release
CentOS Linux release 7.9.2009 (Core)
安装telnet-server
yum -y install telnet-server
启动并设置开机自启动
systemctl start telnet.socket && systemctl enable telnet.socket
如果有防火墙,则需要放行23端口
firewall-cmd –zone=public –add-port=23/tcp –permanent
重新加载防火墙配置使规则生效
firewall-cmd –reload
验证端口或服务是否已成功添加
firewall-cmd –query-port=23/tcp
或
firewall-cmd –query-service=telnet
在使用 telnet 连接服务器时,默认是不允许使用root登陆的,因此需要创建一个普通用户并赋予sudo权限
添加普通用户并设置密码
useradd yxnu
增加huge账号的sudo权限
在配置文件 /etc/sudoers 中添加配置,但该文件默认是没有写权限的,因此需要先增加写权限
chmod u+w /etc/sudoers
vi /etc/sudoers
yxnu ALL=(ALL) ALL
上面配置完成后就可以在windows下的终端中使用telnet命令来测试连接
telnet 192.168.0.31 23
升级openssl
新版本的openssh对openssl的版本是有要求的,因此需要先升级openssl的版本
wget https://www.openssl.org/source/openssl-1.1.1q.tar.gz –no-check-certificat
tar -zxvf openssl-1.1.1q.tar.gz
cd openssl-1.1.1q
#下载不到
https://github.com/openssl/openssl/releases/download/OpenSSL_1_1_1q/openssl-1.1.1q.tar.gz
查看INSTALL文件里面有安装条件以及安装说明
cat INSTALL
安装依赖
yum install -y gcc gcc-c++ glibc make automake autoconf zlib zlib-devel
编译安装
./config shared zlib -fPIC –prefix=/usr/local/openssl
make
make install
备份老版本的openssl
mv /usr/bin/openssl /usr/bin/openssl.bak
mv /usr/include/openssl /usr/include/openssl.bak
将新版本链接到指定路径
ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl
ln -s /usr/local/openssl/include/openssl /usr/include/openssl
将新的库文件地址写入记录so库的配置文件
echo '/usr/local/openssl/lib' > /etc/ld.so.conf.d/openssl-x86_64.conf
ldconfig -v
查看安装后的版本号,能正常显示则表示安装成功
openssl version -a
OpenSSL 1.1.1q 5 Jul 2022
built on: Wed Aug 10 14:05:26 2022 UTC
platform: linux-x86_64
options: bn(64,64) rc4(16x,int) des(int) idea(int) blowfish(ptr)
compiler: gcc -fPIC -pthread -m64 -Wa,–noexecstack -Wall -O3 -fPIC -DOPENSSL_USE_NODELETE -DL_ENDIAN -DOPENSSL_PIC -DOPENSSL_CPUID_OBJ -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DKECCAK1600_ASM -DRC4_ASM -DMD5_ASM -DAESNI_ASM -DVPAES_ASM -DGHASH_ASM -DECP_NISTZ256_ASM -DX25519_ASM -DPOLY1305_ASM -DZLIB -DNDEBUG
OPENSSLDIR: "/usr/local/openssl/ssl"
ENGINESDIR: "/usr/local/openssl/lib/engines-1.1"
Seeding source: os-specific
升级openssh
下载安装包,当前最新的openssh版本是9.0p1
下载安装包,当前最新的openssh版本是9.0p1
wget https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-9.0p1.tar.gz –no-check-certificat
接下来的步骤建议使用telnet的方式连接服务器后在操作
接下来的步骤建议使用telnet的方式连接服务器后在操作
首先停止当前的ssh服务器
systemctl stop sshd
备份当前ssh服务
cp -a /etc/ssh /etc/ssh.bak
cp -a /usr/sbin/sshd /usr/sbin/sshd.bak
cp -a /usr/bin/ssh /usr/bin/ssh.bak
查看当前openssh的软件包
rpm -qa | grep openssh
openssh-clients-7.4p1-16.el7.x86_64
openssh-7.4p1-16.el7.x86_64
openssh-server-7.4p1-16.el7.x86_64
卸载这三个软件包(快捷卸载方法:rpm -e rpm -qa | grep openssh –nodeps)
rpm -e openssh-clients-7.4p1-16.el7.x86_64 –nodeps
rpm -e openssh-server-7.4p1-16.el7.x86_64
rpm -e openssh-7.4p1-16.el7.x86_64
安装依赖包
yum install -y gcc gcc-c++ glibc make automake autoconf zlib zlib-devel pcre-devel perl perl-Test-Simple
解压源码包
tar -zxvf openssh-9.0p1.tar.gz
cd openssh-9.0p1
查看INSTALL文件里面有安装条件以及安装说明
cat INSTALL
编译安装
./configure –prefix=/usr/local/openssh –with-ssl-dir=/usr/local/openssl –with-zlib
make
make install
正常情况下按上面的配置编译安装即可,如果想安装其它模块,则需要安装对应依赖
如下面列出的一些模块,以及对应的依赖包
–with-pam –with-ssl-engine –with-selinux
yum install -y pam-devel libselinux-devel
配置启动脚本,源码包中提供了启动脚本
配置启动脚本前先检查原来openssh的systemd配置文件,如果有则将其删除,防止和新的启动脚本冲突
正常情况下这些脚本都会在卸载老版本openssh的自动删除
ls /usr/lib/systemd/system/ssh*
rm -f /usr/lib/systemd/system/ssh*
拷贝启动脚本
cp contrib/redhat/sshd.init /etc/init.d/sshd
如果安装了pam模块则需要拷贝sshd.pam配置文件
cp contrib/redhat/sshd.pam /etc/pam.d/
建立软连接
ln -s /usr/local/openssh/etc /etc/ssh
ln -s /usr/local/openssh/sbin/sshd /usr/sbin/
ln -s /usr/local/openssh/bin/* /usr/bin/
systemctl daemon-reload
启动并设置开机自启动
systemctl start sshd && systemctl enable sshd
查看状态,已经是 running 状态了
systemctl status sshd
● sshd.service – SYSV: OpenSSH server daemon
Loaded: loaded (/etc/rc.d/init.d/sshd; bad; vendor preset: enabled)
Active: active (running) since Wed 2022-08-10 22:35:16 CST; 1 day 17h ago
Docs: man:systemd-sysv-generator(8)
Main PID: 10712 (sshd)
CGroup: /system.slice/sshd.service
├─10712 sshd: /usr/sbin/sshd [listener] 0 of 10-100 startups
├─13611 sshd: hckj [priv]
├─13613 sshd: hckj@pts/0
├─13614 -bash
├─13645 sudo -i
├─13646 -bash
└─13711 systemctl status sshd
查看版本号已经升级成功
ssh -V
OpenSSH_9.0p1, OpenSSL 1.1.1q 5 Jul 2022
ssh的默认配置文件是禁止root用户远程登录的
若需要root用户远程登录,则按修改如下配置文件,然后重启ssh服务即可
vi /etc/ssh/sshd_config
#未找到的查找配置
sudo find / -name "sshd_config"
#实际位置
/usr/local/openssh/etc/sshd_config
PermitRootLogin yes
systemctl restart sshd
ssh升级完成,测试ssh连接是否正常(有条件可以重启服务再测试ssh是否连接正常)
测试正常后就可以删除 telnet-server 和对应的用户了,删除步骤如下
systemctl stop telnet.socket
systemctl disable telnet.socket
rpm -e telnet-server
删除用户
userdel -r yxnu
编辑sudo配置文件,去除对应配置段
vi /etc/sudoers
恢复sudo配置文件的权限
chmod u-w /etc/sudoers



