升级OpenSSH及其OpenSSL的正确姿势

需求说明

在本小节中,让我花点篇幅绕个弯子解释下文章标题是什么意思,以及这篇文章到底讲的是什么,这将有助于理解本文的内容。

有时,可能由于审计需要或修复漏洞的需要,我们可能会遇到这么一个需求:升级操作系统的openssl。

那,怎么升级操作系统的openssl呢?那很简单,一条命令搞定:


[[email protected] ~]# yum update openssl -y

没错,这的确可以升级操作系统的openssl。这只是小版本的升级,比如将openssl从1.0.1e-43版本升级到1.0.1e-57版本,也可以修补一些漏洞。但是,在审计时,审计人员会告诉你,这不行,他要的是跨版本的升级。比如,将操作系统的openssl从1.0.1e版本升级到1.0.2h版本,啥,新出了个1.1.0h版本,那就升级到最新的1.1.0h版本吧。他就认为版本越高越好,漏洞越少,他也不管你到底有没有进行跨版本升级的必要性,到底是不是真的技术上可行。而他怎么看openssl版本的呢?可能就是登录到系统中,执行下面的命令:


[[email protected] ~]# ssh -V

就因为ssh -V命令执行后显示出来的openssl版本较低,就说要(跨版本)升级操作系统的openssl。这里面存在逻辑问题,让我逐个地解释。

首先,我给个结论:跨版本升级操作系统的openssl是不可能的。

你可以在系统中尝试执行下yum remove openssl命令,你就可以看到,非常非常多的软件是依赖于openssl软件。openssl是一个非常基础的软件。假设你升级了操作系统的openssl,比如说,编译安装一个新版本的openssl覆盖掉操作系统自带的openssl。这就会导致那些依赖于openssl的软件的openssl相关的功能变得不可用,比如说,某软件原本是支持https的,现在可能就不支持了。除非你能将系统中所有依赖于openssl的软件基于新版本的openssl全都编译一遍,而这通常是不可能的。

其次,我们并不需要升级操作系统的openssl。

我想,很多人在碰到这个需求时,可能都有去百度过,然后百度出了一大堆文章,然后了解到也需要重新编译安装openssh。但是,几乎我看到的所有文章,都采用的是错误的做法,所以才有了我这篇文章。他们的做法虽然各不相同,但大概也可以概括为:先强制卸载操作系统的openssl、openssh,再编译安装一个新版本的openssl(和其它可能的附带软件),然后各种莫名其妙的操作,最后编译安装一个新版本的openssh。这种做法无法达到目的吗?那倒也不是。但可能代价就是,所有其它依赖于操作系统的openssl的软件的openssl相关的功能都不能用了。

因此来说,正确的做法是什么?这就是本文所要介绍的。

ssh命令是openssh软件的一部分。我们无法升级操作系统的openssl,但是我们可以另外编译一个openssl,放到单独的应用目录中,与操作系统的openssl互不干涉。再基于新编译出来的openssl,将新的openssh软件编译出来。 而操作系统的openssh是可以被替换的。如果你尝试执行 yum remove openssh* 命令就可以看到,没有其它软件依赖于openssh。此外,openssh软件提供了sshd服务。所以,我们只要还要配置并搭建好sshd服务,就可以替代操作系统自带的openssh了。

简单来说,这篇文章讲的就是,如何升级openssh及其所依赖的openssl。

OpenSSH升级思路

要升级openssh,我们需要先搞懂openssl是怎么安装的。

我使用的操作系统是centos 6的,我以安装openssh 7.5.p1为例。

从openssh官网下载openssh 7.5.p1源码包,查看里面的INSTALL文件,里面有对它的依赖关系做说明。

openssh 7.5.p1对下列软件的依赖是必选的:


openssh依赖的软件(必选)


备注


Zlib


要求1.1.4或1.2.1.2或更新的版本(1.2.x早期的版本有问题)。


libcrypto

(LibreSSL或OpenSSL)


