【问题标题】:Update ldconfig cache without root permission在没有 root 权限的情况下更新 ldconfig 缓存
【发布时间】:2013-07-15 09:36:41
【问题描述】:
$ 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

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

【问题讨论】:

  • 我可以通过在 ~/.bashrc 中导出 LD_LIBRARY_PATH 并重新登录来让 ld.so 找到共享库。运行在 LD_LIBRARY_PATH 中动态加载库的二进制文件似乎需要更长的时间来初始化(共享网络文件系统),但至少它们运行......

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


【解决方案1】:

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 可执行文件。许多程序都有一种方法来指定覆盖用户配置,一些更复杂的程序也有方法让系统管理员设置不可覆盖的强制设置。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-25
    • 2011-05-16
    • 2015-11-12
    • 2011-10-23
    • 2013-05-29
    相关资源
    最近更新 更多