当基础文件已授予所有人“r”权限时,在符号链接上执行 ls 时,什么原因导致权限被拒绝?

当基础文件已授予所有人“r”权限时,在符号链接上执行 ls 时,什么原因导致权限被拒绝?

不确定这是否属于这里或 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.dylibdba

您还需要更改符号链接的权限。这里没有理由不使链接可供所有人读取。

请注意,有些 unices 根本不支持符号链接的权限;而 OSX 却支持。

答案2

如果您的用户或组没有打开该文件父目录的执行位,那么您就无法在该目录中“搜索”。

相关内容