OpenSSH依赖于libcrypto,而libcrypto可以由LibreSSL或OpenSSL提供。如果是使用的OpenSSL,要求OpenSSL的版本要大于等于0.9.8f并小于1.1.0。由于API不同,现在还不支持OpenSSL 1.1.x版本。

LibreSSL/OpenSSL应该编译成位置无关的库(position-independent library),比如使用-fPIC选项,否则OpenSSH会无法链接它;如果你必须使用一个非位置无关(non-position-independent)的libcrypto,那么你在编译OpenSSH时必须加上--without-pie选项。

openssh 7.5.p1对下列软件的依赖是可选的:


openssh依赖的软件(可选)


备注


PAM


如果操作系统支持PAM(Pluggable Authentication Modules),那么OpenSSH就可以被编译成支持PAM功能的。大多数的Linux发行版,自然也包括RedHat/CentOS系统,都是支持PAM的。所以,如果我们要编译出一个可以替换操作系统自带OpenSSH的完整功能的OpenSSH,自然也是要支持PAM的。


其它软件:

NB

PRNGD

EGD

GNOME

S/Key

LibEdit

LDNS

Autoconf

Basic Security Module (BSM)


这些就不展开来说了。

基本上来说,要编译出一个功能类似于操作系统自带的OpenSSH软件,我们至少需要先准备好Zlib、OpenSSL(或LibreSSL)和PAM软件。下面,我们就逐个逐个地来进行安装。

安装Zlib

Zlib用于提供压缩和解压缩功能。操作系统已经自带了zlib,版本也符合要求。实际上,openssl和openssh都依赖于zlib。执行下面的命令,安装zlib开发包:


[[email protected] ~]# yum install zlib-devel -y

安装PAM

PAM(Pluggable Authentication Modules,可插拔认证模块)用于提供安全控制。操作系统也已经自带了PAM,版本也是可以的。执行下面的命令,安装PAM开发包:


[[email protected] ~]# yum install pam-devel -y

安装tcp_wrappers

tcp_wrappers是一种安全工具,通常,我们在/etc/hosts.allow或/etc/hosts.deny文件中配置的过滤规则就是使用的tcp_wrappers的功能了。openssh在编译时的确是可以选择支持tcp_wrappers的,但我不知道为什么它的安装要求里面没有体现。操作系统自带的tcp_wrappers的版本是可以的。执行下面的命令,安装tcp_wrappers开发包:


[[email protected] ~]# yum install tcp_wrappers-devel -y

安装OpenSSL

由于OpenSSH 7.5.p1要求OpenSSL的版本大于等于0.9.8f并小于1.1.0,因此,当前(2017年6月)符合要求的最新OpenSSL版本为1.0.2l。

首先,从openssl官网下载源码包openssl-fips-2.0.16.tar.gz,将其安装到/opt/fips-2.0.16目录下。

编译安装FIPS模块:


[[email protected] OpenSSL]# export FIPSDIR=/opt/fips-2.0.16

[[email protected] OpenSSL]# tar -xvf openssl-fips-2.0.16.tar.gz

[[email protected] OpenSSL]# cd openssl-fips-2.0.16

[[email protected] openssl-fips-2.0.16]# ./config

[[email protected] openssl-fips-2.0.16]# make

[[email protected] openssl-fips-2.0.16]# make install

说明:

  • 在编译前先设定环境变量FIPSDIR,这是用于指定FIPS模块的安装目录,这是fips软件特有的安装特性。软件编译时会检测该环境变量是否存在。若不指定,默认会安装在/usr/local/ssl/fips-2.0目录。

从openssl官网下载源码包openssl-1.0.2l.tar.gz,将其安装到/opt/openssl1.0.2l_20170617目录下。将openssl安装到专门的目录,这是为了避免对操作系统自带的openssl造成影响。

编译安装OpenSSL:


[[email protected] OpenSSL]# tar -xvf openssl-1.0.2l.tar.gz

[[email protected] OpenSSL]# cd openssl-1.0.2l

