不确定这是否属于这里或 superuser.com。
我正在努力使需要链接 Oracle 动态库的 C 进程运行。
它在 oracle 用户(安装 oracle 的用户)下编译并运行良好,但在其他帐户下则不行。显而易见的原因是默认的 oracle 安装不授予对 /lib 中的任何共享库的读取或执行权限
我已将 r+x 授予所有底层 dylib(相当于 .so 等),并在 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
我怀疑答案非常愚蠢和简单,但我的理解是符号链接从底层文件继承了权限。
答案1
ls
不关心文件的权限,因为它只列出其目录条目。但是,当取消引用符号链接时,它会访问链接的内容。因此它确实关心链接的权限。在这里,除非您属于该组ls
,否则您无权读取目标是什么。libodm10.dylib
dba
您还需要更改符号链接的权限。这里没有理由不使链接可供所有人读取。
请注意,有些 unices 根本不支持符号链接的权限;而 OSX 却支持。
答案2
如果您的用户或组没有打开该文件父目录的执行位,那么您就无法在该目录中“搜索”。