CentOS 7 制作 rpm 包离线更新 openssh
文章目录
最近遇到一台内网服务器被扫描到需要修复 openssh 漏洞,系统装的 CentOS 7 自带 openssh 还在用着 7.6p1 的版本,由于没办法直接连接互联网,选择制作 rpm 安装包升级。
制作包以及升级安装过程比较简单,但过程中遇到的一些小问题觉着有必要记录下来。
基础环境
CentOS 7 自带 OpenSSH 7.6p1 版本目前已知存在以下中高风险漏洞:
CVE-2020-15778 影响范围:OpenSSH <= 8.3
CVE-2021-41617 影响范围:OpenSSH 版本6.2 - 8.8
CVE-2020-14145 影响范围:OpenSSH 版本5.7 - 8.4
CVE-2016-20012 影响范围:OpenSSH <= 8.7
漏洞详情查询:http://www.cnnvd.org.cn/web/vulnerability/querylist.tag
服务器上修改过 ssh 配置文件。
备份环境
ssh 建立连接创建 tty 后,只要不退出或者因为超时断开就可以保持会话,更新前多开几个窗口就可以大大提升出现故障恢复的可行性。
此环境配置文件修改过,加上 7.6p1 => 公版 8.8p1 ,会改动 pam 文件,一定要备份后操作。
备份包含三个地方,参考命令如下:
|
|
制作 rpm 包
新购买临时的 CentOS 7.6 云服务器,安装编译工具和 rpm 依赖:
|
|
下载源码包
|
|
创建 rpmbuild 目录,拷贝源码包
|
|
解压打包配置
|
|
这时候开始编译会报错,提示库版本不对。
|
|
这里修改配置 rpmbuild/SPECS/openssh.spec
忽略,在 BuildRequires: openssl-devel < 1.1
前添加 “#” 注释后,继续编译
|
|
编译一长串后会生成文件在 rpmbuild/RPMS/x86_64/
下。
|
|
只需要拷贝升级需要的包,安装
|
|
最后验证配置文件是否被修改,确认监听端口,是否限制 root 登陆等,没问题后重启 sshd
更新 openssh 后遇到的问题
1. 远程登陆不上,sshd 日志显示no matching host key type found. Their offer: ssh-rsa,ssh-dss [preauth]
服务端配置支持客户端验证的密钥格式就好了,通常旧的版本使用 rsa 格式。在 /etc/ssh/sshd_config
中添加:
|
|
参考:https://bbs.archlinux.org/viewtopic.php?id=270005
如果只是作为客户端报错,可以给 ssh 命令添加参数-oHostKeyAlgorithms=+ssh-dss
,或者在配置中添加
|
|
附: fcos 中 redhat 的证书加密配置
|
|
2. 远程登陆报错,sshd 日志显示 PAM unable to dlopen(/usr/lib64/security/pam_stack.so): /usr/lib64/security/pam_stack.so: cannot open shared object file
pam 配置问题,8.8p1 版本 openssh 把 pam 文件更新了,可以用之前备份的还原。或者使用原始 CentOS 的配置覆盖,参考:
|
|
3. /etc/ssh/
下出现*.rpmnew
文件
安装 rpm 包时会有报警,没有自动覆盖掉原来的配置文件,网上查了下可以不做修改。
可以把 moduli 文件替换成新的。谨慎点的话,可以把原有配置同步对比下,删掉 rpmnew 文件。