Linux

是否有一個文件始終存在而“普通”使用者不能 lstat 它?

  • February 26, 2019

我需要這個進行單元測試。有一個函式在作為參數傳遞的文件路徑上執行lstat 。我必須觸發lstat失敗的程式碼路徑(因為程式碼覆蓋率必須達到90%)

該測試只能在單個使用者下執行,因此我想知道 Ubuntu 中是否存在始終存在的文件,但普通使用者對其或其文件夾沒有讀取權限。(所以lstat除非以root身份執行,否則會失敗。)

不存在的文件不是解決方案,因為有一個單獨的程式碼路徑,我已經觸發了它。

編輯:僅缺乏對文件的讀取權限是不夠的。這樣lstat仍然可以執行。通過在 /root 中創建一個文件夾並在其中創建一個文件,我能夠觸發它(在我具有 root 訪問權限的本地電腦上)。並在文件夾上設置權限 700。所以我正在尋找一個文件夾中的文件,該文件夾只能由 root 訪問。

在現代 Linux 系統上,您應該能夠使用/proc/1/fdinfo/0(id 1 的程序的文件描述符 1(stdout)的資訊(init在應該執行的根 pid 命名空間中root))。

您可以找到一個列表(作為普通使用者):

sudo find /etc /dev /sys /proc -type f -print0 |
 perl -l -0ne 'print unless lstat'

-type f(如果您不想限制為正常文件,請刪除)。

/var/cache/ldconfig/aux-cache如果您只需要考慮 Ubuntu 系統,它是另一個潛在的候選者。它應該可以在大多數 GNU 系統上工作,因為/var/cache/ldconfig它只能通過ldconfigGNU libc 附帶的命令對 root 進行讀+寫+搜尋。

引用自:https://unix.stackexchange.com/questions/502857