Linux

訪問 /proc/pid/ns/net 而不以 root 身份執行查詢程序?

  • January 9, 2020

在一個程序中,我通過掃描(符號)連結/proc/pid/來列舉網路名稱空間。ns/net該程序在主機本身的“根”命名空間(原始 init)內執行。通常,我需要以 root 身份執行掃描器部分,否則我只能有限地訪問其他程序的/proc/pid/資訊。如果可能,我想避免以 root 身份執行掃描程序,並且我想避免放棄特權的麻煩。

我需要為我的掃描程序設置哪個 Linux 功能,以便它可以由非 root 使用者執行,並且仍然可以看到完整的/proc/pid/樹並讀取網路命名空間連結?

經過一些試驗和錯誤,我發現實際上CAP_SYS_PTRACE是需要的。

相反,CAP_DAC_READ_SEARCHCAP_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)。

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