sejishikong 发表于 2006-3-10 21:48:10

当然,个别的软件可以选择调用自己的库还是系统的库,我说的只的是通用设置下首先调用当前目录的库.

个别的软件,比如超级解霸和wps2005都是调用自己的wine库.但是如果所有的软件都这么做的话,空间占用是个很大的问题.

beyondsakai 发表于 2006-3-10 21:50:29

另外:

兄弟们说的方法:

“把so文件所在文件夹加入这个文件里面 /etc/ld.so.conf
然后运行ldconfig ”

”ldconfig -n “so 文件所在的目录”
例如:
ldconfig -n /opt/abc “

还是行不通。仍然是那个提示。

ahlongxp 发表于 2006-3-12 22:13:44

环境变量的事儿,什么LD_LIBRIAY。差不多的意思

jiangtao9999 发表于 2006-3-12 22:36:41

如果不把库放到统一的目录里,那么就意味着别人不能基于你的 so 文件进行在开发,所以很多程序都放到固定的目录里让别人调用。

程序员完全可以把所有的 so 都放到自己的目录,包括所有依赖的 so ,比如整个 Xorg 、glib 等等,甚至一个完整的 Linux 发行版所提供的全部文件。

这样,Linux 的程序将会可以放变的跨发行版运行。


其实很多程序的 static 版本就是这个样子的。把大部分需要的库都封装带程序里。
但这样容量将会很大,而且也只能封装一部分。

ricetons 发表于 2006-3-12 23:20:33

这种办法存在当然是有理由的。

windows中有一种dll hack,大家可能都不知道

windows中搜索程序/DLL,顺序通常是 ./ -> windows/system32/ -> windows/ -> apppath etc.

比如我用MSN,现在我要将我的密码用md5加密,然后发到网络上,而md5函数的dll在system32下,叫md5.dll

现在我在MSN目录下放一个md5.dll,里面的函数是我修改过的,能把密码保存下来,那么MSN执行的事情会发生什么事情,大家想一想就很清楚了。

对于安全领域的事情,希望大家不要想当然。

没事先google一下,谢谢。

beyondsakai 发表于 2006-3-19 19:19:45

jiangtao9999兄讲的还是感觉说不太通,我感觉linux文件存放位置是这样就是因为历史原因而保留至现在的一种习惯而以,
因为要做到让so文件共享,以便于其它程序开发或者使用,完全不必把这些文件一股脑的全放到系统指定的目录下,做一个简单的连接或者变量设置之类的东西就可以了(这些设置可以在安装这些库或者安装带这些库的程序的时候设定,如果其它的程序需要这些库,它又自带了这些库的话,它可以先检查有关这个库的设定,是否存在这些库,以及它的版本,如果符合要求,则可以不必再装这些库以节省空间,如果已经安装的库不符合要求,比如版本等问题,那么它装安装自己的库到自己目录下)

而且事实上,我们可以看到,即使很多程序把自己的库放到系统目录下,系统同样作了一些变量设置,以及大量的连接文件,我想既然这是不是有点多此一举,因为如果有了变量或是连接来设置这些库,那么这些库放到哪里都无所谓了,通过相关变量或是连接总可以找到它们。既然这样的话,还不如把各种程序的库放到各自的目录下以方便管理。当然系统的标准库以及大多数程序会用到的库比如KDE,glibc这些用得极多的库要放到系统目录下,因为这些基本上都快成了linux的标配。


ricetons兄我也是很不理解,
你说了半天我感觉你好像不知道你在说什么或者我们前面说的是什么,(我这么说希望你别生气,兄弟是直性子),我感觉你说了一大段其实是在说系统安不安全跟程序要调用的的库文件有关,而不是跟库文件的位置有关。
“MSN目录下放一个md5.dll,里面的函数是我修改过的,能把密码保存下来”程序员有意要这么做你也没办法,既然你都可以让MSN调用你自己的DLL,程序就更加可以。

系统的库不可能足够大到可以满足任何一种程序的需求,所以程序用自己附带的库文件是必须的,系统没有办法不让程序用系统以外的库。所以这么做跟安全是没有关系的。

反过来,系统在安装其它程序时也不会去检测安装的文件是否安全吧,而且很多程序安全时就是把库放到系统目录的,如果它要把不安全的库放么系统程序,其它文件也调用这个库,那不是更加不安全了????

guazi111 发表于 2006-3-19 21:34:07

那个的确是跟系统安全有关的,而且也整个系统的运行效率也有关,如果每个程序都到自己的目录下开始管理的话,那么为了管理这些程序,就必需要出现一个注册表一类的东西来在系统开始的时候统一载入,那样就跟windows一样变的很慢了^

