Centos

所有者無法讀取 /proc/$pid/io

  • March 17, 2018

在 CentOS 7 上,我正在嘗試調試 nginx 放大代理無法讀取 /proc/$pid/io 的問題,即使它由正確的使用者擁有。

現在的 nginx 工作程序之一是 pid 5693:

# ps aux | grep 5693
nginx     5693  0.5  0.0 129000 14120 ?        S    Jul18  16:10 nginx: worker process

nginx 使用者有權讀取文件:

# ls -lAh /proc/5693/io
-r-------- 1 nginx nginx 0 Jul 20 11:30 /proc/5693/io

…但實際上無法閱讀:

# sudo -u nginx /bin/sh -c 'cat /proc/5693/io'
cat: /proc/5693/io: Permission denied

…即使 selinux 被禁用:

# sestatus
SELinux status:                 disabled

root 可以讀取 /proc/5693/io 就好了,nginx 使用者可以讀取 /proc/5693 中的其他文件。似乎必須有其他一些安全機制來阻止訪問,但我不知道它可能是什麼。

根據必須proc(5)說的內容/proc/[pid]/io“訪問此文件的權限由 ptrace 訪問模式 TRACE_MODE_READ_FSCREDS 檢查管理;請參閱 ptrace(2)。” 手冊頁的Ptrace 訪問模式檢查部分ptrace(2)包含以下內容的列表檢查以授予或拒絕權限,包括程序是否標記為可轉儲,您是否具有與目標程序相同的 fsuid 等,可能值得一看。

該文件是最近添加的,請查看上游。

我懷疑除了 UID 之外,您還需要更改執行程序的 GID。

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