在没有root权限的情况下更新ldconfig缓存

时间:2013-07-17 01:16:14

标签: linux centos shared-libraries ldd library-path

$ uname -a
Linux xhost10.bcgsc.ca 2.6.18-194.el5 #1 SMP Fri Apr 2 14:58:14 EDT 2010 x86_64 x86_64 x86_64 GNU/Linux

$ /sbin/ldconfig --version
ldconfig (GNU libc) 2.5

我在本地安装了几个二进制文件和库,因为我没有root访问权限。

某些程序需要在运行时动态链接到非标准位置的共享库。

执行时,程序返回:

$ path/to/cc1
path/to/cc1: error while loading shared libraries: libmpc.so.3: cannot open shared object file: No such file or directory

我已经添加了库$LD_LIBRARY_PATH的路径,但我无法在没有root访问权限的情况下更新ldconfig缓存...

是否有特定于用户的/etc/ld.so.cache

或者更一般地说,是否可以使用用户配置文件“屏蔽”系统配置文件?

1 个答案:

答案 0 :(得分:4)

ldconfig缓存仅适用于/etc/ld.so.conf或/etc/ld.so.conf.d中指定的路径。由于这些对于非root用户来说是不可写的,所以如果没有root用户的帮助,你就无法使用它们来提高没有root权限安装的可执行文件的启动速度(但即使这样,将一个可写入文件的文件添加到这些文件也是一个坏主意。系统范围的图书馆搜索路径)。

因此,对于这些情况,您需要在依赖于非默认路径中的库的可执行文件或库中使用LD_LIBRARY_PATH环境变量或rpath / runpath。我不知道LD_LIBRARY_PATH和rpath / runpath之间有任何速度差异,但rpath / runpath的优点是它们只影响特定的可执行文件,因此不太可能导致其他程序出现问题。

在linux / unix中,没有通用的方法来屏蔽系统配置文件并使用用户提供的文件。实际上,这是unix安全模型主动必须防止避免各种特权升级的事情。这就是为什么甚至许多环境变量因suid可执行文件而被禁用的原因。许多程序都有一种指定覆盖用户配置的方法,一些更复杂的程序也有办法让系统管理员设置不可覆盖的强制设置。