centos7 升级openssl 与升级openssh 安装卸载 telnet-server

前言: 服务器被安全扫描,扫出了漏洞需要修复,根据提示将openssh升级为9.8p1的版本,同时需要升级openssl,但是升级openssh可能会导致ssh连接失败,从而无法继续操作,特别是远程机房尤为危险,一不小心便要进入机房原地操作,所以安装 telnet-server 做备用链接,但是 telnet-server 不是安全链接,所以升级完成后需要关闭 telnet-server

一、 安装包准备

二、 安装telnet-server 做备用链接(如果是本地虚拟机,或者不考虑ssh链接失败的可能,可忽略这一步)

  • 安装前提醒说明一下,Telnet本身是有如下缺陷的:

    • 没有口令保护,远程用户的登陆传送的帐号和密码都是明文,很容易截获,没有强力认证过程,只是验证帐户和密码。
    • 没有完整性检查。传送的数据没有办法知道是否完整的未被篡改过的,传送的数据是明文。
      为了避免不必要的安全风险,在升级完成 openssh 后,本文会引导卸载telnet-server。
  • 2.1 使用 cat /etc/passwd 命令查看服务器是否有非root管理员账号,如果没有则添加并将管理员账号并设置密码,且允许该账号登录root账号 示例: sysadmin Sysadmin!123

coffeescript 复制代码
# /etc/sudoers 文件 查看是否有其他非root账号
cat /etc/passwd

# 没有则添加 sysadmin 账号
adduser sysadmin
# 设置账号密码为 Sysadmin!123
passwd sysadmin
# 会提示输入密码,输入后会提示已修改密码成功

# 允许 sysadmin 登录root账号  /etc/sudoers 文件 中需要有 sysadmin ALL=(ALL:ALL) ALL
cat /etc/sudoers
# 没有登录需要的账号则添加 sysadmin ALL=(ALL:ALL) ALL 已有请忽略
vi /etc/sudoers
  • 2.2 安装telnet
bash 复制代码
# 检查是否有安装
rpm -qa telnet
rpm -qa telnet-server
rpm -qa xinetd
# 安装对应包
yum install telnet-server
yum install telnet
yum install -y xinetd
# xinetd 是 telnet-server 的守护进程,需要按照 xinetd 才能远程控制

#telnet 是控制 23 端口,防火墙释放 23端口
firewall-cmd --zone=public --add-port=23/tcp --permanent
# 重启防火墙
firewall-cmd --reload

# 如果是新安装的 telnet-server 需要配置 telnet-server 参数
cat << EOF > /etc/xinetd.d/telnet
service telnet
{
    flags = REUSE
    socket_type = stream
    wait = no
    user = root
    server = /usr/sbin/in.telnetd
    log_on_failure += USERID
    disable = no
}
EOF

# 启动 telnet-server
systemctl start telnet.socket
# 启动 xinetd
systemctl start xinetd

# 验证 telnet 服务状态
systemctl status telnet.socket
# 验证 xinetd 服务状态
systemctl status xinetd -l

服务都是已启动状态,尝试远程使用 telnet 登录

  • 2.3 远程访问:(我这儿是局域网)
  • 如果连不上,检查是否是开启了防火墙,需要将端口 23 加入防火墙白名单(连上了请忽略)
bash 复制代码
#查看所有放行的端口
firewall-cmd --list-ports --permanent
# 如果没有端口23,开启端口 23
firewall-cmd --zone=public --add-port=23/tcp --permanent
 # 重启防火墙
firewall-cmd --reload

成功登录 root 账号后,可以完成命令操作则 telnet-server 安装完成

bash 复制代码
# 连接登录后,需要输入账号
sysadmin
# 根据提示输入密码
Sysadmin!123
# 登入后切换到root账号(注意root账号是最高权限,操作需谨慎)
su
# 输入 root 账号密码,进入系统,能成功进入系统,表示备用链接已完成安装

三、 升级 openssl

  • 3.1 先使用 openssl version 命令查看OpenSSL版本,版本符合要求则不升级
  • 3.2 如需要升级,将安装包放到 /usr/local/ 目录下解压