[[email protected] openssl-1.0.2l]# ./config --prefix=/opt/openssl1.0.2l_20170617 --openssldir=/opt/openssl1.0.2l_20170617/openssl fips --with-fipsdir=/opt/fips-2.0.16 zlib-dynamic shared -fPIC

[[email protected] openssl-1.0.2l]# make depend

[[email protected] openssl-1.0.2l]# make

[[email protected] openssl-1.0.2l]# make test

[[email protected] openssl-1.0.2l]# make install

下面是编译时使用到的选项:

  • --prefix:指定openssl的安装目录。按本例中的安装方式,安装完成后该目录下会包含bin(含二进制程序)、lib(含动态库文件)、include/openssl(含报头文件)及openssl(--openssldir选项指定的)这些子目录。
  • --openssldir:指定openssl文件的安装目录。按本例中的安装方式,安装完成后该目录下会包括certs(存放证书文件)、man(存放man文件)、misc(存放各种脚本)、private(存放私钥文件)这些子目录及openssl.cnf配置文件。
  • fips:集成FIPS模块。
  • --with-fipsdir:指向FIPS模块的安装目录位置。
  • zlib-dynamic:编译支持zlib压缩/解压缩,让openssl加载zlib动态库。该选项只在支持加载动态库的操作系统上才支持。这是默认选项。
  • shared:除了静态库以外,让openssl(在支持的平台上)也编译生成openssl动态库。
  • -fPIC:将openssl动态库编译成位置无关(position-independent)的代码。

安装完成后,将OpenSSL的库文件目录添加到/etc/ld.so.conf文件中,并加载到系统内存缓存中:


[[email protected] openssl-1.0.2l]# echo '/opt/openssl1.0.2l_20170617/lib' >> /etc/ld.so.conf

[[email protected] openssl-1.0.2l]# ldconfig

安装OpenSSH

从openssl官网下载源码包openssh-7.5p1.tar.gz,将其安装到/opt/openssh7.5.p1_20170617目录下。将openssh安装到专门的目录,这是为了避免与操作系统自带的openssh造成不必要的冲突,增加复杂度。

编译安装OpenSSH:


[[email protected] OpenSSH]# tar -xvf openssh-7.5p1.tar.gz

[[email protected] OpenSSH]# cd openssh-7.5p1

[[email protected] openssh-7.5p1]# ./configure --prefix=/opt/openssh7.5.p1_20170617 --with-ssl-dir=/opt/openssl1.0.2l_20170617 --with-pam --with-tcp-wrappers

[[email protected] openssh-7.5p1]# make

[[email protected] openssh-7.5p1]# make install

下面是编译时使用到的选项:

  • --prefix:指定安装目录
  • --with-ssl-dir=DIR:指向LibreSSL/OpenSSL库的安装目录的所在路径。
  • --with-pam:启用PAM支持。根据OpenSSH的安装说明,如果在编译时启用了PAM,那么在安装完成后,也必须在sshd服务的配置文件sshd_config中启用它(使用UsePAM指令)。

根据OpenSSH的安装说明,如果有启用PAM,那么就需要手工安装一个给sshd程序使用的PAM配置文件,否则安装好OpenSSH后你可能会无法使用密码登录系统。在编译时,我使用 --with-pam 选项启用了对PAM的支持,但是,编译OpenSSH时并没有编译选项让你指定PAM配置文件的位置,那么我们要怎么提供这个配置文件呢?

事实上,OpenSSH有另外一个编译选项--with-pam-service=name可以指定PAM服务名,它的默认值是sshd。而操作系统自带的PAM软件默认将所有PAM配置文件都放置在/etc/pam.d目录下。结合这两个信息,就可确定OpenSSH的PAM配置文件应为/etc/pam.d/sshd文件。而这个文件原来就有了,所以我们不用额外手工创建一个。

设置PATH路径:


[[email protected] ~]# echo 'export PATH=/opt/openssh7.5.p1_20170617/bin:/opt/openssh7.5.p1_20170617/sbin:$PATH' >> /etc/profile.d/path.sh

