Bagaimana cara mengetahui file yang dilayani Apache ketika port terkena?


5

Saya sedang mengerjakan server yang diatur orang lain. Server adalah CentOS 4.6 yang menjalankan Apache / 2.0.59 (httpd). Mereka memiliki pengaturan layanan pembaruan pada port 8443. Saya tahu itu berfungsi tetapi saya perlu mencari tahu file apa yang dilayani Apache ketika seseorang menyentuh port itu.

Saya mencari di file httpd.conf untuk melihat apakah ada sesuatu di sana tetapi tidak ada di sana. Saya mencoba menggunakan nmapjuga tetapi itu hanya menunjukkan saya port mana yang sedang terbuka. Output dari nmapadalah:

8443/tcp open https-alt

Jadi bagaimana saya bisa mengetahui file apa yang dilayani ketika seseorang terhubung ke port itu?


Bisakah Anda menemukannya di file log?
eccstartup

Jawaban:


12

Anda dapat melihat di mana httpddikonfigurasi untuk mencari file-file konfigurasinya menggunakan -Vsaklar:

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

Anda juga dapat menggunakan perintah lsofuntuk melihat file apa yang sedang diakses oleh proses Unix. Versi saya httpdmenggunakan stock port 80 jadi ubah 80 ke 8443 dalam casing Anda!

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

Anda sekarang dapat menjalankan lsofuntuk mencari tahu di mana file-file log sedang ditulis untuk:

$ 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

Anda harus dapat menentukan lokasi access_logserta file konfigurasi dan melihat melalui mereka untuk menentukan arahan "Direktori" dan "Lokasi". Ini menentukan direktori lokal apa yang akan digunakan ketika memberi tahu Apache file apa yang akan disajikan.

Sekarang apa?

Saya kemudian akan memeriksa access_loguntuk memastikan bahwa ada entri di sana yang sesuai dengan akses terhadap server. Yang saya maksud dengan ini adalah jika saya menelusuri server di http://www.somedom.com/somefilesaya akan melihat akses ini direkam dalam access_logfile seperti ini:

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"

Di mana file-file itu?

Anda dapat mengambil pengetahuan di atas yang telah kami peroleh dan mulai menerapkannya seperti ini:

Bit-bit ini dari httpd -Vmemberitahu kita root Apache:

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

Jadi kita tahu file konfigurasi utama di sini: /etc/httpd/conf/httpd.conf. Jadi lihat file itu untuk baris berikut:

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

Jadi saya sekarang tahu bahwa direktori ini adalah sumber potensial untuk file yang kita lihat di access_log. Saya DocumentRootdan Directoriessaya mencari file somefile,. Jika tidak ada di salah satu lokasi ini maka saya selanjutnya akan fokus pada Includedirektori yang disebutkan di atas dalam grepoutput /etc/httpd/conf.d/*.conf,.

File-file ini adalah konfigurasi tambahan yang digunakan Apache sehingga Anda harus mengulangi langkah-langkah menggunakan grepuntuk melihat melalui file-file ini juga.


Ya ini sangat dekat! Log ini menunjukkan kepada saya apa yang diminta pengguna dari URL tetapi saya ingin mencari file mana yang sesuai dengan di server. Bagaimana saya bisa melakukan itu?
Aust

@Aust - Lihat pembaruan.
slm

Anda membuat saya sangat bahagia! Terima kasih! File-file itu tidak ada di direktori asli itu jadi saya berlari grep -E "DocumentRoot|Directory \"|^Include" /etc/httpd/conf.d/*.conf |grep -v "^#"dan mulai mencari-cari di direktori itu dan menemukannya. = D
Aust

@Aust - senang itu berhasil untuk Anda!
slm

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.