如何确定是否安装了最新的 OpenSSL 补丁?

oct*_*bus 3 openssh software-installation

这篇文章是关于应用 OpenSSL 的最新补丁来保护我们的 443 端口网络流量,而不是使用 ssh 登录这些系统。

openssl-1.0.1g.tar.gz这里为我的运行 CentOS 6.5 的 Linux 工作站获取了最新的 OpenSSL tarball 源补丁,并构建了补丁,包括

./config; make; make test; make install # as root

这安装在/usr/local/ssl.

在将补丁应用到我们的生产系统之前,我想在一个安全的地方证明补丁。但是,在运行完所有内容后,我被难住了。这

./config, make, make test, and make install

步骤完成没有错误。

如何检查是否安装了最新的 OpenSSL?

以下是来自各种答案的测试版本的结果:

openssl version -a
OpenSSL 1.0.1e-fips 11 Feb 2013
built on: Tue Apr  8 02:33:43 UTC 2014
platform: linux-elf
Run Code Online (Sandbox Code Playgroud)

gol*_*cks 6

序言:正如在问题中所观察到的,openssl 默认安装到/usr/local/ssl. 我的建议是使用./config --prefix=/usr/local shared(注意“共享”之前的空格),以便它安装在那里(并构建共享库,libssl),而不是它自己的私有子目录。如果你不这样做,你将不得不将文件添加到/etc/ld.so.conf.d/usr/local/ssl/lib它(请参阅下面的意义/etc/ld.so.conf.d的文件),并添加/usr/local/bin$PATH


您需要运行ldconfigaftermake install将库添加到链接器缓存。如果这不起作用,请继续阅读。

make install可能默认情况下转到/usr/local,这应该优先但可能不会。因此,您可以保留发行版的 openssl 安装以避免混淆包管理器和先决条件,但仍然使用您自己的本地构建版本作为默认版本。去检查:

ldd $(which ssh) | grep libssl
Run Code Online (Sandbox Code Playgroud)

如果您没有得到任何输出,则您ssh是静态链接的,需要重新构建(请参阅 Anton 的回答)。否则,这应该指向您的/usr/local版本。如果它指向别的东西:

ldconfig -p | grep libssl
Run Code Online (Sandbox Code Playgroud)

/usr/local版本应该被显示,但之后其他一些之一。如果是这样,请跳到下面的“/usr/local/lib 没有优先级”。如果没有,请确保/usr/local通常在链接器路径中:

ldconfig -p | grep "/usr/local"
Run Code Online (Sandbox Code Playgroud)

如果没有,grep -r "/usr/local" /etc/ld.so.conf.d. 如果不存在,请添加一个文件以使用一行/etc/ld.so.conf.d调用00-local.conf

/usr/local/lib
Run Code Online (Sandbox Code Playgroud)

运行ldconfig(无开关)并再次执行此操作。


/usr/local/lib 没有优先级

找到添加路径的链接器缓存配置文件:

grep -r "/usr/local" /etc/ld.so.conf.d
Run Code Online (Sandbox Code Playgroud)

如果它不存在,您将必须添加一个如上所述的文件。假设是这样,问题在于文件是按字典顺序处理的。例如,如果 的内容/etc/ld.so.conf.d是:

addtheselibraries.conf
libc.conf
Run Code Online (Sandbox Code Playgroud)

并且libc.conf包含/usr/local/libaddtheselibraries.conf包含,例如/usr/lib1则后者优先。如果/usr/local/lib文件不包含任何其他内容,只需使用将取代其他文件的内容重命名即可;数字先行,所以000-whatever很好。

因为您可以完全控制/usr/local/lib,所以它应该优先于发行版包管理器使用的任何路径(通常是这样)。

1. /usr/lib 是默认编译到链接器中的,但它和其他标准系统位置(/lib 等)是最后添加的,这允许您取代它们。由于这些,有时(例如)/usr/lib被添加到 .conf 文件中,以使其取代其他一些 .conf 文件。


Ram*_*esh 5

openssl version -a
Run Code Online (Sandbox Code Playgroud)

上面的命令会给你系统中openssl的版本。检查构建日期而不是第一行的日期。