openssh升级记

系统漏洞扫描,扫出一堆安全漏洞,主要的高危漏洞来自openssh。centos自带的版本是6.6的,建议升级到7.9及以上。官网上包都是基于源码安装,比较麻烦,于是网上找了一个7.9版本的rpm包,在自己的虚拟机上先试试。

Linux上安装软件都是比较痛苦的,好久没弄,手有点生疏。捣鼓了一天,总算升级成功了。查询了各种资料,都只能给你一点线索,问题还得你自己去摸索解决。今天我也提供点线索,能不能被搜到,就看各自的造化了。

  1. 下载rpm安装包 csdn上能找到,基本都需要积分下载,以前10块钱能买200积分,现在只能买10个积分左右,涨的有点夸张。为了省点积分,我在网盘上下载了一个,感谢分享的作者,虽然你的文章没帮助我太多,但还是要感谢你无私的分享。下载地址:https://blog.51cto.com/11916514/2340624 在留言里有分享链接。 如果链接失效了,也可以在这里下载。

  2. 更新安装openssh 解压后,有三个rpm文件,直接更新安装即可。 tar -xvf openssh* rpm -Uhvv openssh* vv参数能看到安装过程的详细信息,方便查看安装是否有报错。

  3. 删除ssh_host开头的文件 更新完成后直接启动sshd服务器会报错,报ssh_host的文件权限设置不对,文件格式不对之类的错误。我是直接把这些文件都删了,sshd服务启动会重新生成这些文件。 rm -rf /etc/ssh/ssh_host_

  4. 修改sshd_config配置文件 以下几个参数要修改: PermitRootLogin yes PasswordAuthentication yes ChallengeResponseAuthentication no UsePAM yes 这里特别要留意,原来UsePAM是设成yes的,更新安装后变成了no。远程连接时会报“ssh could not get shadow information for root”错误,设置成yes后,问题解决。

  5. 修改pam中的sshd设置 这是最折腾人的一步,根据错误日志“pam unable to dlopen(/lib/security/pam_pwdb.so)”,类似的错误有好几条,应该是缺少包。系统里没有搜到pam_pwdb.so这个包,网上搜索居然没有现成的,找了几个libpam的rpm包,都无法顺利安装。有篇文章说pam_pwdb.so已经过时了,现在用pam_unix.so代替。在系统里搜索,居然找到了,不过是放在/usr/lib64/security目录下,其他那些缺失的包也都在。这个rpm包应该是在32位系统下制作的,所以路径和64位的不一样。

有了包,就好办了,下一步是找到相应的配置文件,把路径和pam_pwdb这个包名替换掉。找了半天,最后在/etc/pam.d目录下发现有个sshd文件,打开一看,乖乖,配置都在里面。把pam_pwdb.so换成pam_unix.so, 参考其他的配置文件,不需要加路径,直接把/lib/security删掉。最后的配置文件内容如下: auth required pam_unix.so shadow nodelay auth required pam_nologin.so account required pam_unix.so password required pam_cracklib.so password required pam_unix.so shadow nullok use_authtok session required pam_unix.so session required pam_limits.so

  1. 验证 一切修改完毕后,执行命令 systemctl start shhd.service, 用xshell远程连接,成功。 最后检查版本是否是7.9:rmp -qa | grep openssh [root@localhost log]# rpm -qa|grep openssh openssh-clients-7.9p1-1.el6.x86_64 openssh-7.9p1-1.el6.x86_64 openssh-server-7.9p1-1.el6.x86_64

  2. 经验总结 a. 对于只能通过ssh连接的服务器,在ssh服务没有更新成功之前,千万不能关闭现有的连接,ssh服务停止不会影响现有的连接。如果你关闭了,或者把这个进程kill了,那就只能干瞪眼了。最好把winscp也开着,方便传文件。不过,最保险的办法还是装个telnet,现在服务器默认都不装的。

b. 日志信息相当重要,根据日志提示,一步一步解决问题。sshd的日志是/var/log/secure文件,也可通过命令systemctl status sshd.service查看。

Written on July 15, 2019