目录
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后免密登录密钥失效,需重新生成密钥并上传到要免密登录的服务器当中。
原创不易,转载的小伙伴请标明出处,谢谢~文章来源:https://www.toymoban.com/news/detail-417377.html
文章来源地址https://www.toymoban.com/news/detail-417377.html
到了这里,关于openssh7.4p升级到9.0p的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!