サーバ上で動いているWebサーバを特定する方法

自分で構築したわけでもないWebサーバをメンテナンスしないといけなくなって、当然ドキュメントなんて存在しないし、例えあったとしても正しいという保証はまったくないという良くある状況を仮定したとして…

この状態で動いているWebサーバを特定し、メンテナンスをしないといけないとします。

OSやdistributionで用意されているデフォルトのApacheを使ってくれていれば良いのですが、往々にして自前でビルドしたApacheが走っていたり、そもそもApache以外のWebサーバ(nginx等)が動いていたりするわけです。何がWebサーバとして使われ、その設定ファイルがどこにあるのか? そこを特定するところから全ては始まります。

以下、CentOSで実行することを仮定してます。それ以外のOSやLinux distributionであれば、パス名等が違うことがあるかもしれません。

また、後半の設定ファイルを特定する部分については、Apacheの場合のみを書いてます。

lsofで TCP 80番ポートや443番ポートをLISTENしているプロセスを特定する

ブラウザ等のWebクライアントとサーバの間にロードバランサー等が入っておらず、直接Webサーバに接続していると仮定します。

Webクライアントから当該サーバにアクセスする時、URLのスキームが “http” であればTCP 80番ポート、”https” であればTCP 443番ポートに接続しているということになります。もしそれ以外のポートにアクセスするのであれば、ポート番号を指定しているはずなので。

ということは、サーバでTCP の80番や443番ポートをLISTENしているプロセスが特定出来れば、それがWebサーバのプロセスということになります。

特定のポートをLISTENしているプロセスを調べるためには、lsofコマンドを使います。TCP 80番ポートをLISTENしているプロセスを調べるには、下記を実行します。

$ sudo /usr/sbin/lsof -Pn -i tcp:80
COMMAND   PID   USER   FD   TYPE     DEVICE SIZE/OFF NODE NAME
httpd    5931 apache    3u  IPv4  837255019      0t0  TCP *:80 (LISTEN)
httpd    7124 apache    3u  IPv4  837255019      0t0  TCP *:80 (LISTEN)
httpd    7464 apache    3u  IPv4  837255019      0t0  TCP *:80 (LISTEN)
httpd    7469 apache    3u  IPv4  837255019      0t0  TCP *:80 (LISTEN)
httpd    8084 apache    3u  IPv4  837255019      0t0  TCP *:80 (LISTEN)
httpd    8086 apache    3u  IPv4  837255019      0t0  TCP *:80 (LISTEN)

lsofの -P オプションは、ポート番号を数字で出力します。また、-n は接続先のDNS逆引きをしないというオプションになります。

そして -i tcp:80というオプションが、TCP の80番をLISTENしているプロセスのみを出力するというオプションです。

この出力から、このサーバ上で動いているのはApache httpdであろうということがわかります。

次は、COMMAND が httpd であるプロセスのフルパスを調べて行きます。

$ sudo /usr/sbin/lsof -Pn -c httpd -a -d txt
COMMAND   PID   USER  FD   TYPE DEVICE SIZE/OFF    NODE NAME
httpd   11358   root txt    REG  253,0   928892 4606756 /usr/local/apache/bin/httpd
httpd   22911 apache txt    REG  253,0   928892 4606756 /usr/local/apache/bin/httpd
httpd   22982 apache txt    REG  253,0   928892 4606756 /usr/local/apache/bin/httpd
httpd   23124 apache txt    REG  253,0   928892 4606756 /usr/local/apache/bin/httpd
httpd   23368 apache txt    REG  253,0   928892 4606756 /usr/local/apache/bin/httpd
httpd   23412 apache txt    REG  253,0   928892 4606756 /usr/local/apache/bin/httpd
httpd   24338 apache txt    REG  253,0   928892 4606756 /usr/local/apache/bin/httpd

-c httpd オプションで、COMMANDが httpd であるプロセスのみを絞り込んで出力します。さらに、-d txt オプションで、FD (File Descriptor) が txt であるもののみを絞り込んでいます。

複数のオプションを AND で繋げるために、-a オプションを使っています。-a オプションなしで複数のオプションを並べた時は、それらは OR で繋げたものと見做されます。

この出力から、このサーバ上で動いている Apacheのフルパスが /usr/local/apache/bin/httpd であることがわかります。

Apacheの設定ファイルの場所を調べる

ここまでで、サーバ上で動いてるWebサーバが Apache であり、そのフルパスが /usr/local/apache/bin/httpd であることがわかりました。次にこの Apache の設定ファイルの場所を調べることにします。

通常であれば、設定ファイルは /usr/local/apache/conf/httpd.conf だと思われるのですが、設定ファイル等の位置はビルド時に変更することが出来るので、念の為ちゃんと調べることにします。

そのためには、httpd に -V オプションを指定して実行します。そうすると、バージョン番号やビルド時のオプション等を出力してくれます。

$ sudo /usr/local/apache/bin/httpd -V
Server version: Apache/2.2.29 (Unix)

...(略)...

Server compiled with....
 -D APACHE_MPM_DIR="server/mpm/prefork"
 -D APR_HAS_SENDFILE
 -D APR_HAS_MMAP
 -D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
 -D APR_USE_SYSVSEM_SERIALIZE
 -D APR_USE_PTHREAD_SERIALIZE
 -D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
 -D APR_HAS_OTHER_CHILD
 -D AP_HAVE_RELIABLE_PIPED_LOGS
 -D DYNAMIC_MODULE_LIMIT=128
 -D HTTPD_ROOT="/usr/local/apache"
 -D SUEXEC_BIN="/usr/local/apache/bin/suexec"
 -D DEFAULT_PIDLOG="/var/run/httpd.pid"
 -D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
 -D DEFAULT_LOCKFILE="/var/run/accept.lock"
 -D DEFAULT_ERRORLOG="logs/error_log"
 -D AP_TYPES_CONFIG_FILE="conf/mime.types"
 -D SERVER_CONFIG_FILE="conf/httpd.conf"

この出力の HTTPD_ROOT というのが、この Apache の ServerRoot となり、全ての相対パスはこのディレクトリからの相対パスとなります。

SERVER_CONFIG_FILE というのが、この Apache の設定ファイルになります。”conf/httpd.conf” と、相対パスで指定されているので、HTTPD_ROOT と繋げて “/usr/local/apache/conf/httpd.conf” が設定ファイルであるということがわかります。

終わりに

今回紹介した内容の内、「接続先ポートをLISTENしているプロセスを特定する」部分に関しては、Apacheに限らず MySQL や sshd等でも汎用的に使える方法です。

その後の設定ファイルを特定する方法は、使っているプログラム毎にやり方が違って来るので、それぞれのマニュアル等を調べる必要があります。

スポンサーリンク
スポンサーリンク:

フォローする