/usr/local/lib 没有优先权

/usr/local/lib 没有优先权

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

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

./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

答案1

前言:正如问题中所观察到的, 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

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

ldconfig -p | grep libssl

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

ldconfig -p | grep "/usr/local"

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

/usr/local/lib

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


/usr/local/lib 没有优先权

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

grep -r "/usr/local" /etc/ld.so.conf.d

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

addtheselibraries.conf
libc.conf

And libc.confcontains/usr/local/lib但包含addtheselibraries.conf,例如1/usr/lib,则后者优先。如果该文件不包含任何其他内容,只需使用将取代其他文件的名称重命名即可;数字先行所以很好。/usr/local/lib000-whatever

因为你可以完全控制/usr/local/lib应该优先于发行版包管理器使用的任何路径(通常如此)。

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

答案2

openssl version -a

上面的命令将为您提供系统中 openssl 的版本。检查构建日期而不是第一行的日期。

答案3

您必须重新编译 openssh,方法是下载源代码(包括源代码树中的 openssl 源代码)并./config; make; make install运行openssh

有关编译 openssh 的详细说明可以在安装文档

相关内容