荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: jjksam (咁大个仔第一次睇到流星!:p), 信区: Linux
标  题: [转载] 关于Linux和Unix动态连接库的安全(转寄)
发信站: 荔园晨风BBS站 (Wed Nov 21 09:35:43 2001), 转信

【 以下文字转载自 jjksam 的信箱 】
【 原文由 jjksam@smth.org 所发表 】
发信人: lfan (豆豆), 信区: Security
标  题: 关于Linux和Unix动态连接库的安全
发信站: BBS 水木清华站 (Tue Nov 20 14:07:16 2001)

来源:http://www.cnhonker.net

实际上所有程序执行都依赖于库。在包括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写入/e
tc/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程序不应受到环境变量集的过分影
响。

--

※ 来源:·BBS 水木清华站 smth.org·[FROM: 166.111.136.114]
--
※ 转载:·荔园晨风BBS站 bbs.szu.edu.cn·[FROM: 192.168.0.146]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店