bash 复制代码
cd /usr/local/
tar -xvf openssl-3.4.0.tar.gz
# 解压完成后进入解压后的文件夹
 cd openssl-3.4.0
复制代码
配置config 说明:
 --prefix:指定安装目录
--openssldir:指定配置文件目录
shared:作用是生成动态连接库
zlib:使用静态的zlib压缩库
bash 复制代码
# 配置安装
./config --prefix=/usr/local/openssl --openssldir=/usr/local/openssl shared zlib
  • 如果报错,查看缺少什么插件,安装后继续
bash 复制代码
# 缺少 perl-IPC-Cmd 使用yum 安装
yum -y install perl-IPC-Cmd
# 缺少 perl-Data-Dumper
yum install perl-Data-Dumper
# 安装完成后,重新执行配置
./config --prefix=/usr/local/openssl --openssldir=/usr/local/openssl shared zlib
  • 3.3 配置成功后按开始安装
bash 复制代码
# 开始安装
make
make install
# 可能会出现 缺少openssl开发依赖包,则安装
yum -y install openssl-devel
# 执行完成后,重新执行 make & make install

安装成功
- 3.4 备份旧版本配置

bash 复制代码
mv /usr/bin/openssl /usr/bin/old_241114_openssl
mv /usr/lib64/openssl /usr/lib64/old_241114_openssl
mv /usr/include/openssl /usr/include/old_241114_openssl
# 删除旧版本的库连接
rm -f /usr/lib64/libssl.so.10
rm -f /usr/lib64/libcrypto.so.10
  • 3.5 配置启动
bash 复制代码
#依次执行
ln -s /usr/local/ssl/bin/openssl /usr/bin/openssl
ln -s /usr/local/ssl/lib64/libssl.so.3 /usr/lib64/libssl.so.3
ln -s /usr/local/ssl/lib64/libcrypto.so.3 /usr/lib64/libcrypto.so.3

echo "/usr/local/ssl/lib64" >> /etc/ld.so.conf

ldconfig

# 创建软链接

ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl
ln -s /usr/local/openssl/include/openssl /usr/include/openssl
ln -s /usr/local/openssl/lib64/libssl.so.3 /usr/lib64/libssl.so.3
ln -s /usr/local/openssl/lib64/libcrypto.so.3 /usr/lib64/libcrypto.so.3
# 添加OpenSSL动态链接库 下面两个配置,先执行第一个,如果后续出问题再回来尝试第二个
echo "/usr/local/openssl/lib" >> /etc/ld.so.conf
# 如果按照openssh 找不到 ssl 库,试试这一个 库的位置跟不同的 openssl 版本有关
# echo "/usr/local/ssl/lib64" >> /etc/ld.so.conf
# 更新库缓存
ldconfig
# 查看OpenSSL版本验证安装是否成功
openssl version

openssl 安装完成

四、 升级 openssh

  • 4.1 将下载的openssh 包放在 /usr/local/ 目录下解压
bash 复制代码
cd /usr/local/
# 解压
tar -zxvf openssh-9.8p1.tar.gz
  • 4.2 卸载旧版本openSSH,注意:卸载完后千万不能断开,断开就连不上了,卸载后其他人也无法通过ssh链接(真断开了就使用最开始安装的telnet连接也能继续操作)
bash 复制代码
yum remove -y openssh

