openssh7.4p升级到9.0p

本文档详述了在CentOS 7系统中升级OpenSSL和OpenSSH的步骤,包括启用telnet作为备用、备份文件、安装依赖、编译安装新版本、配置文件修改、功能验证和关闭telnet。升级过程中强调了备份重要文件、测试功能和注意安全风险的重要性。
摘要由CSDN通过智能技术生成

目录

1.前言

2.安装前准备

2.1 启用telnet

2.2 建立备份目录

3.3 安装依赖环境

3.升级openssl

3.1 备份文件

3.2 编译安装openssl

4.升级openssh

4.1 安装zlib

4.2 备份文件

4.3 卸载历史openssh

4.4 编译安装openssh

4.5 配置文件

4.6 功能验证

4.7 关闭telnet远程登录

5 注意事项


1.前言

        对于很多小伙伴来说升级openssh是一件很痛苦的事情(各种问题搞得香菇)。但是漏洞不等人呐说有就有。没办法面对漏洞跪着也要搞完(苦逼运维的自白)。以下的操作说明是小M连续在本地环境(不敢搞生产呀)反复测了N次总结的一些经验与大家分享,希望小伙伴们可以在面对open大坑时也能坦然面对、从容蛋定~~~,废话不多说直奔主题。

2.安装前准备

        openssl下载地址:Release OpenSSL_1_1_1q · openssl/openssl · GitHub

        zlib下载地址:zlib Home Site

        openssh下载地址:pub-OpenBSD-OpenSSH-portable安装包下载_开源镜像站-阿里云

        以上为本次升级所需包的下载地址,后续更新时需注意下载对应的安全无漏洞版本

        升级前先下载以上三个包并上传到服务器,本次三个包的版本分别是:openssl:1.1.1q;openssh:9.0.p1;zlib:1.2.1

        说明:升级openssh前需要安装多个依赖,目标服务器必须可连接外网

        检查服务器是否可连外网

# 检查能否连外网
curl -v www.baidu.com

        升级前查看当前操作系统的openssl的版本是多少,若在漏洞范围内则确定本次需升级

# 查看当前openssl版本
openssl version
# 查看当前openssh版本
ssh -V

2.1 启用telnet

        为防止升级openssh后无法通过ssh连接,升级前需要设置服务器可通过telnet登录,待ssh升级验证通过后再关闭

# 1.安装xinetd、telnet
yum install -y xinetd telnet-server 
# 2.配置telnet(默认无telnet配置文件,首次需新增)
vi /etc/xinetd.d/telnet
service telnet
{
    disable = yes
    flags       = REUSE
    socket_type = stream       
    wait        = no
    user        = root
    server      = /usr/sbin/in.telnetd
    log_on_failure  += USERID
}
# 添加完成后:wq保存退出
# 3.配置telnet登录的终端类型,在/etc/securetty文件末尾增加终端
vi /etc/securetty
pts/0
pts/1
pts/2
pts/3
# 添加完成后:wq保存退出
# 4.启动telnet服务
systemctl enable xinetd --now
systemctl enable telnet.socket --now
# 5.查看telnet端口使用启用(telnet默认端口:23),若启
ss -luntp | grep 23
# 6.若5可以看到23端口处于启动状态,则可在windows下 cmd 执行 telnet ip 验证是否可以连接,可连接则代表无问题,否则查看上述的步骤是否有问题

        至此telnet启用完成

2.2 建立备份目录

# 目标服务器上建立两个目录,/data /backup
mkdir /data # 用于存放安装包
mkdir -p /backup/openssl # 存放原openssl备份文件
mkdir /backup/openssh # 存放原openssh有关的备份文件

3.3 安装依赖环境

        依赖环境需在安装openssl、openssh前进行安装,否则后续安装时会覆盖已经安装好的openssl

# 1.安装依赖环境
yum install  -y zlib-devel openssl-devel pam-devel openssl gcc perl pam* zlib*

        升级顺序:openssl —— openssh

3.升级openssl

3.1 备份文件

# openssl依赖库
cp /usr/lib64/libcrypto.so.10 /backup/openssl
cp /usr/lib64/libcrypto.so.1.0.2k /backup/openssl
cp /usr/lib64/libssl.so.10  /backup/openssl
cp /usr/lib64/libssl.so.1.0.2k /backup/openssl
# openssl可执行文件
mv /usr/bin/openssl /backup/openssl
# openssl依赖文件
mv /usr/include/openssl /backup/openssl/include_openssl
# 配置文件
cp /etc/ld.so.conf /backup/openssl/etc_ld.so.conf

3.2 编译安装openssl

# 1.删除原有的ssl目录
rm -rf /etc/ssl

