Linux

當一個埠被命中時,我如何找出 Apache 正在服務的文件?

  • November 26, 2018

我正在使用其他人設置的伺服器。伺服器是執行 Apache/2.0.59 (httpd) 的 CentOS 4.6。他們在埠 8443 上設置了更新服務。我知道它正在工作,但我需要找出當有人點擊該埠時 Apache 正在服務的文件。

我查看了 httpd.conf 文件以查看其中是否有任何內容,但那裡什麼也沒有。我也嘗試過使用nmap,但這只告訴我目前打開了哪些埠。的輸出nmap是:

8443/tcp open https-alt

那麼,當有人連接到該埠時,我如何才能找出提供了哪些文件呢?

您可以使用開關httpd查看配置在哪裡查找其配置文件:-V

$ httpd -V
Server version: Apache/2.2.15 (Unix)
Server built:   Feb 13 2012 22:31:42
Server's Module Magic Number: 20051115:24
Server loaded:  APR 1.3.9, APR-Util 1.3.9
Compiled using: APR 1.3.9, APR-Util 1.3.9
Architecture:   64-bit
Server MPM:     Prefork
 threaded:     no
   forked:     yes (variable process count)
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="/etc/httpd"
-D SUEXEC_BIN="/usr/sbin/suexec"
-D DEFAULT_PIDLOG="run/httpd.pid"
-D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
-D DEFAULT_LOCKFILE="logs/accept.lock"
-D DEFAULT_ERRORLOG="logs/error_log"
-D AP_TYPES_CONFIG_FILE="conf/mime.types"
-D SERVER_CONFIG_FILE="conf/httpd.conf"

您還可以使用該命令lsof查看 Unix 程序正在訪問哪些文件。我的版本httpd使用的是庫存埠 80,所以在你的情況下將 80 更改為 8443!

$ netstat -tapn|grep ::80
tcp        0      0 :::80                       :::*                        LISTEN      5338/httpd     

您現在可以執行lsof以找出日誌文件被寫入的位置:

$ lsof -p 5338|grep log
httpd   5338 root  mem    REG  253,0    10440   3141 /usr/lib64/httpd/modules/mod_logio.so
httpd   5338 root  mem    REG  253,0    27200   3139 /usr/lib64/httpd/modules/mod_log_config.so
httpd   5338 root    2w   REG  253,0     2014 395029 /var/log/httpd/error_log
httpd   5338 root    7w   REG  253,0     4140 394789 /var/log/httpd/access_log

您應該能夠確定access_log配置文件的位置並查看它們以確定“目錄”和“位置”指令。這些指定在告訴 Apache 提供哪些文件時要使用的本地目錄。

怎麼辦?

然後我會查看access_log以確保其中有對應於對伺服器的訪問的條目。我的意思是,如果我瀏覽伺服器,http://www.somedom.com/somefile我應該會看到這個訪問記錄在access_log文件中,如下所示:

192.168.1.110 - - [17/Jul/2013:14:39:50 -0400] "GET /somefile HTTP/1.1" 200 4303 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/5
37.36 (KHTML, like Gecko) Chrome/27.0.1453.110 Safari/537.36"

文件在哪裡?

您可以利用我們已經獲得的上述知識並開始應用它,如下所示:

這些位httpd -V告訴我們 Apache 的根:

-D HTTPD_ROOT="/etc/httpd"
-D SERVER_CONFIG_FILE="conf/httpd.conf"

所以我們知道主配置文件在這裡:/etc/httpd/conf/httpd.conf. 因此,請查看該文件中的這些行:

$ grep -E "DocumentRoot|Directory \"|^Include" /etc/httpd/conf/httpd.conf |grep -v "^#"
Include conf.d/*.conf
DocumentRoot "/var/www/html"
<Directory "/var/www/html">
<Directory "/var/www/icons">
<Directory "/var/www/cgi-bin">
   <Directory "/var/www/error">

所以我現在知道這些目錄是我們在access_log. 我會查看文件DocumentRoot,. 如果它不在這些位置中的任何一個,那麼我接下來將關注輸出中提到的目錄, .Directories``somefile``Include``grep``/etc/httpd/conf.d/*.conf

這些文件是 Apache 使用的附加配置,因此您還需要使用 重複這些步驟grep來查看這些文件。

引用自:https://unix.stackexchange.com/questions/83670