[[email protected] ~]# . /etc/profile.d/path.sh

此时,使用ssh -V命令就可以看到新版本号了:


[[email protected] ~]# ssh -V

OpenSSH_7.5p1, OpenSSL 1.0.2l-fips  25 May 2017

配置OpenSSH

前面已经安装好了openssh,但是我们还需要配置它,以保证sshd服务可以启起来。

我们可以先看一下原有的sshd服务(属于openssh-server软件包)都有哪些配置文件:


[[email protected] ~]# rpm -ql openssh-server | grep -i --color etc

/etc/pam.d/ssh-keycat

/etc/pam.d/sshd

/etc/rc.d/init.d/sshd

/etc/ssh/sshd_config

/etc/sysconfig/sshd

可以看到,sshd服务的配置文件为/etc/ssh/sshd_config,它的pam配置文件为/etc/pam.d/sshd和/etc/pam.d/ssh-keycat,启动脚本文件为/etc/rc.d/init.d/sshd,启动脚本里面有引用到文件/etc/sysconfig/sshd。

参照系统原有的配置文件修改我们软件的sshd_config配置文件,这是sshd服务的配置文件(红色字体的为新增或修改的部分):


[[email protected] ~]# vim /opt/openssh7.5.p1_20170617/etc/sshd_config

Protocol 2

SyslogFacility AUTHPRIV

PermitRootLogin yes

AuthorizedKeysFile      .ssh/authorized_keys

PasswordAuthentication yes

ChallengeResponseAuthentication no

#GSSAPIAuthentication yes                                                    //该选项目前还不支持

#GSSAPICleanupCredentials yes                                            //该选项目前还不支持

UsePAM yes

AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES

AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT

AcceptEnv LC_IDENTIFICATION LC_ALL LANGUAGE

AcceptEnv XMODIFIERS

X11Forwarding yes

Subsystem       sftp    /opt/openssh7.5.p1_20170617/libexec/sftp-server

注意,UsePAM一定要启用,OpenSSH的安装说明里有提到,如果编译时启用了PAM支持,那么就必须在sshd_config文件中启用它。

拷贝系统原有的配置文件/etc/sysconfig/sshd到我们软件下面,这个配置文件用于设置启动sshd服务所需的环境变量,在sshd服务的启动脚本里有调用到该配置文件:


[[email protected] ~]# cp -a /etc/sysconfig/sshd /opt/openssh7.5.p1_20170617/etc/sshd

接下来要修改sshd服务的启动脚本/etc/rc.d/init.d/sshd。先将启动脚本备份一份为sshd.old,并添加至chkconfig管理:


[[email protected] ~]# cp /etc/rc.d/init.d/sshd /etc/rc.d/init.d/sshd.old

[[email protected] ~]# chkconfig --add sshd.old

再根据我们的OpenSSH的安装路径,来修改原有的启动脚本(红色字体为有新增或修改的部分):


[[email protected] ~]# vim /etc/rc.d/init.d/sshd

### BEGIN INIT INFO

# Provides: sshd

# Required-Start: $local_fs $network $syslog

# Required-Stop: $local_fs $syslog

# Should-Start: $syslog

# Should-Stop: $network $syslog

# Default-Start: 2 3 4 5

# Default-Stop: 0 1 6

# Short-Description: Start up the OpenSSH server daemon

# Description:       SSH is a protocol for secure remote shell access.

#                    This service starts up the OpenSSH server daemon.

### END INIT INFO

. /etc/rc.d/init.d/functions

[ -f /opt/openssh7.5.p1_20170617/etc/sshd ] && . /opt/openssh7.5.p1_20170617/etc/sshd

RETVAL=0

prog="sshd"

lockfile=/var/lock/subsys/$prog

KEYGEN=/opt/openssh7.5.p1_20170617/bin/ssh-keygen

SSHD=/opt/openssh7.5.p1_20170617/sbin/sshd

RSA1_KEY=/etc/ssh/ssh_host_key

RSA_KEY=/opt/openssh7.5.p1_20170617/etc/ssh_host_rsa_key

