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

Jul*_*sLt 3 unix permissions mac-osx symbolic-link osx-snow-leopard

不确定这是否属于此处或在 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
Run Code Online (Sandbox Code Playgroud)

在我的其他用户(我想在其下执行的那个)下做同样的事情,我得到以下信息

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
Run Code Online (Sandbox Code Playgroud)

我怀疑答案非常愚蠢和简单,但我的理解是符号链接从底层文件继承了权限。

Gil*_*il' 6

ls不关心文件的权限,因为它只列出其目录条目。但是,当ls取消引用符号链接时,它正在访问链接的内容。所以它确实关心链接的权限。libodm10.dylib除非您在dba组中,否则您无权阅读目标内容。

您还需要更改符号链接的权限。这里没有理由不让链接世界可读。

请注意,某些 unice 根本不支持符号链接的权限;OSX 可以。