Linux Openssh 升级(详)

环境:

系统版本:CentOS Linux release 7.4.1708(Core)

Openssh 由6.6.6p1升级到9.2p1

升级说明:

OpensSSH依赖于OpenSSL,

源码包下载地址:https://mirrors.aliyun.com/pub/OpenBSD/OpenSSH/portable/

OpenSSH sshd 缓冲区错误漏洞(CVE-2016-10012),OpenSSH <7.4

OpenSSH 代码问题漏洞(CVE-2016-10009),OpenSSH< 7.4

OpenSSH 资源管理错误漏洞(CVE-2021-28041),OpenSSH <8.5

安装步骤:

  1. 准备工作

1)版本信息查看

ssh -V

2)开启相应服务

rpm -qa telnet telnet-server xinetd //检查telnet 、telnet-server、xinetd包是否安装

如果没有安装,执行安装命令,如果安装了,检查服务状态,加入到启动项中。

yum install telnet telnet-server xinetd -y //安装网络守护、telnet服务、telnet包

systemctl status telnet.socket //检查telnet服务状态

systemctl start telnet.socket //开启telnet服务状态

systemctl enable telnet.socket //开机自启telnet服务

systemctl status xinetd //检查网络守护进程状态

systemctl enable xinetd //开机起xinetd服务

systemctl list-unit-files |grep enable //检查开启服务启动项

vim /etc/xinetd.conf ,将enable改为yes

注:CentOS7之前的版本修改/etc/xinetd.d/telnet ,默认是不开启telnet服务的,需要把 disable 改成no

至此本机已开启telnet服务,telnet服务开机自启动,仅telnet本机正常,还需要验证外部网络访问本机是否正常。

🔯允许外部网络telnet登陆

firewalld防火墙默认是禁止外部网络telnet从外部登陆的,如果在本机上telnet 127.0.0.1正常,在其他机子上telnet异常,先检查linux的防火墙状态,需关闭(别忘记关闭防火墙的开机自启动)或者加入允许规则,如果还有问题,请先从本网段telnet到目标机进行排查,是否有其他外部限制telnet的登陆。

systemctl status firewalld.service //检查防火墙状态

systemctl stop firewalld.service //关闭防火墙

systemctl disable firewalld.service //关闭防火前开机自启动

firewall-cmd --zone=public --add-source=[访问源] --permanent

或firewall-cmd --zone=public --add-port=23/tcp --permanent

firewall-cmd --reload //刷新配置

firewalld服务默认是允许ping的。

扩展:

CentOS 7以前使用的是iptables 工具,iptables默认是允许访问的。

yum install -y iptables iptables-devel iptables-utils

systemctl start iptables //启动iptables服务,开机自启动iptables服务,版本

systemctl enable iptables 上的差异命令请搜索老版本的命令

iptables -I INPUT -s [源地址] -j ACCEPT //允许访问源登陆

iptables -A INPUT -j DROP //默认为允许,需要末尾加拒绝其他

service iptables save //iptables规则保存到/etc/sysconfig/iptables,不保存仅是临时 的,重启会丢失

iptables -L -n //查看iptables规则临时列表

vim /etc/sysconfig/iptables //查看iptables服务规则列表

🔯telnet登陆root账户

telnet服务默认是无法使用root账户登陆的,可以通过新建用户来解决,升级好后再删除,也可以通过修改文件来允许telnet通过root登陆。

  • 新建账户

useradd *** //新建用户

passwd [新建用户] //修改用户密码

userdel -f *** //删除用户

  • 修改文件允许telnet登陆root的方法

方法一:

vi /etc/pam.d/remote

auth required pam_securetty.so #将这一行加上注释,如下图所示:

方法二:

mv /etc/securetty /etc/securetty.bak

方法三:

vim /etc/securetty

加入pts/1

这里加了1个仅允许一个终端远程telnet登陆,如果需要多个则要加pts/2、pts/3等,与访问数量达到相同个数。

telnet为明文传输,在使用完后,要记得关闭并卸载改服务。

避免升级失败,使用telnet服务登陆操作,建议重启后再使用telnet服务登陆

3)备份ssh服务,卸载ssh

原始安装目录备份

mv /etc/ssh /etc/ssh.bak

关键文件备份

mv /usr/sbin/sshd /usr/bin/ssh.bak

mv /usr/bin/ssh /usr/bin/ssh.bak

mv /usr/bin/ssh-keygen /usr/bin/ssh-keygen.bak

systemctl stop sshd

rpm -qa |grep ssh

卸载openssh、openssh-clients、openssh-server三项

rpm -e {卸载项}

4)准备部署包