# 2.解压openssl安装包
cd /data; tar -xf openssl-OpenSSL_1_1_1q.tar.gz
# 进入解压目录,执行编译安装
cd openssl-OpenSSL_1_1_1q
./config shared --prefix=/usr/local/ssl
# 成功显示
Operating system: x86_64-whatever-linux2
Configuring OpenSSL version 1.1.1q (0x1010111fL) for linux-x86_64
Using os-specific seed configuration
Creating configdata.pm
Creating Makefile
**********************************************************************
***                                                                ***
***   OpenSSL has been successfully configured                     ***
***                                                                ***
***   If you encounter a problem while building, please open an    ***
***   issue on GitHub <https://github.com/openssl/openssl/issues>  ***
***   and include the output from the following command:           ***
***                                                                ***
***       perl configdata.pm --dump                                ***
***                                                                ***
***   (If you are new to OpenSSL, you might want to consult the    ***
***   'Troubleshooting' section in the INSTALL file first)         ***
***                                                                ***
**********************************************************************
# 若无报错则继续执行,否则处理报错问题
make && make install
# 查看编译安装结果(返回0代表编译安装成功)
echo $?

# 3.建立软连接及修改配置文件
echo "/usr/local/ssl/lib">>/etc/ld.so.conf
ln -s /usr/local/ssl/bin/openssl /usr/bin/openssl
ln -sf /usr/local/ssl/include/openssl /usr/include/openssl
echo "/usr/local/ssl/lib" >/etc/ld.so.conf.d/openssl.conf
ldconfig
​
# 4.查看版本,若以上都无问题则此时可以看到升级后的openssl版本
openssl version
OpenSSL 1.1.1q  5 Jul 2022

        至此openssl升级完成

4.升级openssh

4.1 安装zlib

# 1.解压zlib到data目录下
tar -xf zlib-1.2.12.tar.gz

# 2.进入zlib解压目录执行编译安装
cd zlib-1.2.12
./configure --prefix=/usr/local/zlib
# 结果展示
Checking for gcc...
Checking for shared library support...
Building shared library libz.so.1.2.12 with gcc.
Checking for size_t... Yes.
Checking for off64_t... Yes.
Checking for fseeko... Yes.
Checking for strerror... Yes.
Checking for unistd.h... Yes.
Checking for stdarg.h... Yes.
Checking whether to use vs[n]printf() or s[n]printf()... using vs[n]printf().
Checking for vsnprintf() in stdio.h... Yes.
Checking for return value of vsnprintf()... Yes.
Checking for attribute(visibility) support... Yes

# 3.编译安装
make && make install

# 4.查看编译结果(0为成功)
echo $?

4.2 备份文件

# ssh配置文件目录
mv /etc/ssh /backup/openssh
# pam.d/sshd 文件
mv /etc/pam.d/sshd /backup/openssh

4.3 卸载历史openssh

# 1.查看是否存在历史版本
rpm -qa | grep openssh

# 2.卸载历史版本
rpm -e --nodeps `rpm -qa | grep openssh`

4.4 编译安装openssh

# 1.在data目录下解压openssh
tar -xf openssh-9.0p1.tar.gz
​
# 2.进入解压目录执行编译安装
cd openssh-9.0p1
# 初始化变量
./configure --prefix=/usr/local/ssh --sysconfdir=/etc/ssh --with-openssl-includes=/usr/local/ssl/include --with-ssl-dir=/usr/local/ssl --with-zlib=/usr/local/zlib --with-md5-passwords --with-pam
# 关于prefix目录的说明:网上的资料一般建议安装在/usr目录下,这样的好处是编译安装时会直接把可执行文件放到指定的目录,无需建立软链接。但不熟悉目录结构的话则不清楚文件都放到了哪里,且不便于后期升级。据此最好指定一个其他的目录,编译安装完成后再做软链接
​
# 编译安装
make && make install
# 查看编译结果(0为成功)
echo $?

4.5 配置文件

