允許使用者遍歷給定目錄的路徑

允許使用者遍歷給定目錄的路徑

比如說,我想授予使用者colleague對目錄的讀取權限/rather/long/path/to/the/directory,但不一定對其父目錄進行讀取權限。

例如所解釋的這裡那裡,我首先需要確保colleague可以遍歷該路徑。使用setfacl

setfacl -m u:colleague:x /rather
setfacl -m u:colleague:x /rather/long
setfacl -m u:colleague:x /rather/long/path
setfacl -m u:colleague:x /rather/long/path/to
setfacl -m u:colleague:x /rather/long/path/to/the
setfacl -m u:colleague:xr /rather/long/path/to/the/directory

對於深度嵌套的路徑來說,這是相當乏味的。有沒有更優雅的方法來做到這一點?

PS 為了讓它變得有點困難,作為普通用戶,我可能無權更改路徑中頂級目錄的權限(例如/home)。如果可能,解決方案應該忽略這些目錄(假設colleague可以遍歷它們),或者更好的是,檢查是否colleague允許遍歷它們並給出錯誤訊息,如果不允許。

答案1

簡單而愚蠢的答案:

你可以縮短透過結合第一個命令來稍微調整你的命令序列n– 其中 1 個:

setfacl -mu:同事:x /相當/相當/長/相當/長/路徑/相當/長/路徑/到/相當/長/路徑/到/the
setfacl -mu:同事:xr /rather/long/path/to/the/目錄

一個「明顯」的警告:

即使您擁有目標(葉)目錄,您也需要對路徑中的每個目錄具有執行(遍歷)存取權限。如果有任何您無法存取且不擁有的目錄,那麼您就不走運了。 (您需要假設一個身份(即root目錄的所有者)來允許您自己訪問,或者說服有權這樣做的人。這超出了這個問題的範圍。)

但是,如果有您擁有但無法存取的中間目錄(例如,有人已經這樣做了chmod 0),您需要授予自己存取權限從上到下

答:(TL;DR)

我提出上述觀點是因為這是由下而上進行的:

leaf="/rather/long/path/to/the/directory"
分支=“$葉”
while 分支=“$(目錄名“$branch”)”
     setfacl -mu:同事:x "$分支" ||休息
     if [ "$branch" = / ]
     然後
         休息
完畢
setfacl -mu:同事:xr“$葉”

setfacl或者,您可以透過新增來隱藏任何錯誤訊息2> /dev/null。如果你有一種病態的情況,你擁有/rather/long/rather/long/path/to,但沒有/rather/long/path(但它的權限是開放的),請刪除|| break後的setfacl,因為在 上出現錯誤後你需要繼續爬樹setfacl … /rather/long/path。否則,如果你不是root,你可以刪除if [ "$branch" = / ]測試,因為當您到達無法運行的目錄層級時,循環將終止setfacl。 (但這不是一個好主意;如果您將其保存為腳本,有一天您將運行它root,然後您將有一個無限循環。)

不用說,如果將其作為腳本,則目錄路徑和同事的姓名應該是參數。

相關內容