# 清理残余文件,配置也会消失,做好备份
rm -rf /etc/ssh/*
  • 4.3 编译安装
bash 复制代码
./configure --prefix=/usr/local/openssh --with-zlib=/usr/local/zlib --with-ssl-dir=/usr/local/openssl
# 安装
make
make install

configure 完成

make install 完成

  • 4.4 以上操作都没有报错,则可以开始配置登录
bash 复制代码
#ssh允许root登录、需要密码进行验证
echo 'PermitRootLogin yes' >>/usr/local/openssh/etc/sshd_config
echo 'PubkeyAuthentication yes' >>/usr/local/openssh/etc/sshd_config
echo 'PasswordAuthentication yes' >>/usr/local/openssh/etc/sshd_config
# 修改默认端口 注意改回未升级时的端口,如果是新端口则需要设置防火墙,见第一步安装 telnet 时端口防火墙设置方法
echo 'Port 22' >>/usr/local/openssh/etc/sshd_config

#将编译安装的新配置文件 拷贝到原路径下,拷贝前记得对比 sshd_config 文件,将原有设置尽可能保存
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

#拷贝启动脚本
cp -p contrib/redhat/sshd.init /etc/init.d/sshd
#给sshd添加可执行权限
chmod +x /etc/init.d/sshd
#设置开机自启
systemctl enable sshd
#重新启动sshd服务
systemctl restart sshd
#查看sshd服务状态
systemctl status sshd


注意: 如果没有启动成功,千万不要断开链接,断开后就连不上了,要排查哪儿错了,解决问题后再启动成功再断开(PS:如果安装了第一步,可以使用telnet连接)

  • 4.5 查看OpenSSH版本,显示新版本就是升级成功了,如果显示还是旧的话断开重连一下再查看版本,可能没刷新,重新登录还是没有,重复安装步骤,查看是否哪儿报错未及时处理
bash 复制代码
ssh -V

版本都是你需要的版本,则完成安装(我这儿安装了两台不同需求的服务器,截图的版本有些不能对应上,请忽略)

五、关闭 telnet-server 避免不安全的漏洞

  • 为了避免elnet本身的缺陷对服务器引发不安全漏洞,确定openssh安装完成后,关闭telnet服务端。
  • 5.1 修改xinetd配置
bash 复制代码
# 修改为disable=yes
vi /etc/xinetd.d/telnet 
  • 5.2 重启xinetd服务,关闭telnet-server 连接
bash 复制代码
# 重启xinetd服务
systemctl restart xinetd.service

# 检查telnet服务是否已关闭(如已关闭则会显示telnet = off)
chkconfig --list |grep telnet

# 检查23端口是否已关闭
netstat -tlun |grep 23
  • 5.3 删除telnet-server包 (可以只删除服务端,保留用户端,看实际需求)
bash 复制代码
# 只删除服务端,不删除客户端,方便以后重新安装,而且用户端可以连接其他 telnet 服务端
yum remove telnet-server -y 
# 彻底删除所有依赖包
# rpm -e telnet-server--nodeps 
  • 5.4 测试外部主机链接 telnet 已经无法在连接
  • 5.5 如果操作了防火墙,需要移除端口 23 的白名单
bash 复制代码
# 移除指定端口:
firewall-cmd --permanent --remove-port=23/tcp

# 重启防火墙
firewall-cmd --reload

# 查看所有放行的端口中是否没有端口 23
firewall-cmd --list-ports --permanent

完成

欢迎点赞收藏一键三连!

相关推荐
南来北往9 小时前
CentOS 7 Oracle 11g RAC+DataGuard 分阶段静默部署脚本
oracle·centos
Hoxy.R9 小时前
iSCSI 磁盘扩容后节点不刷新容量的问题解决(StarWind + Linux)
linux·运维·服务器
CV小白进阶路9 小时前
【无标题】Vscode 报错 got bad result from install script无法远程链接服务器
服务器·ide·vscode
lytao1239 小时前
使用 dnsmasq 搭建本地 DNS 服务器完整指南
运维·服务器·dns
心随雨下10 小时前
Tomcat日志配置与优化指南
java·服务器·tomcat
wljt10 小时前
Linux 常用命令速查手册(Java开发版)
java·linux·python
riderxin10 小时前
【20251028】固定Ubuntu的IP地址
linux·tcp/ip·ubuntu
赖small强10 小时前
Linux 内核 8 类同步机制详解(原理、场景与示例)
linux·信号量·原子操作·自旋锁·内核同步方法·读-写自旋锁·读-写信号量
YJlio10 小时前
PsService·下(7.21):Find/SetConfig 与服务的启动/停止/重启/暂停/恢复
linux·运维·服务器
波诺波10 小时前
环境管理器
linux·前端·python