haulm 发表于 2006-3-20 00:58:08

ricetons的说法还是相当有说服力,如果程序任由程序调用当前目录下的类库,只会增加不安全因素。
Linux有着很严格的权限划分,如果允许用户自由调用当前目录的类库,这种权限划分就失败了,用户可以随意提升自己的权限,而病毒也可以随意地提升自己的传染能力。
有人说Win不安全是因为用户多,虽然有点道理,但要说Linux安全是用户少就该掌嘴。Win的不安全的确是为了方便用户使用(自然用户多了),但安全上用折衷的办法肯定是很难有好的表现(补丁又见补丁),其框架上就是不安全的。
现在很多类Unix发行版连root账号都进行了各种限制,可以说在这些系统中root账号已经不是万能账户了。在freebsd 中root账号被拒绝登录桌面,在ubuntu上就也是如此。估计安全的目的,今后的类UNIX系统都将强制桌面用户不得使用root账号。从易用性来说,用非root账号换来的安全是在每到安装软件和设置系统或更新时都要输入密码是极不方便的。
所以,千万不要把WIN的不良习惯带来Linux上来,因为Linux不会惯坏一个使用者,它可不是玩具。
总之,用安全换来操作的烦琐,还是用简便带来安全问题,你会选择哪一种。比较难听的说法是:你是喜欢在脖子上挂块大饼躺床上吃饭还是愿意到大厅和大家共同进餐?
我也感觉WIN随着软件安装的增多,系统速度就越慢,这和WIN的这种松散的类库管理也是分不开的。
总之,反对Linux程序可以调用当前类库,唯持原有的Linux构架。

tanhitzq 发表于 2006-3-20 09:05:15

在freebsd 中root账号被拒绝登录桌面,在ubuntu上就也是如此

在ubuntu上的root用户是可以登录桌面的!


如果允许用户自由调用当前目录的类库,这种权限划分就失败了,用户可以随意提升自己的权限,而病毒也可以随意地提升自己的传染能力。

其实如果软件要破坏系统,同样可以把库安装的系统库目录下面的。因为安装的时候就需要root。



我只同意可不可以调用自己目录下的库,是由软件自己本身确定的。软件自己的确定不行,除非修改程序,不然就是不行。

guazi111 发表于 2006-3-20 09:17:39

linux和unix中有一种被称之为suid和guid的权限位,它们可以使用户在运行具有这种权限位的脚本或者程序时暂时拥有文件属主的权限,因此很容易造成安全问题,所以干脆很多的系统供应商酒干脆不允许实现这一位,即使被置位也会完全忽略其存在。
而如果允许程序优先调用本目录下的库,就意味着普通用户可以在自己安装的程序目录下进行对库文件的修改,这样如果根用户同样运行了此程序,就可能造成系统的不安全。

haulm 发表于 2006-3-20 15:00:06

ubuntu上的root用户可以登录桌面么,也许我没记清,freebsd 6是不能用root登陆桌面的,ubuntu的root就算上了桌面也和普通用户的权限一样。正因为需要root身份和密码才能装软件,从而杜绝了病毒和木马继续传染扩散的能力。我们这里谈的安全,当然不是针对拥有root密码的用户,而是针对那些没有安装权限的用户以及网络小偷、病毒散播者。
只能让系统来管软件,不可让软件来管系统,不要本末倒置了,Win就是用软件来管系统,所以Win很容易传播病毒。

beyondsakai 发表于 2006-3-20 15:24:29

那个的确是跟系统安全有关的,而且也整个系统的运行效率也有关,如果每个程序都到自己的目录下开始管理的话,那么为了管理这些程序,就必需要出现一个注册表一类的东西来在系统开始的时候统一载入,那样就跟windows一样变的很慢了^

晕,Windows程序完全可以设计成不要注册表的绿色软件, 事实上这种软件已经很多了,linux就更不用说了,如果这点linux都不办法做到,它怎么可能强过windows, 所以我说这种目录结构只是历史原因造成的, 不要因为大家心中的linux过于神圣,所以只要linux采用的方法就是好的.

用句中国人的粗话就是 "放个屁都是香的" (直性子,呵呵)

beyondsakai 发表于 2006-3-20 15:45:59

ubuntu上的root用户可以登录桌面么,也许我没记清,freebsd 6是不能用root登陆桌面的,ubuntu的root就算上了桌面也和普通用户的权限一样。正因为需要root身份和密码才能装软件,从而杜绝了病毒和木马继续传染扩散的能力。我们这里谈的安全,当然不是针对拥有root密码的用户,而是针对那些没有安装权限的用户以及网络小偷、病毒散播者。
只能让系统来管软件,不可让软件来管系统,不要本末倒置了,Win就是用软件来管系统,所以Win很容易传播病毒。