DSA_KEY=/opt/openssh7.5.p1_20170617/etc/ssh_host_dsa_key

PID_FILE=/var/run/sshd.pid                                   # PID文件的所在路径,这个变量的值不要改

runlevel=$(set -- $(runlevel); eval "echo \$$#" )

fips_enabled() {

if [ -r /proc/sys/crypto/fips_enabled ]; then

cat /proc/sys/crypto/fips_enabled

else

echo 0

fi

}

do_rsa1_keygen() {

if [ ! -s $RSA1_KEY -a `fips_enabled` -eq 0 ]; then

echo -n $"Generating SSH1 RSA host key: "

rm -f $RSA1_KEY

if test ! -f $RSA1_KEY && $KEYGEN -q -t rsa1 -f $RSA1_KEY -C '' -N '' >&/dev/null; then

chmod 600 $RSA1_KEY

chmod 644 $RSA1_KEY.pub

if [ -x /sbin/restorecon ]; then

/sbin/restorecon $RSA1_KEY.pub

fi

success $"RSA1 key generation"

echo

else

failure $"RSA1 key generation"

echo

exit 1

fi

fi

}

do_rsa_keygen() {

if [ ! -s $RSA_KEY ]; then

echo -n $"Generating SSH2 RSA host key: "

rm -f $RSA_KEY

if test ! -f $RSA_KEY && $KEYGEN -q -t rsa -f $RSA_KEY -C '' -N '' >&/dev/null; then

chmod 600 $RSA_KEY

chmod 644 $RSA_KEY.pub

if [ -x /sbin/restorecon ]; then

/sbin/restorecon $RSA_KEY.pub

fi

success $"RSA key generation"

echo

else

failure $"RSA key generation"

echo

exit 1

fi

fi

}

do_dsa_keygen() {

if [ ! -s $DSA_KEY -a `fips_enabled` -eq 0 ]; then

echo -n $"Generating SSH2 DSA host key: "

rm -f $DSA_KEY

if test ! -f $DSA_KEY && $KEYGEN -q -t dsa -f $DSA_KEY -C '' -N '' >&/dev/null; then

chmod 600 $DSA_KEY

chmod 644 $DSA_KEY.pub

if [ -x /sbin/restorecon ]; then

/sbin/restorecon $DSA_KEY.pub

fi

success $"DSA key generation"

echo

else

failure $"DSA key generation"

echo

exit 1

fi

fi

}

do_restart_sanity_check()

{

$SSHD -t

RETVAL=$?

if [ $RETVAL -ne  0 ]; then

failure $"Configuration file or keys are invalid"

echo

fi

}

start()

{

[ -x $SSHD ] || exit 5

[ -f /opt/openssh7.5.p1_20170617/etc/sshd_config ] || exit 6

# Create keys if necessary

if [ "x${AUTOCREATE_SERVER_KEYS}" != xNO ]; then

do_rsa_keygen

if [ "x${AUTOCREATE_SERVER_KEYS}" != xRSAONLY ]; then

#do_rsa1_keygen                                              # 注释掉这条语句

do_dsa_keygen

fi

fi

echo -n $"Starting $prog: "

$SSHD $OPTIONS && success || failure

RETVAL=$?

[ $RETVAL -eq 0 ] && touch $lockfile

echo

return $RETVAL

}

stop()

{

echo -n $"Stopping $prog: "

killproc -p $PID_FILE $SSHD

RETVAL=$?

# if we are in halt or reboot runlevel kill all running sessions

# so the TCP connections are closed cleanly

if [ "x$runlevel" = x0 -o "x$runlevel" = x6 ] ; then

trap '' TERM

killall $prog 2>/dev/null

trap TERM

fi

[ $RETVAL -eq 0 ] && rm -f $lockfile

echo

}

reload()

{

echo -n $"Reloading $prog: "

killproc -p $PID_FILE $SSHD -HUP

RETVAL=$?

echo

}

restart() {

stop

start

}

force_reload() {

restart

}