# 创建链接
ln -sf /usr/local/ssh/libexec /usr/libexec/openssh
ln -sf /usr/local/ssh/sbin/sshd /usr/sbin/sshd
ln -sf /usr/local/ssh/bin/scp /usr/bin/scp
ln -sf /usr/local/ssh/bin/ssh /usr/bin/ssh
ln -sf /usr/local/ssh/bin/ssh-add /usr/bin/ssh-add
ln -sf /usr/local/ssh/bin/ssh-agent /usr/bin/ssh-agent
ln -sf /usr/local/ssh/bin/ssh-keygen /usr/bin/ssh-keygen
ln -sf /usr/local/ssh/bin/ssh-keyscan /usr/bin/ssh-keyscan
​
# 在openssh的解压文件下执行
cp contrib/redhat/sshd.init /etc/init.d/sshd
cp contrib/redhat/sshd.pam /etc/pam.d/sshd.pam
cp contrib/ssh-copy-id /usr/bin/ssh-copy-id
# 赋权ssh-copy-id
chmod 755 /usr/bin/ssh-copy-id
​
# 还原备份文件
cp /backup/openssh/ssh/sshd_config /etc/ssh/
cp /backup/openssh/ssh/ssh_config /etc/ssh/
cp /backup/openssh/sshd /etc/pam.d
# 追加到sshd_config
echo "KexAlgorithms curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group14-sha1,diffie-hellman-group-exchange-sha1,diffie-hellman-group1-sha1" >> /etc/ssh/sshd_config
​
# 修改sshd_config
vi /etc/ssh/sshd_config
# 取消PermitRootLogin yes的注释 (若不允许root远程登录则此项忽略)
PermitRootLogin yes
# 取消PubkeyAuthentication yes 的注释
PubkeyAuthentication yes
# 若UsePAM yes 默认被注释 则关闭注释
UsePAM yes
​
# 修改ssh_config
vi /etc/ssh/ssh_config
# 将GSSAPIAuthentication yes注释掉
#GSSAPIAuthentication yes
# 保存并退出
​
# 还原依赖库
mv /backup/openssl/libcrypto.so.10 /usr/lib64/libcrypto.so.10
mv /backup/openssl/libssl.so.10 /usr/lib64/libssl.so.10
​
# 设置开机自启
chkconfig sshd on
​
# 启动sshd(或者使用systemctl启动也可以)
/etc/init.d/sshd start
# 服务启动成功后,查看当前版本
ssh -V
OpenSSH_9.0p1, OpenSSL 1.1.1q  5 Jul 2022

4.6 功能验证

        需验证 ssh scp ssh-keygen ssh-copy-id xftp 等是否可用

# 验证ssh
# 1.使用ssh工具远程连接已经升级openssh的服务器,若可连接则代表此功能正常
​
# 验证ssh-keygen
# 1.清除/root/.ssh 下的所有文件
rm -rf /root/.ssh/*
# 2.执行ssh-keygen 点击空格即可
ssh-keygen
# 3.查看/root/.ssh 是否存在公私钥,若存在则代表ssh-keygen功能正常
ls /root/.ssh/
​
# 验证ssh-copy-id
# 1.验证条件,已通过ssh-keygen生成公私钥
# 2.将公钥上传至其他目标服务器,如:192.168.1.1
ssh-copy-id root@192.168.1.1
# 3.上传成功后通过ssh查看是否可免密登录
ssh root@192.168.1.1
# 4.若能登录则代表该功能正常
​
# 验证scp
# 1.在升级openssh的服务器创建测试文件test.txt
touch test.txt
# 2.使用scp将测试文件上传到已经做过免密登录的服务器上
scp test.txt root@192.168.1.1:/usr/local
# 3.若上传成功则代表该功能正常
​
# 验证xftp
# 1.打开xftp工具,使用升级openssh的服务器用户名密码,点击连接
# 2.若连接成功则代表该功能正常

        若服务器之前做过防暴力破解加固,则还需验证当前加固是否可用

# 验证密码错误输入次数限制
# 1.编辑/etc/pam.d/sshd 文件
vi /etc/pam.d/sshd
# 在第一行添加以下内容
auth required pam_tally2.so deny=3 unlock_time=60 even_deny_root root_unlock_time=60
# 添加完成后保存退出
​
# 2.新打开一个终端窗口(不要直接从已保存的会话中启动),ssh远程连接此服务器,输入错误3次后输入正确的密码
ssh root@192.168.1.1

# 3.正常情况:即使输入正确的密码也无法登录服务器

# 4.等待60秒后再次输入正确的密码,若此时能够登录则代表防暴力破解功能正常

        以上功能全部测试通过后即可判定此次升级openssh成功

4.7 关闭telnet远程登录

        为防止后续还会升级openssh,以上验证通过后关闭telnet连接即可,无需卸载

# 关闭telnet
systemctl disable xinetd --now
systemctl disable telnet.socket --now

        至此升级工作完成。

5 注意事项

        1、由于升级openssh会带来一些不必要及不可预料的问题,如:无法远程连接、个别功能不可用、防暴力破解失效 等等,如非必要尽可能不要做升级操作,若必须升级,一定要在自己的虚拟环境下反复测试验证几遍,确保无问题后再上生产操作,尽可能的降低升级风险。

        2、本说明文档的实验环境是:centos7.9 x86_64,理论上支持同服务器架构 centos7.x 系列的openssh升级。当前未在arm架构上做测试,无法确保此升级方案在arm架构上的可行性!!!

        3、升级过程中一定要操作说明做好相关的备份,以防升级失败时可快速还原

        4、升级openssh存在不稳定性,不同服务器环境可能出现的问题不同,升级过程中具体问题需具体分析。

        5、升级openssh后免密登录密钥失效,需重新生成密钥并上传到要免密登录的服务器当中。

        原创不易,转载的小伙伴请标明出处,谢谢~

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

麻辣烫的麻

知识本无价但你的支持是我的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值