环境:
系统版本: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)版本信息查看
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
安装部署
../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://www.toymoban.com/news/detail-545019.html
https://zhuanlan.zhihu.com/p/553027729文章来源地址https://www.toymoban.com/news/detail-545019.html
到了这里,关于Linux Openssh 升级(详)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!