什么原因导致权限在符号链接上执行ls时被拒绝,当底层文件被赋予全部“r”时?

不知道这是否属于这里或在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”。