不知道这是否属于这里或在superuser.com。
我正在争取获得需要在Oracledynamic库中链接的C进程。
它在oracle用户(用户oracle被安装)下编译并运行正常,但不在其他帐户下。 显而易见的原因是默认的oracle安装不会将读或执行授予/ lib中的任何共享库
我已经为所有的底层dylib(相当于.so等)授予r + x,并在oracle用户下执行,我得到了以下结果
ls -lrt *odm* -rwxr-xr-x 1 oracle dba 9000 Mar 3 2009 libodmd10.dylib lrwxrwx--- 1 oracle dba 15 Jul 25 14:23 libodm10.dylib -> libodmd10.dylib
在我的另一个用户(我想要执行的)下做同样的事情,我得到以下内容
ls -lrt libodmd10.dylib -rwxr-xr-x 1 oracle dba 9000 Mar 3 2009 libodmd10.dylib ls -lrt libodm10.dylib ls: libodm10.dylib: Permission denied lrwxrwx--- 1 oracle dba 15 Jul 25 14:23 libodm10.dylib
我怀疑这个答案是非常愚蠢和简单的,但是我的理解是符号链接inheritance了底层文件的权限。
ls不关心文件的权限,因为它只列出它的目录条目。 但是,当ls引用一个符号链接时,它正在访问该链接的内容。 所以它确实关心链接的权限。 在这里,您没有权限读取libodm10.dylib的目标是什么,除非您在dba组中。
您还需要更改符号链接的权限。 这里没有理由不让链接世界可读。
请注意,一些unice根本不支持符号链接的权限; OSX呢。
如果文件的父目录上的执行位对于您的用户或组不在,那么您不能在该目录中“search”。