Permissions
當基礎文件已授予所有人“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
我懷疑答案非常愚蠢和簡單,但我的理解是符號連結繼承了底層文件的權限。
ls
不關心文件的權限,因為它只列出其目錄條目。但是,當ls
取消引用符號連結時,它正在訪問連結的內容。所以它確實關心連結的權限。libodm10.dylib
在這裡,除非您在組中,否則您無權閱讀目標是什麼dba
。您還需要更改符號連結的權限。這裡沒有理由不使連結世界可讀。
請注意,某些 unice 根本不支持符號連結的權限;OSX 可以。