cd /usr/src //仅作为下载安装包的位置,可以是任意位置

wget --no-check-certificate https://mirrors.aliyun.com/pub/OpenBSD/OpenSSH/portable/openssh-9.2p1.tar.gz

tar -zxvf openssh-9.2p1.tar.gz

cd openssh-9.2p1.tar.gz

5)准备依赖项

yum -y install pam pam-devel zlib zlib-devel gcc gcc-c++ openssl openssl-devel

  1. 安装部署

../configure --prefix=/usr/local/openssh --with-ssl-dir=/usr/local/openssl --with-zlib

可能问题:configure: error: *** working libcrypto not found, check config.log

解决方法:yum -y install openssl-devel zlib zlib-devel

再次执行部署,安装完成如下图

make && make install

安装完成后检查,查看 /usr/local/openssh,确认是否有该文件夹。

cp contrib/redhat/sshd.init /etc/init.d/sshd //拷贝启动脚本

cp contrib/redhat/sshd.pam /etc/pam.d/ //如果安装了pam模块则需要拷贝sshd.pam 配置文件

以上的操作仍在解压的源码包的位置中。

# 建立软连接

ln -s /usr/local/openssh/bin/* /usr/bin/

ln -s /usr/local/openssh/sbin/sshd /usr/sbin/sshd

/*

从ssh使用安全的角度需要按上述操作把相关联的都同步,联机软链接;

仅考虑升级测试,建立以下三项软链接即可

ln -s /usr/local/openssh/bin/ssh /usr/bin/ssh

ln -s /usr/local/openssh/bin/ssh-keygen /usr/bin/ssh-keygen

ln -s /usr/local/openssh/sbin/sshd /usr/sbin/sshd

*/

systemctl daemon-reload //重载 systemd 的脚本配置文件内容

systemctl start sshd && systemctl enable sshd // 启动并设置开机自启动

systemctl status sshd

ssh -V

设置shh root登陆:

源码安装后,位置存在变动,可以通过find -name sshd_config确定文件位置

vim /etc/local/openssh/etc/sshd_config

PermitRootLogin yes

可能问题1:

/sbin/restorecon: lstat(/etc/ssh/ssh_host_dsa_key.pub) failed:No such file or directory.

解决方法:

启动中没有检测到/etc/ssh/ssh_host_dsa_key.pub文件,可以修改启动服务脚本vim /etc/init.d/sshd,

注释对应的文件。systemctl daemon-reload,systemctl restart sshd。再查看状态启动日志正常。

可能问题2:

Permission denied (publickey,password,keyboard-interactive)

更换了sshd_config由原1.104换成1.00文件内容,显示Permission denied(publickey,password)

修改sshd_config值

PermitRootLogin yes

PubkeyAuthentication no

PasswordAuthentication yes

重启后显示 Permission denied(password)

可以看的出来ssh升级已经升级好了,但是无法登陆,这个时候应该检查下 /usr/bin/

中是否存在ssh-keygen文件。

扩展1:

sshd服务的默认安装目录:/etc/ssh

sshd服务默认配置未知:/etc/ssh/sshd_config

ssh服务一般调整项有:

PermitRootLogin yes #这项一定要改成yes,否则登陆不进去

PubkeyAuthentication yes

PasswordAuthentication yes

X11Forwarding yes

UsePAM yes

Port ** //建议修改port端口为非常用端口,已提升安全性。

扩展2:

编译常见参数的作用

--openssldir= openssl 安装目录,默认是 /usr/local/ssl 。

--prefix= 设定安装路径

--with 启用某服务或功能

zlib、zlib-dynamic、no-zlib 使用静态的zlib压缩库、使用动态的zlib压缩库、不使用zlib压缩功能。

shared 、no-shared 是否生成动态连接库。

扩展3:

~/.ssh/文件位置中,几个文件的作用

known_hosts记录ssh访问过计算机的公钥(public key)

id_rsa 生成的私钥

id_rsa.pub 生成的公钥

authorized_keys 存放授权过的无密登录服务器公钥

总结:

在做Openssh升级测试的过程中遇到了很多问题,也在网上查了很多资料,比如编译不成功的问题,Access deny的问题,ssh -V与openssl version显示版本不一致的问题等,最终也获得了满满的收获。

Openssh升级先建立telnet通道,再部署Openssl等依赖项,编译部署完成状态进行确认,最后软连接建立,刷新服务。

参考文档:

参考资料:

https://blog.csdn.net/qq_43524794/article/details/86360429

https://www.cnblogs.com/myfblogs/p/13498664.html

https://zhuanlan.zhihu.com/p/553027729

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值