再晕, 我从来就是用root来登录的, 包括FREEBSD,我也是直用root,我从来不用其它的用户名登录,即使我会在装系统时创建一个另外的普通用户,但我几乎是从来没有用普通用户登录过系统.我也不知道"FREEBSD不能用root登录桌面"从何而来. (我机器上的FREEBSD就是6.0版的)

linux不是讲求自由吗? 如果用户用软件都不自由,所谓的安全又有何用?(当然这是对于普通用户来说的,如果是服务器,也用不着装那多的软件,也无所谓什么软件包管理了)


不管是不是安全原因, 兄弟们也不用解释其它的,,
我只想问:
普通用户安装的软件都是自己不带库文件的么?? 普通用户所用的软件所需要的库文件都可以从系统中得到么???
如果答案是:是
那我就只有无语了.

如果答案是:NO
那我要再问, 普通用户的软件既然自己带了自己需要的库, 如果它又不能调用, 那么那自带的库又有何用???????

反过来,如果linux系统用这些来控制安全, 软件启不是很死板???(因为软件将只能使用系统的库,而这些库是远远不能满足程序要求的)

如果大家总是不相信linux下的程序是安全的话, 还要通过这种很弱的方法来控制系统安全的话, 那你们干嘛不怀疑linux系统下的文件的安全性, 它们同样是软件, 只是一个是系统,一个是应用软件而以,本质上没有区别..

linux的安全不是靠这些简单的目录结构实现的, 而是它的本质""开放源代码""",, 这是本质,大家不要忘记了, 基于linux的软件也绝大多数是这个特点,,, 这是它安全所在. 很多程序员可以通过分析源代码来从根本上弄清楚它做了哪些动作, 这些动作是否安全,这才是根本所在.

tanhitzq 发表于 2006-3-20 16:04:34

普通用户安装的软件都是自己不带库文件的么?? 普通用户所用的软件所需要的库文件都可以从系统中得到么???
如果答案是:是
那我就只有无语了.

如果答案是:NO
那我要再问, 普通用户的软件既然自己带了自己需要的库, 如果它又不能调用, 那么那自带的库又有何用???????


你不用无语。

事实上linux的软件是可以做成优先调用自己目录下的库的。
只要编写软件的人自己设定好就可以了。
如果编写软件的人要优先调用系统的库,除非修改源程序,不然就没有什么办法了。


比如超级解
霸和wps2005都是调用自己的wine库.
但是如果所有的软件都这么做的话,空间占用是确实个很大的问题。

heyuqi 发表于 2006-3-20 16:26:13

那个的确是跟系统安全有关的,而且也整个系统的运行效率也有关,如果每个程序都到自己的目录下开始管理的话,那么为了管理这些程序,就必需要出现一个注册表一类的东西来在系统开始的时候统一载入,那样就跟windows一样变的很慢了^

晕,Windows程序完全可以设计成不要注册表的绿色软件, 事实上这种软件已经很多了,linux就更不用说了,如果这点linux都不办法做到,它怎么可能强过windows, 所以我说这种目录结构只是历史原因造成的, 不要因为大家心中的linux过于神圣,所以只要linux采用的方法就是好的.

用句中国人的粗话就是 "放个屁都是香的" (直性子,呵呵)

有一个例子:如果你要编译 gimp,这时,你先要有一个GTK 支持,那么你要如果通知你的编译程序你的 GTK 在哪里?

在 Windows 中,你应该在注册表里面留下相关信息。因为注册表就是微软为了解决 WINDOWS 各盘相互独立的问题而引入的。

在 UNIX/Linux 中,你会使用链接来告诉编译程序,GTK 在哪里。

事实上 Windows 和 UNIX/Linux 这个方面应该说是殊途同归的。UNIX/Linux 通过规范来定义每个目录的用途,而 Windows 在注册表里也设定了不同分支的意义。在 Linux 你不能把运行程序放到 /dev 下,而在 Windows 注册表中,程序也不可能找到你放在了错误分支下的信息。

我觉得你对 Linux 还是有偏见,Windows 下的东西真的都是好的吗?注册表的确有它的优点,但是你又是否知道微软正在努力降低用它的开发工具编写的程序对注册表的依赖吗?
页: 1 [2] 3 4
查看完整版本: 如何优先调用当前目录下的 so 文件?