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