為什麼使用者不應該使用絕對路徑 cd 到一個目錄而不對所有祖先進行 rx ?
在 Windows 上,似乎如果使用者對該
lev5
目錄具有讀/寫權限,但對其所有祖先都沒有權限,cd c:\lev1\lev2\lev3\lev4\lev5
仍然有效。在 Linux 上,即使我給使用者完全權限
lev5
和使用rx
權限,如果他也沒有權限// ,也不起作用。lev4``setfacl``rx``lev1``lev2``lev3``cd /lev1/lev2/lev3/lev4/lev5
有沒有辦法讓它像Windows一樣工作?
我注意到的一件事是,如果使用者的 shell 從
/lev1/lev2/lev3/lev4/
(sudo 使用者在/lev1/lev2/lev3/lev4/
,並切換到使用者使用sudo -u
那裡,使用者可以)開始cd ./lev5
。有那麼一會兒,我想知道這是否是隱藏祖先目錄存在的安全功能喜歡lev1
或lev2
來自使用者(即,使用者只知道lev5
存在於下面lev4
,僅此而已),但情況似乎並非如此,因為pwd
在使用者的 shell 中執行會給出完整路徑/lev1/lev2/lev3/lev4/lev5
,所以我認為沒有必要阻止使用者使用完整路徑cd
。
本質上有兩種看待事物的方式,例如,作為單個事物
/lev1/lev2/lev3/lev4/lev5
或作為序列,,,,,,。如果您執行前者,那麼確實沒有理由不要求訪問該對象。然而,將其視為一個序列並一次解決一個步驟可以讓您做更複雜的事情。例如,解析一個名稱可能會將您帶到某個網路儲存。期望一台機器上的作業系統知道可以連接的每個網路儲存設備的詳細資訊以便它可以決定您是否有權訪問最終對像是不合理的。/``lev1``lev2``lev3``lev4``lev5
使用
pwd
可能具有欺騙性。它通常是 shell 的內置函式,並從PWD
環境變數中初始化。在過去,/bin/pwd
工作方式是切換到..
目前目錄,然後在目前目錄中查找與它剛剛所在位置相匹配的內容。它重複這個直到它到達/
。使用這種方法,如果您刪除了某些父目錄中的訪問權限,您可能會從/bin/pwd
. 這些天在 linux 上,核心跟踪你的位置,/bin/pwd
所做的就是呼叫getcwd
系統呼叫。