Como descubro que arquivo o Apache está servindo quando uma porta é atingida?

5

Estou trabalhando em um servidor configurado por outra pessoa. O servidor é o CentOS 4.6 executando o Apache / 2.0.59 (httpd). Eles têm uma configuração de serviço de atualização na porta 8443. Eu sei que está funcionando, mas eu preciso descobrir quais arquivos o Apache está servindo quando alguém acessa essa porta.

Eu olhei no arquivo httpd.conf para ver se havia alguma coisa lá, mas não havia nada lá. Eu tentei usar nmap também, mas isso só me mostrou quais portas estão abertas no momento. A saída de nmap foi:

8443/tcp open https-alt

Então, como posso descobrir quais arquivos são exibidos quando alguém se conecta a essa porta?

    
por Aust 19.07.2013 / 18:46

2 respostas

12

Você pode ver onde httpd está configurado para procurar seus arquivos de configuração usando a opção -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"

Você também pode usar o comando lsof para ver quais arquivos um processo Unix está acessando. Minha versão do httpd está usando a porta de estoque 80, então mude o 80 para o 8443 no seu caso!

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

Agora você pode executar lsof para descobrir onde os arquivos de log estão sendo gravados:

$ 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

Você deve ser capaz de determinar a localização do access_log , bem como os arquivos de configuração, e verificar através deles para determinar as diretivas "Directory" e "Location". Eles especificam quais diretórios locais devem ser usados ao informar ao Apache quais arquivos devem ser exibidos.

Agora o que?

Eu procuraria pelo access_log para ter certeza de que existem entradas que correspondem aos acessos ao servidor. O que quero dizer com isso é que, se eu navegar no servidor em http://www.somedom.com/somefile , eu verei esse acesso registrado no arquivo access_log da seguinte forma:

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"

Onde estão os arquivos?

Você pode ter o conhecimento acima que adquirimos e começar a aplicá-lo da seguinte forma:

Esses bits de httpd -V nos dizem a raiz do Apache:

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

Então sabemos que o arquivo de configuração principal está aqui: /etc/httpd/conf/httpd.conf . Então olhe através desse arquivo para estas linhas:

$ 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">

Então, agora sei que esses diretórios são fontes potenciais para o arquivo que vimos no access_log . O DocumentRoot e Directories que eu procuraria pelo arquivo, somefile . Se não estiver em nenhum desses locais, em seguida, eu me concentrarei no diretório Include mencionado acima na grep output, /etc/httpd/conf.d/*.conf .

Esses arquivos são configurações adicionais que o Apache usa, então você precisa repetir as etapas usando o grep para examinar esses arquivos também.

    
por 19.07.2013 / 19:14
0

Você poderia tentar

# netstat -ntaupe | grep 8443
    
por 19.07.2013 / 19:02