在 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 - 我只是迁移它,但看不到这样做的方法。
放大代理进程可能需要被授予 PTRACE。这看起来有点不寻常,可能最好由 nginx 人来接受,但您可以尝试查看 man 8 setcap 以了解如何将 PTRACE 授予任何放大程序。
在这里回答:https ://unix.stackexchange.com/questions/297190/owner-cant-read-proc-pid-io
问题似乎是除了 uid 之外还需要设置 GID。