首页 > Linux操作系统 > Linux操作系统 > Openssh服务升级文档
作者:Digital Observer(施嘉伟)
Oracle ACE Pro: Database
PostgreSQL ACE Partner
11年数据库行业经验,现主要从事数据库服务工作
拥有Oracle OCM、DB2 10.1 Fundamentals、MySQL 8.0 OCP、WebLogic 12c OCA、KCP、PCTP、PCSD、PGCM、OCI、PolarDB技术专家、达梦师资认证、数据安全咨询高级等认证
ITPUB认证专家、PolarDB开源社区技术顾问、HaloDB技术顾问、TiDB社区技术布道师、青学会MOP技术社区专家顾问、国内某高校企业实践指导教师
OpenSSH(OpenBSD Secure Shell)是OpenBSD计划组所维护的一套用于安全访问远程计算机的连接工具。该工具是SSH协议的开源实现,支持对所有的传输进行加密,可有效阻止窃听、连接劫持以及其他网络级的攻击。sshd是其中的一个独立守护进程。
OpenSSH 7.2p2及之前版本的sshd中的session.c文件中的‘do_setup_env’函数存在安全漏洞。当程序启用UseLogin功能并且PAM被配置成读取用户主目录中的.pam_environment文件时,本地攻击者可借助/bin/login程序的特制的环境变量利用该漏洞获取权限。
操作系统版本:Centos5.3
Openssh源版本:OpenSSH_4.3p2, OpenSSL 0.9.8e-fips-rhel5
Openssh目标版本:OpenSSH_7.9p1, OpenSSL 1.0.2h
| 步骤 | 内容 |
|---|---|
| Step 1 | 配置Telnet |
| Step 2 | Openssh依赖包检测 |
| Step 3 | Openssl升级至1.0.2h |
| Step 4 | Openssh升级至7.9p1 |
| Step 5 | 将旧版本Openssl 0.9.8e卸载 |
为了防止由于SSH服务在升级过程中出现问题,导致无法远程SSH连接,所以需要配置telnet服务。
检查服务器上是否存在telnet服务 [root@service2 ~]# rpm -qa | grep telnet 若未安装,则安装telnet,否则忽略此步骤 [root@service2 ~]# yum -y install telnet telnet-server [root@service2 ~]# rpm -qa | grep telnet telnet-0.17-49.el6_10.x86_64 telnet-server-0.17-49.el6_10.x86_64 由于telnet 是由 xinetd控制的,所以同时查看是否安装了xinetd服务 [root@service2 ~]# rpm -qa | grep xinetd xinetd-2.3.14-40.el6.x86_64 如果没有则安装: [root@service1 ssh]# yum -y install xinetd
1.修改xinetd下的telnet配置文件:
[root@service2 ~]# vim /etc/xinetd.d/telnet
将”disable= yes”改成” disable=no”
service telnet
{
disable = no
flags = REUSE
socket_type = stream
wait = no
user = root
server = /usr/sbin/in.telnetd
log_on_failure += USERID
}
2.设置开机自启动
[root@service2 ~]# chkconfig --list | grep telnet
telnet: off
//如果状态为on,则已经打开,如果状态为off,则参考下面步骤:
[root@service2 ~]# chkconfig telnet on
[root@service2 ~]# chkconfig --list | grep telnet
telnet: on
将xinetd服务设置为开机自启动:
[root@localhost ~]# chkconfig xinetd on
查看telnet端口状态:
[root@localhost ~]#netstat -tnl |grep 23
tcp 0 0 0.0.0.0:23 0.0.0.0:* LISTEN
3.连接登录测试:
[root@service2 ~]# telnet 192.168.199.148
Trying 192.168.199.148...
Connected to 192.168.199.148.
Escape character is '^]'.
CentOS release 6.8 (Final)
Kernel 2.6.32-642.el6.x86_64 on an x86_64
login: root
Password:
//因为telnet不是很安全,所以默认的情况之下就是不允许root以telnet登入Linux主机的。但这个问题也可以解决:
[root@service2 ~]# mv /etc/securetty /etc/securetty.bak
1.查看Openssl版本: [root@service2 ~]# openssl version OpenSSL 1.0.1e-fips 11 Feb 2013 2. 查看升级依赖的包zlib zlib-devel gcc是否存在: [root@service2 ~]# rpm -qa | grep gcc gcc-4.4.7-23.el6.x86_64 libgcc-4.4.7-23.el6.x86_64 gcc-c++-4.4.7-23.el6.x86_64 //如果gcc不存在 [root@service2 ~]#yum -y install gcc* [root@service2 ~]# rpm -qa | grep zlib* zlib-static-1.2.3-29.el6.x86_64 zlib-1.2.3-29.el6.x86_64 zlib-devel-1.2.3-29.el6.x86_64 //如果zlib zlib-devel不存在 [root@service2 ~]#yum -y install zlib*
1.下载想要升级的ssl版本openssl-1.0.2h: [root@service2~]#wget -c http://artfiles.org/openssl.org/source/old/1.0.2/openssl-1.0.2h.tar.gz //如果无法联网,则将软件包从windows传输到linux。 2.解压openssl软件包 [root@service2 ~]# tar xf openssl-1.0.2h.tar.gz 3. 编译安装openssl-1.0.2h [root@service2 ~]# cd openssl-1.0.2h [root@service2 openssl-1.0.2h]# ./config --prefix=/usr/local/ssl --openssldir=/etc/ssl --libdir=lib shared zlib-dynamic enable-camellia // Configured for linux-x86_64. *** Because of configuration changes, you MUST do the following before *** building: make depend //如果没有报错则执行make depend [root@service2 openssl-1.0.2h]# make depend //如果没有报错则执行make && make install [root@service2 openssl-1.0.2h]# make && make install 4.Man手册以及doc帮助配置: [root@service2 openssl-1.0.2h]#make MANDIR=/usr/share/man MANSUFFIX=ssl install [root@service2 openssl-1.0.2h]#install -dv -m755 /usr/share/doc/openssl-1.0.2h [root@service2 openssl-1.0.2h]#cp -vfr doc/* /usr/share/doc/openssl-1.0.2h 5.其他额外必须配置(为openssh升级做准备) //将旧的openssl二进制命令文件移走: [root@service2 ~]#mv /usr/bin/openssl /usr/bin/openssl.bak //链接新的openssl二进制命令文件 [root@service2 ~]#ln -s /usr/local/ssl/bin/openssl /usr/bin/openssl [root@service2 ~]#ln -s /usr/local/ssl/include/openssl /usr/include/openssl //重新加载库: [root@service2 ~]#echo "/usr/local/ssl/lib" >> /etc/ld.so.conf [root@service2 ~]#ldconfig -v 6.openssl升级成功 [root@service2 ~]#openssl version OpenSSL 1.0.2h 3 May 2016
将原openssh打包备份:
[root@service1 ssh]# tar zcvf /root/ssh.tar.gz /etc/ssh/
[root@service1 ~]# tar xf openssh-7.9p1.tar.gz [root@service1 ~]# cd openssh-7.9p1 [root@service1 ~]#./configure --prefix=/usr --sysconfdir=/etc/ssh --with-zlib --with-md5-passwords --with-ssl-dir=/usr/local/ssl 如果编译成功: [root@service1 ~]#make && make install
//将旧版本的sshd二进制命令文件移走 [root@service1 ~]mv /usr/sbin/sshd /usr/sbin/sshd.old //将新版本的sshd二进制命令文件链接到原位置 [root@service1 ~]ln -s /root/openssh-7.9p1/sshd /usr/sbin/sshd //查看升级后的版本: [root@service2 openssh-7.9p1]# ssh -V OpenSSH_7.9p1, OpenSSL 1.0.2h 3 May 2016
为了防止旧版本openssl依然存在漏洞扫描风险,将旧版本openssl卸载。
将原版本ssl卸载: [root@service2 openssh-7.9p1]# rpm -qa | grep openssl openssl-1.0.1e-48.el6.x86_64 [root@service2 ~]# rpm -e openssl-1.0.1e-48.el6.x86_64 禁止卸载,显示依赖关系。 //输出内容部分显示 error: Failed dependencies: libcrypto.so.10()(64bit) is needed by (installed) qt-1:4.6.2-28.el6_5.x86_64 libcrypto.so.10()(64bit) is needed by (installed) libarchive-2.8.3-4.el6_2.x86_64 libcrypto.so.10()(64bit) is needed by (installed) libssh2-1.4.2-2.el6_7.1.x86_64 libcrypto.so.10()(64bit) is needed by (installed) wget-1.12-8.el6.x86_64 libcrypto.so.10()(64bit) is needed by (installed) bind-libs-32:9.8.2-0.47.rc1.el6.x86_64 libssl.so.10()(64bit) is needed by (installed) libssh2-1.4.2-2.el6_7.1.x86_64 libssl.so.10()(64bit) is needed by (installed) wget-1.12-8.el6.x86_64 libssl.so.10()(64bit) is needed by (installed) mysql-libs-5.1.73-7.el6.x86_64 libssl.so.10()(64bit) is needed by (installed) httpd-tools-2.2.15-53.el6.centos.x86_64 libssl.so.10()(64bit) is needed by (installed) ptlib-2.6.5-5.el6.x86_64 libssl.so.10()(64bit) is needed by (installed) opal-3.6.6-4.el6.x86_64 记录这两个库文件并将其备份。 libcrypto.so.10 libssl.so.10 [root@service2 openssh-7.9p1]#mkdir /root/backup [root@service2 openssh-7.9p1]# cp /lib64/libcrypto.so.10 /root/backup/ [root@service2 openssh-7.9p1]# cp /lib64/libssl.so.10 /root/backup/ 强制卸载: [root@service2 ~]#rpm -e --nodeps openssl-1.0.1e-48.el6.x86_64
将新版本编译产生的库文件链接到指定位置
[root@service2 ~]#ln -s /root/openssl-1.0.2h/libssl.so.1.0.0 /lib64/libssl.so.10 [root@service2 ~]# ln -s /root/openssl-1.0.2h/libcrypto.so.1.0.0 /lib64/libcrypto.so.10 libssl.so.10 libcrypto.so.10 需要与原版本库文件名字一致。
[root@service2 ~]# /etc/init.d/sshd restart
Stopping sshd: [ OK ]
Starting sshd: [ OK ]
/etc/ssh/sshd_config line 81: Unsupported option GSSAPIAuthentication
/etc/ssh/sshd_config line 83: Unsupported option GSSAPICleanupCredentials
/etc/ssh/sshd_config line 97: Unsupported option UsePAM
[root@service2 ~]# vim /etc/ssh/sshd_config
注释掉 81,83,97 三行就不会提示如上信息。
//允许root直连
[root@service2 ~]#echo “PermitRootLogin yes” >> /etc/ssh/sshd_config
//启用X11Forwarding
[root@service2 ~]#echo ‘X11Forwarding yes’ >> /etc/ssh/sshd_config
//开启口令验证
[root@service2 ~]#echo “PasswordAuthentication yes” >> /etc/ssh/sshd_config
[root@service2 ~]# /etc/init.d/sshd restart
Stopping sshd: [ OK ]
Starting sshd: [ OK ]
[root@service2 ~]# sshd -version
OpenSSH_7.9p1, OpenSSL 1.0.2h 3 May 2016
升级成功。
[root@service2 ~]# rpm -qa | grep telnet
telnet-0.17-49.el6_10.x86_64
telnet-server-0.17-49.el6_10.x86_64
[root@service2 ~]# rpm -e telnet-0.17-49.el6_10.x86_64
[root@service2 ~]# rpm -e telnet-server-0.17-49.el6_10.x86_64
warning: /etc/xinetd.d/telnet saved as /etc/xinetd.d/telnet.rpmsave
//不要忘记将/etc/securetty移动回原位置
[root@service2 ~]# mv /etc/securetty.bak /etc/securetty

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/23825935/viewspace-3065295/ ,如需转载,请注明出处,否则将追究法律责任。