关于Linux和Unix动态链接库的安全

实际上所有程序执行都依赖于库。在包括Linux的大多数现代类Unix系统中,程序缺省使用动态连接库(DLL)进行编译。这样就可以更新某个库,所有使用该库的程序如果可能的话,都将使用新的(希望有所改进的)版本。

动态连接库通常被放在若干特殊目录下。通常这些目录包括/lib、/usr/lib、有关PAM模块的/lib/security、有关X-windows的/usr/X11R6/lib和/usr/local/lib。

对于库的命名和进行库的符号连接有些特殊约定,这样就可以更新库,同时继续支持需要使用不具有反向兼容的老版本库的程序。在执行特定程序时可以覆盖某个指定库,甚至只覆盖某个库里的指定函数。这是类Unix系统相对于类Windows系统的一个实际优点;我相信类Unix系统有一个更好的系统来处理库的更新,这也是Unix和Linux系统被认为比基于Windows的系统更稳定的原因。

在包括所有Linux系统的基于GNU glibc的系统中,程序启动时自动寻找的目录列表存储在文件/etc/ld.so.conf中。很多源于Red Hat的发行版一般在文件/etc/ld.so.conf中不包含/usr/local/lib。我认为这是个Bug,要在源于Red Hat的系统里运行很多程序都需要进行一个通用的“修复”,把/usr/local/lib加入/etc/ld.so.conf。

如果只是想覆盖某个库里的若干函数,而想保留该库的其它部分,可以在/etc/ld.so.preload中输入要覆盖的库名(.o文件);这些“预载入”的库会优先于标准库使用。通常这种预载入文件是用于紧急补丁的;发行版在发行时一般不会包含这样的文件。

在程序启动时寻找所有这些目录太花时间,所以实际上使用了一个cache管理方法。程序ldconfig(8)缺省读入文件/etc/ld.so.conf,在动态连接目录里建立相应的符号连接(这样就遵循了标准约定),然后把cache写入/etc/ld.so.cache,这样就可以被其它程序使用了。所以一旦增加一个DLL,或删除一个DLL,或者DLL目录集发生改变,ldconfig就要运行一次;在安装库时,运行ldconfig通常是软件包管理程序需要执行的一个步骤。在启动时,程序使用动态加载程序来读入文件/etc/ld.so.cache,然后载入其所需的库。

各种环境变量可以控制这一过程,而且事实上也有允许覆盖此过程的环境变量(所以可以在某次特别的执行过程中临时替换某个不同的库)。在Linux下,环境变量LD_LIBRARY_PATH是一组用逗号隔开的目录,在查找标准目录集之前先查找这些库;这在调试新库或为特殊目的使用非标准库时很有用。变量LD_PRELOAD列出了覆盖标准集的函数所在的目标文件,就像/etc/ld.so.preload一样。

如果不采取特别的措施,允许用户控制动态连接库会对setuid/setgid程序造成灾难性的后果。因此在实现GNU glibc时,如果是setuid或setgid程序,将忽略这些变量(和其它类似的变量),或者严格限制这些变量所起的作用。GNU的glibc库通过检查程序的证明来确定其是否为setuid或setgid程序;如果uid和euid不同,或者gid和egid不同,则库就假设该程序为setuid/setgid程序(或者为其子程序),然后严格限制它控制连接的能力。如果载入GNU的glibc库,就可以看到这种情况;

请特别阅读一下文件elf/rtld.c和sysdeps/generic/dl-sysdep.c。这就意味着如果使uid和gid等于euid和egid,再调用程序,这些变量就具有完全的效力。其它类Unix系统处理这些情况有所不同,但原因相同:一个setuid/setgid程序不应受到环境变量集的过分影响。

文章来源网络,作者:运维,如若转载,请注明出处:https://shuyeidc.com/wp/139365.html<

(0)
运维的头像运维
上一篇2025-03-03 10:57
下一篇 2025-03-03 10:59

相关推荐

  • 个人主题怎么制作?

    制作个人主题是一个将个人风格、兴趣或专业领域转化为视觉化或结构化内容的过程,无论是用于个人博客、作品集、社交媒体账号还是品牌形象,核心都是围绕“个人特色”展开,以下从定位、内容规划、视觉设计、技术实现四个维度,详细拆解制作个人主题的完整流程,明确主题定位:找到个人特色的核心主题定位是所有工作的起点,需要先回答……

    2025-11-20
    0
  • 社群营销管理关键是什么?

    社群营销的核心在于通过建立有温度、有价值、有归属感的社群,实现用户留存、转化和品牌传播,其管理需贯穿“目标定位-内容运营-用户互动-数据驱动-风险控制”全流程,以下从五个维度展开详细说明:明确社群定位与目标社群管理的首要任务是精准定位,需明确社群的核心价值(如行业交流、产品使用指导、兴趣分享等)、目标用户画像……

    2025-11-20
    0
  • 香港公司网站备案需要什么材料?

    香港公司进行网站备案是一个涉及多部门协调、流程相对严谨的过程,尤其需兼顾中国内地与香港两地的监管要求,由于香港公司注册地与中国内地不同,其网站若主要服务内地用户或使用内地服务器,需根据服务器位置、网站内容性质等,选择对应的备案路径(如工信部ICP备案或公安备案),以下从备案主体资格、流程步骤、材料准备、注意事项……

    2025-11-20
    0
  • 如何企业上云推广

    企业上云已成为数字化转型的核心战略,但推广过程中需结合行业特性、企业痛点与市场需求,构建系统性、多维度的推广体系,以下从市场定位、策略设计、执行落地及效果优化四个维度,详细拆解企业上云推广的实践路径,精准定位:明确目标企业与核心价值企业上云并非“一刀切”的方案,需先锁定目标客户群体,提炼差异化价值主张,客户分层……

    2025-11-20
    0
  • PS设计搜索框的实用技巧有哪些?

    在PS中设计一个美观且功能性的搜索框需要结合创意构思、视觉设计和用户体验考量,以下从设计思路、制作步骤、细节优化及交互预览等方面详细说明,帮助打造符合需求的搜索框,设计前的规划明确使用场景:根据网站或APP的整体风格确定搜索框的调性,例如极简风适合细线条和纯色,科技感适合渐变和发光效果,电商类则可能需要突出搜索……

    2025-11-20
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注