前几天安全团队发邮件说其中一台服务器的OpenSSH6.2的版本有bug,需要升级到6.7才行。
于是我赶紧登录到服务器看,在openSuSE里的yast里提供的最新版本就是6.2,如果要强升级到6.7,只有在 -openssh 的站点下载最新的源码,然后编译、安装。
问题是,通过源码编译安装的openssh与openSuSE自带的安装可能存在路径上的差异。
openSuSE随机安装的openssh的配置文件默认在 /etc/ssh/sshd_config下,而通过源码编译、安装的配置文件默认在 /usr/local/etc/sshd_config 下,如果要在编译时指定 –prefix ,比如:
shell> ./configure –prefix=/usr
则相应的配置文件会生成在 /usr/etc/sshd_config 下面。这是会发现,不但配置文件会新生成,在启动脚本里,也会将使用的配置文件指向新生成的配置文件,而不是使用原来的/etc下面的sshd_config .
如果在安装升级后不进行测试,可能会导致 /etc/ssh/sshd_config 文件失效,而使用中的配置文件变成了 openSSH自带的默认配置的文件,这是很危险的,默认的openSSH的配置文件,可能只有基于password的验证。普遍情况下,这是不能被允许的。
正确的在yast之外,不使用repository的情况下,手工下载源码包进行升级的步骤:
1. 到 -openssh 站下载源码包;
2. 解压,修改 versions.h 中的版本信息,进一步增强安全,隐去具体的版本号;
3. 带 –prefix=/usr –with-pam 进行配置 ;
4. 进行编译, make
5. 停掉 sshd服务和进程,使用 ps确认停掉了相应的进程;
6. make install
7. 替换 /usr/etc/sshd_config 或者 /usr/local/etc/sshd_config, 通常的做法是,移去这样的文件,然后在相应的目录下生成指向 /etc/ssh/sshd_config的软连接:
shell> cd /usr/etc/;
shell> mv sshd_config sshd_config.orig
shell> ln -s /etc/ssh/sshd_config sshd_config
8. 重新启动 ssh 服务, /etc/init.d/sshd start
9. ps 确认相关进行正常运行中
10. 找另外一台计算机以通常的方式尝试进行连接,确认新的 ssh服务正常提供服务