Permissions

當基礎文件已授予所有人“r”時,在符號連結上執行 ls 時,是什麼導致權限被拒絕?

  • August 12, 2010

不確定這是屬於這裡還是在 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

我懷疑答案非常愚蠢和簡單,但我的理解是符號連結繼承了底層文件的權限。

ls不關心文件的權限,因為它只列出其目錄條目。但是,當ls取消引用符號連結時,它正在訪問連結的內容。所以它確實關心連結的權限。libodm10.dylib在這裡,除非您在組中,否則您無權閱讀目標是什麼dba

您還需要更改符號連結的權限。這裡沒有理由不使連結世界可讀。

請注意,某些 unice 根本不支持符號連結的權限;OSX 可以。

引用自:https://serverfault.com/questions/169990