Linux
訪問 /proc/pid/ns/net 而不以 root 身份執行查詢程序?
在一個程序中,我通過掃描(符號)連結
/proc/pid/
來列舉網路名稱空間。ns/net
該程序在主機本身的“根”命名空間(原始 init)內執行。通常,我需要以 root 身份執行掃描器部分,否則我只能有限地訪問其他程序的/proc/pid/
資訊。如果可能,我想避免以 root 身份執行掃描程序,並且我想避免放棄特權的麻煩。我需要為我的掃描程序設置哪個 Linux 功能,以便它可以由非 root 使用者執行,並且仍然可以看到完整的
/proc/pid/
樹並讀取網路命名空間連結?
經過一些試驗和錯誤,我發現實際上
CAP_SYS_PTRACE
是需要的。相反,
CAP_DAC_READ_SEARCH
並CAP_DAC_OVERRIDE
沒有給予所需的訪問權限,其中包括readlink()
和類似的操作。我所看到的可以交叉檢查:首先,ptrace.c提供了必要的線索
__ptrace_may_access()
:/* May we inspect the given task? * This check is used both for attaching with ptrace * and for allowing access to sensitive information in /proc. * * ptrace_attach denies several cases that /proc allows * because setting up the necessary parent/child relationship * or halting the specified task is impossible. */
其次,nsfs 相關的函式,例如proc_ns_readlink()(間接)呼叫
__ptrace_may_access()
.最後,man 7 namespaces提到:
該子目錄中的符號連結如下:
$$ … $$ 取消引用或讀取(readlink(2))這些符號連結的權限由 ptrace 訪問模式 PTRACE_MODE_READ_FSCREDS 檢查控制;參見 ptrace(2)。