所有者は/proc/$pid/ioを読むことができません。

所有者は/proc/$pid/ioを読むことができません。

CentOS 7では、nginx増幅エージェントが正しいユーザーが所有している/proc/$pid/ioを読み取れない問題をデバッグしようとしています。

nginxワーカープロセスの1つの現在の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 の他のファイルを読み取ることができます。アクセスを防ぐ他のセキュリティメカニズムがあるようですが、それが何であるかはまったくわかりません。

答え1

proc(5)このファイルへのアクセスは、/proc/[pid]/ioptraceアクセスモードTRACE_MODE_READ_FSCREDSチェックによって制御されます。ptrace(2)を参照してください。ptrace アクセスモードの確認プロセスがダンプ可能としてマークされているか、ターゲットプロセスと同じfsuidを持っているかなど、承認または拒否を確認するためのもののリストを含むマニュアルページのセクションをptrace(2)見る価値があります。

ドキュメントが最近追加されました。アップストリームを確認してください。

UIDに加えて、実行中のプロセスのGIDも変更する必要があるようです。

関連情報