rh_status() {

status -p $PID_FILE openssh-daemon

}

rh_status_q() {

rh_status >/dev/null 2>&1

}

case "$1" in

start)

rh_status_q && exit 0

start

;;

stop)

if ! rh_status_q; then

rm -f $lockfile

exit 0

fi

stop

;;

restart)

restart

;;

reload)

rh_status_q || exit 7

reload

;;

force-reload)

force_reload

;;

condrestart|try-restart)

rh_status_q || exit 0

if [ -f $lockfile ] ; then

do_restart_sanity_check

if [ $RETVAL -eq 0 ] ; then

stop

# avoid race

sleep 3

start

else

RETVAL=6

fi

fi

;;

status)

rh_status

RETVAL=$?

if [ $RETVAL -eq 3 -a -f $lockfile ] ; then

RETVAL=2

fi

;;

*)

echo $"Usage: $0 {start|stop|restart|reload|force-reload|condrestart|try-restart|status}"

RETVAL=2

esac

exit $RETVAL

由于OpenSSH依赖的OpenSSL已不支持rsa1,所以我将启动脚本中生成rsa1秘钥的指令注释掉了。

接下来,关键的一步来了,我们要关闭旧的sshd服务,启动新的sshd服务。这个操作如果失败了,不会导致现有的ssh远程连接断开。所以我们可以先关闭旧的sshd程序,再启动新的sshd程序:


[[email protected] ~]# service sshd.old stop

[[email protected] ~]# service sshd start

如果新的sshd服务启动成功了,我们可以先简单测试下,比如,看看普通用户和root用户是否能正常通过ssh登录。如果没有没有问题,我们可以在测测其它的,比如scp、sftp是否正常等。当然,如果有条件的话,可以使用漏洞扫描工具扫一下,看看有没有什么我们没有注意到的地方。

最后,就可以删除掉旧sshd服务的启动脚本了,以免冲突:


[[email protected] ~]# rm -f /etc/init.d/sshd.old

总结

现在,所有操作都完成了。总的来说,整个升级过程应该还是挺明了的,不会有太多把系统搞挂的风险,可重复操作性强,重复升级也没有问题,也不会影响系统中的其它软件。

当然,也有可以继续完善的地方,可能有两个方面吧。

一是,openssl和openssh的编译选项基本来说我也只是使用了必要的选项,由于不知道操作系统自带的openssl和openssh原本的编译选项是什么,所以我们编译出来的openssl和openssh软件在功能特性上只是尽可能地接近原有的,安全性和性能可能也是有差异的。

二是,我复用了操作系统原有的sshd服务的配置文件和启动脚本,这可能无法充分利用新版本openssh的特性。openssl和openssh本来也是挺复杂的东西,一时半会可能也很难完全弄明白。

但是,不管怎么说,这种升级方式,应该会比强制升级openssl和openssh的方式好很多。

原文地址:http://blog.51cto.com/techsnail/2138927

时间: 2024-11-10 10:24:55

升级OpenSSH及其OpenSSL的正确姿势的相关文章

SuSe 11以编译安装的方式升级OpenSSH、OpenSSL及依赖问题解决

OpenSSH OpenSSH是实现远程控制.远程加密传输数据的安全的网络连接工具,也就是为我们提供ssh服务的程序.SSH由服务端和客户端组成,服务端是一个守护进程(sshd),在后台运行并响应客户端的连接请求:客户端包含ssh(openssh-clients).scp.rsync.slogin.sftp等应用程序. SSH服务本身提供了一种安全加密的数据传输方式.在一些比较旧的Linux系统版本中,多数是openssh 5版本.而目前OpenSSH已更新到OpenSSH 7.X版本,修复许多

redhat 6.5升级openssh和openssl

本文基于RedHat 6.5(RHEL 6.5)64位版本升级OpenSSH和OpenSSL的操作过程 一.查看当前版本信息 uname -a Linux localhost.localdomain 2.6.32-431.el6.x86_64 #1 SMP Sun Nov 10 22:19:54 EST 2013 x86_64 x86_64 x86_64 GNU/Linux openssl version OpenSSL 1.0.1e-fips 11 Feb 2013 ssh -V OpenSS

