[自分用メモ][Linux] 特定の共有ライブラリが掴んでいるプロセスを探す方法。

2014/05/06 10:47AIX、UNIX、Linuxlinux,process,shared library,プロセス,共有ライブラリ

自分用メモとして残しておきます。

以前にOpenSSLの脆弱性として有名になったHeartbleedがありましたが、その際にOpenSSLのライブラリが掴んでいるプロセスを特定する際に、使用したコマンドのメモを残しておきます。

これを使うことで、掴んでいるプロセスを特定し、場合によってはサービスの再起動などの対応が出来ると思います。

といってもbashのワンライナーで実現できました。

目次

手順

ps `grep 共有ライブラリの名前 /proc/*/maps | cut -d / -f 3`

例えば自分の環境において、OpenSSLの共有ライブラリのlibssl.soが掴んでいるプロセスの場合は以下のようになります。

# ps `grep libssl.so /proc/*/maps | cut -d / -f 3`
PID TTY      STAT   TIME COMMAND
2097 ?        Ss     0:00 nginx: master process /usr/sbin/nginx
2098 ?        S      0:00 nginx: worker process
2099 ?        S      0:03 nginx: worker process
2100 ?        S      0:03 nginx: worker process
2101 ?        S      0:03 nginx: worker process
2180 ?        Ss     0:06 /usr/bin/python /usr/bin/supervisord -c /etc/supervisor/supervis
2236 ?        S      0:04 python /var/www/webvirtmgr/console/webvirtmgr-novnc
2252 ?        S      0:08 /usr/bin/python /var/www/webvirtmgr/manage.py run_gunicorn -c /v
2349 ?        S      0:00 /usr/bin/python /var/www/webvirtmgr/manage.py run_gunicorn -c /v
2350 ?        S      0:00 /usr/bin/python /var/www/webvirtmgr/manage.py run_gunicorn -c /v
2351 ?        S      0:00 /usr/bin/python /var/www/webvirtmgr/manage.py run_gunicorn -c /v
2352 ?        S      0:00 /usr/bin/python /var/www/webvirtmgr/manage.py run_gunicorn -c /v
2353 ?        S      0:00 /usr/bin/python /var/www/webvirtmgr/manage.py run_gunicorn -c /v
2356 ?        S      0:00 /usr/bin/python /var/www/webvirtmgr/manage.py run_gunicorn -c /v
2357 ?        S      0:00 /usr/bin/python /var/www/webvirtmgr/manage.py run_gunicorn -c /v
2361 ?        S      0:00 /usr/bin/python /var/www/webvirtmgr/manage.py run_gunicorn -c /v
2362 ?        S      0:00 /usr/bin/python /var/www/webvirtmgr/manage.py run_gunicorn -c /v
2508 ?        Sl    94:53 qemu-system-x86_64 -enable-kvm -name centos6_proxy2 -S -machine
2540 ?        Sl    61:28 qemu-system-x86_64 -enable-kvm -name centos6_zabbix -S -machine
2570 ?        Sl     7:10 qemu-system-x86_64 -enable-kvm -name centos6_dns2 -S -machine pc

nginxやpython、qemuなどが掴んでいるプロセスとなります。

例えばnginxの場合、何がロードされているかは以下のようになります。

# cat /proc/2097/maps
00400000-004cc000 r-xp 00000000 fc:00 14027922                           /usr/sbin/nginx
006cb000-006cc000 r--p 000cb000 fc:00 14027922                           /usr/sbin/nginx
006cc000-006e1000 rw-p 000cc000 fc:00 14027922                           /usr/sbin/nginx
006e1000-006f0000 rw-p 00000000 00:00 0
0161f000-01712000 rw-p 00000000 00:00 0                                  [heap]
7f648cf8a000-7f648cf95000 r-xp 00000000 fc:00 12976373                   /lib/x86_64-linux-gnu/libnss_files-2.19.so
7f648cf95000-7f648d194000 ---p 0000b000 fc:00 12976373                   /lib/x86_64-linux-gnu/libnss_files-2.19.so
7f648d194000-7f648d195000 r--p 0000a000 fc:00 12976373                   /lib/x86_64-linux-gnu/libnss_files-2.19.so
後略

この中からOpenSSLに関連するライブラリ(libssl.solibcrypto.so)を探して検索してやることで、該当プロセスを見つけることが出来ます。

この記事を書いた人
kometchtech

kometchtech
うつ病を患いながら、IT業界の末席にいるおっさんエンジニア。科学計算をしたことがないのに、HPC分野にお邪魔している。興味のある分野で学習したことをblogにまとめつつ、うつ病の経過症状のメモも置いておく日々。じつはRouterboard User Group JPの中の人でもある。
Amazon欲しいものリスト / Arm板を恵んでくれる人募集中

Buy Me A Coffee