Permissions
所有者無法讀取 /proc/$pid/io
在 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 程序。