openssh和openssl升级

openssh和openssl漏洞不断升级方法网上很多,最简单的方法是直接更新系统的ssh和openssl, 只升级openssh也可以,但是openssl有漏洞,相当于没用.所以要两个一起来升级,升级顺序一定 是先升级openssl,然后再升级openssh.一定不能反了,否则的话得需要重新编译一次openssh. 另外升级openssl的风险太大,建议至少打开两个连接终端,而且最好保证的你网络是良好的. 否则升级的时候断了的话你就会很悲剧的跑机房玩去了. 升级前一定要和研发确认好是否有其它程

centos6 升级OpenSSH 7.6,OpenSSL 1.0.1n

背景 公司做安全扫描,扫出OpenSSH.OpenSSL漏洞,需要做升级.直接yum update无果,只好手动编译升级了. 升级前 ssh -V OpenSSH_5.3p1, OpenSSL 1.0.1e-fips 11 Feb 2013 升级后 ssh -V OpenSSH_7.6p1, OpenSSL 1.0.2n 7 Dec 2017 准备工作 准备OpenSSH.OpenSSL安装包 openssh-7.6p1.tar.gz openssl-1.0.2n.tar.gz 安装依赖包 Op

【完美升级Openssh】redhat 6.8 x64升级SSH到OpenSSH_7.4p1

需求: 因openssh扫描存在漏洞,基于安全考虑,需要将openssh_7.1p1升级为openssh_7.4p1. 操作如下: 1.下载安装包: openssh的安装需要依赖zlib和openssl,因此要一并下载下来. 注意:openssh最新版7.4p1依赖的openssl版本为1.0.2k,而不是其最新版1.1.0e(使用此版会升级失败). 官网地址: http://www.zlib.net http://www.openssl.org http://www/openssl.org 下

脚本升级openssh

一.问题描述(默认Linux安装的SSHD服务存在一些漏洞,特此升级) 在曾经手动升级sshd服务后发现了三个后遗症: selinux开启的状态下,重启机器sshd不启动(原因:库文件“libcrypto.so.1.0.0”的selinux标记不正确,导致sshd无法调用访问该文件,使用setroubleshoot工具找到原因) hosts.allow,hosts.deny对sshd不起作用(原因:编译时未加上--with-tcp-wrappers) sftp无法使用(原因:源码安装后配置文件未

CentOS 6.6升级OpenSSH到最新版本7.5.p1

本文主要简单记录CentOS 6.6下OpenSSH升级步骤,安装编译所需工具包 yum install gcc pam-devel zlib-devel 一.升级原因7.4以下openssh版本存在严重漏洞:1.OpenSSH 远程权限提升漏洞(CVE-2016-10010)  2.OpenSSH J-PAKE授权问题漏洞(CVE-2010-4478)  3.Openssh MaxAuthTries限制绕过漏洞(CVE-2015-5600)  OpenSSL>=1.0.1可以不用升级OpenS

升级openssh的两种方式

此文介绍的是服务器在有网络和无网络情况下升级openssh方式. 一.首先介绍一个无网络如何升级: 1.准备相关的包 openssh下载地址:  http://mirror.internode.on.net/pub/OpenBSD/OpenSSH/portable/ openssl相关包下载:http://www.openssl.org/source/ pam相关包下载:http://pkgs.org/centos-6/centos-x86_64/ zlib包下载: http://zlib.ne

linux下升级 OpenSSH

一.下载最新版本 OpenSSH OpenSSH 的官方网站:http://www.openssh.com 这里我下载的是openssh-6.2p1 使用ssh -V 命令查看一下 #安装相关的组件 yum -y install gcc openssl-devel pam-devel rpm-build 二.下面开始升级SSH,这里我写了两种升级方法 1.编译安装 OpenSSH # tar xzvf openssh-6.2p1.tar.gz # cd openssh-6.2p1 # ./con