Permissions

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

  • September 14, 2016

在 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 中的其他文件。似乎必須有其他一些安全機制來阻止訪問,但我不知道它可能是什麼。

注意:不確定這是否允許,但我從 U&L 交叉發布了這個問題,因為它沒有引起注意並且正在影響我們的生產伺服器。最初的問題在這裡:https ://unix.stackexchange.com/questions/297190/owner-cant-read-proc-pid-io - 我只是遷移它,但看不到這樣做的方法。

在這裡回答:https ://unix.stackexchange.com/questions/297190/owner-cant-read-proc-pid-io

問題似乎是除了 uid 之外還需要設置 GID。

放大代理程序可能需要被授予 PTRACE。這看起來有點不尋常,可能最好由 nginx 人來接受,但您可以嘗試查看 man 8 setcap 以了解如何將 PTRACE 授予任何 amplify 程序。

引用自:https://serverfault.com/questions/799206